History log of /seL4-camkes-master/projects/musllibc/src/math/i386/acos.s
Revision Date Author Comments
# f697d66b 04-May-2012 nsz <nsz@port70.net>

math: change the formula used for acos.s

old: 2*atan2(sqrt(1-x),sqrt(1+x))
new: atan2(fabs(sqrt((1-x)*(1+x))),x)
improvements:
* all edge cases are fixed (sign of zero in downward rounding)
* a bit faster (here a single call is about 131ns vs 162ns)
* a bit more precise (at most 1ulp error on 1M uniform random
samples in [0,1), the old formula gave some 2ulp errors as well)


# a4a0c912 22-Mar-2012 nsz <nsz@port70.net>

acos.s fix: use the formula acos(x) = atan2(sqrt(1-x),sqrt(1+x))

the old formula atan2(1,sqrt((1+x)/(1-x))) was faster but
could give nan result at x=1 when the rounding mode is
FE_DOWNWARD (so 1-1 == -0 and 2/-0 == -inf), the new formula
gives -0 at x=+-1 with downward rounding.


# 804fbf0b 19-Mar-2012 Rich Felker <dalias@aerifal.cx>

use alternate formula for acos asm to avoid loss of precision


# bc33e617 19-Mar-2012 Rich Felker <dalias@aerifal.cx>

asm for inverse trig functions

unlike trig functions, these are easy to do in asm because they do not
involve (arbitrary-precision) argument reduction. fpatan automatically
takes care of domain issues, and in asin and acos, fsqrt takes care of
them for us.