This is the mail archive of the libc-help@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

acos / asin accuracy


Hi,

Acos and asin in sysdeps/i386/fpu are implemented as "atan2(sqrt(1 -
x*x), x)" and "atan2(x, sqrt(1 - x*x))"
(http://sources.redhat.com/git/?p=glibc.git;a=blob_plain;f=sysdeps/i386/fpu/e_acos.S;hb=HEAD
and http://sources.redhat.com/git/?p=glibc.git;a=blob_plain;f=sysdeps/i386/fpu/e_asin.S;hb=HEAD).
The expression "1-x*x" is bad for accuracy, especially for values of x
close to -1 or 1 (x*x introduces rounding error, subtracting from 1
cancels most of the remaining significant digits out). Obviously the
problem is worse when using single precision. A much better way would
be to use (1-x)*(1+x) instead.

I would have filed a bug in bugzilla for this, but it appears bugzilla
doesn't send the confirmation mails for new accounts (as other people
already noted).


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]