
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
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