Implementations of sqrtl and logl

Steve Kargl sgk at troutmask.apl.washington.edu
Thu Dec 29 14:46:29 PST 2005


I have implementations for sqrtl and logl, which can be added
to libm.  In limited testing on AMD64 , I find

troutmask:kargl[208] ./test_sqrt 
     float         double        long double
MRE: 8.953800e-08  1.664855e-16  1.084202e-19
DDP: 7.05          15.78         18.96
BDP: 23.41         52.42         63.00

MRE: 1.084202e-19
DDP: 18.96
BDP: 63.00

troutmask:kargl[210] ./test_log
     float         double        long double
MRE: 2.934316e-07  4.743044e-16  2.418119e-19
DDP: 6.53          15.32         18.62
BDP: 21.70         50.91         61.84

MRE: 1.777483e-19
DDP: 18.75
BDP: 62.29

MRE = maximum relative error between a value from my routine and
      a value computed using GMP/MPFR with 64-bits of precision.
DDP = decimal digits of precision = - log10(MRE)
BDP = binary digits of precision  = - log2(MRE)

In the first set of numbers for each test, I have exhaustively
scanned the entire range of float values.  In these tests, I 
have also implemented float and double routines as a sanity
check on the algorithms used for long double.  The second 
second of numbers are obtained from ten million values over the
entire range of long double where these values are drawn from
/dev/random.

One may infer from the numbers above that sqrtl has <1/2 ULP and
logl has about 1.2 ULP.  It should be noted that the above assumes
round-to-nearest FP, which is the default rounding mode for libm.
I have not tested the other rounding modes.

There is some minor cleanup I need to do in the code before
its ready for inclusion in lib/msun.  Namely, I've done my hacking
outside of the lib/msun hierarchy, so I need to update Makefiles
and the mapages.

-- 
Steve


More information about the freebsd-hackers mailing list