Fixnum and flonum arithmetic is already supported by many systems, mainly for efficiency. Standardization of fixnum and flonum arithmetic increases the portability of code that uses it. Standardizing the precision of fixnum and flonum arithmetic would make it inefficient on some systems, which would defeat its purpose. Therefore, R6RS specifies the syntax and much of the semantics of fixnum and flonum arithmetic, but makes the precision implementation-dependent.
Existing implementations employ different implementation strategies for fixnums: Some implement the model specified by R6RS (overflows cause exceptions), some implement modular arithmetic (overflows “wrap around”), and others do not handle arithmetic overflows at all. The latter model violates the safety requirement of R6RS. In programs that use fixnums instead of generic arithmetic, overflows are typically programming mistakes. The model chosen for R6RS has the advantage that such overflows do not get silently converted into meaningless number objects, and that the programs gets notified of the violation through the exception system.
The bitwise operations have been adapted from the operations described in SRFIs 33 [31] and 60 [20].