## Module (chicken fixnum)

Because CHICKEN supports a full numeric tower, operations can sometimes incur a substantial overhead to simply detect the type of numbers you're passing in. When you know you're definitely dealing only with fixnums, you can choose to use fixnum-specific operations to avoid this overhead.

This is purely a performance hack. You might want to consider adding type annotations instead, this often gives the same performance boost without having to rewrite all numeric operators in your code.

### Arithmetic fixnum operations

fx+ N1 N2 procedure
fx- N1 N2 procedure
fx* N1 N2 procedure
fx/ N1 N2 procedure
fxmod N1 N2 procedure
fxrem N1 N2 procedure
fxneg N procedure
fxmin N1 N2 procedure
fxmax N1 N2 procedure
fxand N1 N2 procedure
fxior N1 N2 procedure
fxxor N1 N2 procedure
fxnot N procedure
fxshl N1 N2 procedure
fxshr N1 N2 procedure
fxgcd N1 N2 procedure

  `fx+` and friends are arithmetic fixnum operations. These procedures do not check their arguments, so non-fixnum parameters will result in incorrect results. `fxneg` negates its argument.

  On division by zero, `fx/`, `fxmod` and `fxrem` signal a condition of kind `(exn arithmetic)`.

  `fxshl` and `fxshr` perform arithmetic shift left and right, respectively.

### Overflow-aware fixnum operations

fx+? N1 N2 procedure
fx-? N1 N2 procedure
fx*? N1 N2 procedure
fx/? N1 N2 procedure

  These procedures behave similarly to their standard counterparts with the exception that `#f` is returned if an argument is not a fixnum or the result of the operation overflows.

  Chaining of such procedures is well-defined and causes the overflow error to be propagated.

### Fixnum comparison and predicates

fxodd? N procedure
fxeven? N procedure
fx= N1 N2 procedure
fx> N1 N2 procedure
fx< N1 N2 procedure
fx>= N1 N2 procedure
fx<= N1 N2 procedure

  Comparison of fixnums and predicates on them.

### Fixnum limits

most-positive-fixnum constant
most-negative-fixnum constant
fixnum-bits constant
fixnum-precision constant

  Platform-specific fixnum limits.

Previous: Module (chicken file posix)

Next: Module (chicken flonum)