#
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.
|