Re: [Haskell-cafe] Some More Sinus Results

2007-11-10 Thread David Roundy
On Sat, Nov 10, 2007 at 06:56:23PM +0100, Hans van Thiel wrote:
 Thanks to all who've replied; Carl's explanation in particular was very
 interesting. So the precision, suggested by the many decimals in the
 'show', is not the actual precision the user should 'count on'. If you
 take 1/60 of a degree to be approximately 0.0003 radians, you should not
 use sin for smaller values. In all cases the actual precision of sin
 appears to be 4 to 5 decimals, and results should be rounded to that
 before using them. Now I'm wondering about cos, tan and also the
 inverses, asin etc. :-)

What you're observing in these calculations is not so much the inaccuracy
of sin as the inaccuracy of pi.  Pi is an irrational number, so the Double
constant pi is only an approximation, with an error probably around 3e-16
(1e-16 fractional error).  Simple calculus tells you that the error in
sin(pi) will thus be around:

sin(truepi+3e-16) ~ 0 + 3e-16

from which we conclude that the error in pi isn't really as bad as we'd
naively expect.

For small epsilon, we can see that

sin((1+/-epsilon)*(truepi+3e-16)) ~ 0 +/- pi*epsilon + 3e-16.

which roughly explains your data quoted.

Results of sin should *not* be rounded before using them, unless you really
want a less accurate answer.

Users who count on a particular precision, should not be using computers
to do their arithmetic.


The blog article on the accuracy of sine glossed over the relevant issue:
that there's no point in getting better accuracy.  It points out that
sin(pi) only has five or six digits of accuracy, it means that the
correct answer is about 1.225e-16, because correct is defined to mean
the sine of the double which is nearest to the actual value of pi.

It's nice to be accurate, but the claim that for large arguments the
computed value of sin is effectively random is pretty irrelevant, as the
same thing can be said of the true value of sin, when defined as the
sine of the double closest to your desired x value which is the closest we
could possibly come to a true sin.  If you're taking the sine of a large
number, your code is broken, and no sin function is going to fix it.
-- 
David Roundy
Department of Physics
Oregon State University
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Some More Sinus Results

2007-11-10 Thread Hans van Thiel
On Sat, 2007-11-10 at 11:14 -0800, David Roundy wrote:
 On Sat, Nov 10, 2007 at 06:56:23PM +0100, Hans van Thiel wrote:
  Thanks to all who've replied; Carl's explanation in particular was very
  interesting. So the precision, suggested by the many decimals in the
  'show', is not the actual precision the user should 'count on'. If you
  take 1/60 of a degree to be approximately 0.0003 radians, you should not
  use sin for smaller values. In all cases the actual precision of sin
  appears to be 4 to 5 decimals, and results should be rounded to that
  before using them. Now I'm wondering about cos, tan and also the
  inverses, asin etc. :-)
 
 What you're observing in these calculations is not so much the inaccuracy
 of sin as the inaccuracy of pi.  Pi is an irrational number, so the Double
 constant pi is only an approximation, with an error probably around 3e-16
 (1e-16 fractional error).  Simple calculus tells you that the error in
 sin(pi) will thus be around:
 
 sin(truepi+3e-16) ~ 0 + 3e-16
 
 from which we conclude that the error in pi isn't really as bad as we'd
 naively expect.
 
 For small epsilon, we can see that
 
 sin((1+/-epsilon)*(truepi+3e-16)) ~ 0 +/- pi*epsilon + 3e-16.
 
 which roughly explains your data quoted.
 
 Results of sin should *not* be rounded before using them, unless you really
 want a less accurate answer.
 
 Users who count on a particular precision, should not be using computers
 to do their arithmetic.
A limitation in the technology, which derives from the floating point
representation, should not become a norm, IMHO. Every engineering
discipline uses error approximation and calculation of the
cumulation/cancelation of those errors to estimate the reliability of
the total. That's if you use a slide rule, that's if you use a computer.
There's no difference. If you mean that people should not do arithmetic
on computers, if the results are vital, unless they understand the scope
and limits of the tools they're using, I agree, of course.

 The blog article on the accuracy of sine glossed over the relevant issue:
 that there's no point in getting better accuracy.  It points out that
 sin(pi) only has five or six digits of accuracy, it means that the
 correct answer is about 1.225e-16, because correct is defined to mean
 the sine of the double which is nearest to the actual value of pi.
 
 It's nice to be accurate, but the claim that for large arguments the
 computed value of sin is effectively random is pretty irrelevant, as the
 same thing can be said of the true value of sin, when defined as the
 sine of the double closest to your desired x value which is the closest we
 could possibly come to a true sin.  If you're taking the sine of a large
 number, your code is broken, and no sin function is going to fix it.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Some More Sinus Results

2007-11-10 Thread Yitzchak Gale
Hans van Thiel wrote:
 If you mean that people should not do arithmetic
 on computers, if the results are vital, unless they understand the scope
 and limits of the tools they're using, I agree, of course.

My brother used to work for a certain well-known
manufacturer of CPUs. He told me that the engineers
who worked on the FPU would never fly in a
commercial airliner. Hmm...

-Yitz
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe