Thomas A. Russ <firstname.lastname@example.org> wrote:
| Zach Beane <email@example.com> writes:
| > Assuming you mean "29-30 bits", the specification mandates only that
| > it is a supertype of (signed-byte 16). Some implementations have much
| > smaller than 30 bits available in their fixnums.
| Quite so. Actually 29 bits seems to be quite popular, but with some
| lower values.
| On Mac OS X:
| 29 bits: MCL, OpenMCL, SBCL, CMUCL
| On Linux
| 29 bits: ACL, CMUCL
Actually, the 32-bit versions of CMUCL (and I would suspect SBCL as well)
have *30*-bit (signed) fixnums. Yes, the object representation does use
the low three bits as tags, but *two* of the eight encodings are assigned
to FIXNUM, so there's an effective 30-bit (signed) range:
cmu> (log (- most-positive-fixnum most-negative-fixnum -1) 2)
 Lowtag #b000 is EVEN-FIXNUM-TYPE and lowtag #b100 is ODD-FIXNUM-TYPE.
Thus, in the absence of overflow, native 32-bit machine arithmetic
can be used to add or subtract FIXNUMs.
Rob Warnock <firstname.lastname@example.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607