This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
Re: acos / asin accuracy
- From: "Henri Verbeet" <hverbeet at gmail dot com>
- To: "Carlos O'Donell" <carlos at systemhalted dot org>
- Cc: libc-help at sourceware dot org
- Date: Sun, 21 Sep 2008 19:09:09 +0200
- Subject: Re: acos / asin accuracy
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=xZ+lSADfOqUxwpXS9ZraiHpfzZ/tGJ3ceyQj/wBpDfw=; b=gvBhySfI50X8NIIqTsFMavmd1Gs5aQBpsgSV6RPLLdp9eTG6c6ZmnEZSrNmoy9yJ+W nzJLlJ0VFAT5EE21ROLyLanJfWh1loYy2LmY6Slzg5znlES6S5TeaVlLBI1TBi7h2xax PqqUWARYVEASSP5qFQLe1rAWSl52Off8WJtII=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=LPZ7O0lWwG7+qOqGmKa+wD4N+iqMdrSqEueDk8zwFidZbY82K/q4y590GrjGGwApbT j3exSC0T+g28ZHvNYT9aKLfZAuENpinLjjBUdVLz74kmOvdUuR0A2+4cInUBhodm8yXh XOLRk/bN52sbHb7NidbTFSQVa8ybtaIf5UqNg=
- References: <d658b69e0809210804t75951f79qc6d258f9f662916b@mail.gmail.com> <119aab440809210935j3f67cbbevaad4696180d2d66b@mail.gmail.com>
2008/9/21 Carlos O'Donell <carlos@systemhalted.org>:
> On Sun, Sep 21, 2008 at 11:04 AM, Henri Verbeet <hverbeet@gmail.com> wrote:
>> 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.
>
> Do you have a patch, with before and after results, including the
> results of running the glibc math testsuite?
>
No, but I could write one if needed, just need to find the time. On
the other hand, it's easy enough to see that for a value like
0x3feffffffff00000 x*x gets rounded to 0x3fefffffffe00000, which after
subtracting from 1 becomes 0x3df0000000000000, while (1-x)(1+x)
correctly gives 0x3deffffffff80000.
>> 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).
>
> I have just registered without any problems. Please email
> sourcemaster@sourceware.org if you are having problems. If you don't
> get a response please tell me.
>
It appears to work fine now. Thanks to whoever fixed that.