unit num/math : pow2 ( n -- n ) 1 swap lshift ; code pow2? S) &) !, 1 i) -, S) &) &, 0 i) =) bool, exit, : log2mod ( n -- mod n ) ?dup not ?abort"log2 can't compute 0" dup 0 begin ( orig n i ) swap 2/ ?dup while swap 1+ repeat ( orig i ) tuck pow2 - swap ; : log2 ( n -- n ) log2mod nip ; : log2# ( n -- n ) log2mod swap if abort"not a power of 2" then ; : roundup ( n div -- n ) tuck /+ * ; : rounddown ( n div -- n ) tuck / * ; \ Heron's method : isqrt ( n -- n ) dup 1 <= if exit then r! 2/ begin dup r@ over / + 2/ ( hi lo ) 2dup > while nip repeat rdrop drop ; code abs ( n -- n ) 0 i) signed) <) if, 0 i) swap-, then exit,