Thomas A. Russ <tar@sevak.isi.edu> wrote:
+---------------
| Zach Beane <xach@xach.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[1], so there's an effective 30-bit (signed) range:
cmu> (log (- most-positive-fixnum most-negative-fixnum -1) 2)
30.0f0
cmu>
-Rob
[1] 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 <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607