Do the right thing with integers or floats
M: float fp-sign double>bits 63 bit? ; inline
+M: float neg? fp-sign ; inline
+
M: float abs double>bits 63 2^ bitnot bitand bits>double ; inline
: fixnum-min ( x y -- z ) [ fixnum< ] most ; foldable
: fixnum-max ( x y -- z ) [ fixnum> ] most ; foldable
+M: integer neg? 0 < ; inline
+
M: integer numerator ; inline
M: integer denominator drop 1 ; inline
: even? ( n -- ? ) 1 bitand zero? ; inline
: odd? ( n -- ? ) 1 bitand 1 number= ; inline
+GENERIC: neg? ( x -- -x )
+
: if-zero ( ..a n quot1: ( ..a -- ..b ) quot2: ( ..a n -- ..b ) -- ..b )
[ dup zero? ] [ [ drop ] prepose ] [ ] tri* if ; inline