]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Use a better algorithm for reducing the error in __kernel_cos[f]().
authorbde <bde@FreeBSD.org>
Wed, 26 Oct 2005 12:36:18 +0000 (12:36 +0000)
committerbde <bde@FreeBSD.org>
Wed, 26 Oct 2005 12:36:18 +0000 (12:36 +0000)
commit96c89ee304b32108340680ce85ac644a0a7d9b85
tree8ce10742e4a2dd610eb83b20221e8fd316940c2f
parent189f76a3bd90569ae539a785b257610d3f0437ea
Use a better algorithm for reducing the error in __kernel_cos[f]().
This supersedes the fix for the old algorithm in rev.1.8 of k_cosf.c.

I want this change mainly because it is an optimization.  It helps
make software cos[f](x) and sin[f](x) faster than the i387 hardware
versions for small x.  It is also a simplification, and reduces the
maximum relative error for cosf() and sinf() on machines like amd64
from about 0.87 ulps to about 0.80 ulps.  It was validated for cosf()
and sinf() by exhaustive testing.  Exhaustive testing is not possible
for cos() and sin(), but ucbtest reports a similar reduction for the
worst case found by non-exhaustive testing.  ucbtest's non-exhaustive
testing seems to be good enough to find problems in algorithms but not
maximum relative errors when there are spikes.  E.g., short runs of
it find only 3 ulp error where the i387 hardware cos() has an error
of about 2**40 ulps near pi/2.
lib/msun/src/k_cos.c
lib/msun/src/k_cosf.c