Changed bignum_to_double to produce a correctly rounded result. The
authorStephen Adams <edu/mit/csail/zurich/adams>
Tue, 8 Jul 1997 19:12:51 +0000 (19:12 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Tue, 8 Jul 1997 19:12:51 +0000 (19:12 +0000)
commita9fb65e7f2ad93e2984ff28bac74e20eda7b3a5f
treeec126baf260c9a276a4ef78d7a13b136e8476760
parenta27cedb796a35c34d2767ae1622b091311d88bf6
Changed bignum_to_double to produce a correctly rounded result.  The
code is a lot hairier since it implements IEEE style round to even,
but it is not much slower than the old `accumulate' loop since it
rarely has to look at more that two or three words.

The new version no longer signals an floating point overflow error on

(INTEGER->FLONUM (- (EXPT 2 1024) 1) #b10)

This means that (INTEGER->FLONUM N #b10) can again be used for computing
EXACT->INEXACT on exact integers, which should be 5-15x faster.

There were several places which has a loop to find the bit position of
the most significant bit in a word.  This code has been converted into
a macro, and tweaked to be a bit faster.  Presumably some machines
have this operation as an instruction.
v7/src/microcode/bignum.c