F32.to_nat.wide: def of Base Import: import Base Lines 1912-1921 of Base/base.bend: https://jend.leeeet.dev/read.txt?path=Base/base.bend&start_line=1912&end_line=1921 import Base # Preserve the direct cast below 2^32; wider Nats need both word halves. # Past 2^48-1 no Nat fits, so the direct cast gives 0. def F32.to_nat.wide(+a: F32, wide: Bool) -> Nat: match wide: case False{}: U32.to_nat(F32.to_u32(a)) case True{}: +hi = U32.to_nat(F32.to_u32(F32.div(a, 4294967296.0))) +lo = U32.to_nat(F32.to_u32(F32.mod(a, 4294967296.0))) Nat.add(Nat.mul(hi, Nat.mul(65536n, 65536n)), lo) Uses (9): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32.div https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32.mod https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32.to_u32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.add https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.mul https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.to_nat