As others have pointed out, floating point representations of numbers are not exact. You don't even have to use fancy functions like sine to see all kinds of nice algebraic properties break down.
let x = 1e8; y = 1e-8 in (y + x) - x == y + (x - x) evaluates to False. So from this you can see that addition is not even associative, neither is multiplication. Distributivity also fails in general. Floating point computations are always approximate and have some level of error associated with them. If you want proper real numbers, things like equality testing become impossible in general. If you look around, I think there are a couple of libraries in Haskell which let you work with arbitrary precision reals though. Try: http://www.haskell.org/haskellwiki/Exact_real_arithmetic - Cale On 29/04/06, Aditya Siram <[EMAIL PROTECTED]> wrote:
The Sine function in the prelude is not behaving as I expected. In the following Hugs session I tested sin on 0, 90,180 & 360 degrees. Prelude> sin 0 0.0 --correct Prelude> sin (pi/2) 1.0 --correct Prelude> sin pi 1.22460635382238e-16 --WRONG! Prelude> sin (2*pi) -2.44921270764475e-16 --WRONG! Is this normal behaviour? Or am I using the trig functions in an unexpected way? Thanks... Deech _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe