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 [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
