Number protocol - Factor Documentation (original) (raw)

Math operations obey certain numerical upgrade rules. If one of the inputs is a bignum and the other is a fixnum, the latter is first coerced to a bignum; if one of the inputs is a float, the other is coerced to a float.

Two examples where you should note the types of the inputs and outputs:

USE: classes 3 >fixnum 6 >bignum * class-of .
bignum

1/2 2.0 + .
2.5

The following usual operations are supported by all numbers.
+ ( x y -- z )
- ( x y -- z )
* ( x y -- z )
/ ( x y -- z )

Non-commutative operations take operands from the stack in the natural order; 6 2 / divides 6 by 2.
Division by zero

Real numbers (but not complex numbers) can be ordered:

<= ( x y -- ? )
> ( x y -- ? )
>= ( x y -- ? )

Numbers can be compared for equality using =, or a less precise test which disregards types:

See also
Floating point comparison operations