Floats and Doubles

Lennart Augustsson lennart@augustsson.net
Tue, 12 Nov 2002 14:35:44 +0100


Yes, they all seem to be right.
You get these funny effects because numbers like 5.2 do not have an
exact representation with floating point numbers in base to (like Float
and Double most likely have on your machine).  The number 5.2 is stored
as a slightly different number as a Float, but the toRational function 
is exact
so it gives you the number corresponding to the internal representation.
Take a course on numerical analysis. :)

    -- Lennart


Juan Ignacio Garcia Garcia wrote:

> hello,
> I have been using some of the functions of the classes Real and 
> Fractional and I have observed that with the funcion "toRational" we 
> can obtain the fraction that represents a given number. For instance:
> *P2> toRational (5.2::Float)
> 5452595 % 1048576
> Why we obtain this numbers instead of "52 % 10" or "26 % 5"?
> I have also obtained the following results with the functions 
> "fromRational" and "toRational":
> *P2> (fromRational ((toRational 4) - ( toRational (5.2::Float) 
> )))::Double
> -1.1999998092651367
> *P2> (fromRational ((toRational 4) - ( toRational (5.2::Double) 
> )))::Double
> -1.2000000000000002
> *P2> (fromRational ((toRational 4) - ( toRational 5.2 )))
> -1.2000000000000002
> *P2> (fromRational ((toRational 4) - ( toRational (5.2::Float) )))::Float
> -1.1999998
> Are all these results ok? If this is the case, why?
>
> Thanks,
>
> Ignacio
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>