Next: Flonum arithmetic, Previous: Type and range checking, Up: Efficiency Tips [Contents][Index]

The usual arithmetic operations like `+`

and `<`

are called
generic arithmetic operations because they work for all (appropriate)
kinds of number.

A *fixnum* is an exact integer that is small enough to fit in a
machine word. In MIT/GNU Scheme, fixnums are 26 bits on 32-bit
machines, and 58 bits on 64-bit machines; it is reasonable to assume
that fixnums are at least 24 bits. Fixnums are signed; they are encoded
using 2’s complement.

All exact integers that are small enough to be encoded as fixnums are
always encoded as fixnums—in other words, any exact integer that is
not a fixnum is too big to be encoded as such. For this reason, small
constants such as `0`

or `1`

are guaranteed to be fixnums. In
addition, the lengths of and valid indexes into strings and vectors are
also always fixnums.

If you know that a value is always a small fixnum, you can substitute the equivalent fixnum operation for the generic operation. However, care should be exercised: if used improperly, these operations can return incorrect answers, or even malformed objects that confuse the garbage collector. For a listing of all fixnum operations, see Fixnum Operations in MIT/GNU Scheme Reference Manual.

A fruitful area for inserting fixnum operations is in the index operations in tight loops.