[squeak-dev] Float hierarchy for 64-bit Spur

Eliot Miranda eliot.miranda at gmail.com
Fri Nov 21 01:51:42 UTC 2014

Hi All,

    64-bit Spur can usefully provide an immediate float, a 61-bit subset of
the ieee double precision float.  The scheme steals bits from the mantissa
to use for the immediate's 3-bit tag pattern.  So values have the same
precision as ieee doubles, but can only represent the subset with exponents
between 10^-38 and 10^38, the single-precision range.  The issue here is
how to organize the class hierarchy.

The approach that looks best to me is to modify class Float to be an
abstract class, and add two subclasses, BoxedFloat and SmallFloat, such
that existing boxed instances of Float outside the SmallFloat range will
become instances of BoxedFloat and instances within that range will be
replaced by references to the relevant SmallFloat.

With this approach ...

- Float pi etc can still be used, even though they will answer instances of
SmallFloat.  But tests such as "self assert: result class == Float." will
need to be rewritten to e.g.  "self assert: result isFloat".

- BoxedFloat and SmallFloat will not be mentioned much at all since floats
print themselves literally, and so the fact that the classes have changed
won't be obvious.

- the boxed Float primitives (receiver is a boxed float) live in BoxedFloat
and the immediate ones live in SmallFloat.  Making SmallFloat a subclass of
Float poses problems for all the primitives that do a super send to retry,
since the boxed Float prims will be above the unboxed ones and so the boxed
ones would have to test for an immediate receiver.

An alternative, that VW took (because it has both Float and Double) is to
add a superclass, e.g. LimitedPrecisionReal, move most of the methods into
it, and keep Float as Float, and add SmallFloat as a subclass of
LimitedPrecisionReal.  Then while class-side methods such as pi would
likely be implemented in LimitedPrecisionReal class, sends to Float to
access them find them via inheritance.  An automatic reorganization which
moves only primitives out of LimitedPrecisionReal is easy to write.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20141120/250949b0/attachment.htm

More information about the Squeak-dev mailing list