1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-16 10:20:30 +00:00
freebsd/lib/msun
Bruce Evans 5f20e5ce7f Fixed another precision bug in powf(). This one is in the computation
[t=p_l+p_h High].  We multiply t by lg2_h, and want the result to be
exact.  For the bogus float case of the high-low decomposition trick,
we normally discard the lowest 12 bits of the fraction for the high
part, keeping 12 bits of precision.  That was used for t here, but it
doesnt't work because for some reason we only discard the lowest 9
bits in the fraction for lg2_h.  Discard another 3 bits of the fraction
for t to compensate.

This bug gave wrong results like:

      powf(0.9999999, -2.9999995) = 1.0000002 (should be 1.0000001)
        hex values: 3F7FFFFF C03FFFFE 3F800002 3F800001

As explained in the log for the previous commit, the bug is normally
masked by doing float calculations in extra precision on i386's, but
is easily detected by ucbtest on systems that don't have accidental
extra precision.

This completes fixing all the bugs in powf() that were routinely found
by ucbtest.
2004-06-01 19:03:31 +00:00
..
alpha $Id$ -> $FreeBSD$ 1999-08-28 00:22:10 +00:00
bsdsrc Remove some kludges designed to ensure that the compiler didn't round 2004-05-17 01:04:37 +00:00
i387 Removed bogus 'l' suffixes in FP register to register instructions. 2000-06-06 12:12:36 +00:00
man Add an implementation of copysignl(), a long double version of copysign(). 2004-05-07 18:56:31 +00:00
src Fixed another precision bug in powf(). This one is in the computation 2004-06-01 19:03:31 +00:00
Makefile Add implementations for cimag{,f,l}, creal{,f,l} and conj{,f,l}. They are 2004-05-30 09:21:56 +00:00