On 02/10/2012 02:24 PM, James Courtier-Dutton wrote:
> On 10 February 2012 14:05, Andrew Haley <a...@redhat.com> wrote:
>> On 02/10/2012 01:30 PM, James Courtier-Dutton wrote:
>>> On 10 February 2012 10:42, Andrew Haley <a...@redhat.com> wrote:
>>>
>>> I think a starting point would be at least documenting correctly the
>>> accuracy of the current libm, because what is currently in the
>>> documents is obviously wrong.
>>> It certainly does not document that sin() is currently more accurate
>>> than sinl() on x86_64 platforms, even with -O0.
>>
>> It isn't.
>>
>>  cout << scientific << setprecision(20) << sin(0.5) << "\n";
>>  cout << scientific << setprecision(20) << sinl(0.5) << "\n";
>>  cout << Sin(Real("0.5")).toString(20,10) << "\n";
>>
>> gives:
>>
>> 4.79425538604203005377e-01
>> 4.79425538604203000282e-01
>> 4.79425538604203000273e-01
>>
>> The last one is from MPFR.
>>
>> In most cases you'll get more accurate results from sinl().
> 
> but if you replace 0.5 with 1.0e22 ?

Then it's less accurate.  In most cases, however, the long double
version wins.  Your statement is not true: in most reasonable cases
sinl() is currently more accurate than sin(), and it does readers of
this list a disservice to suggest otherwise.  In the case of absurdly
large arguments it's less accurate, but those cases are less likely to
be significant for real-world computation.

Andrew.

Reply via email to