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

Because you asked for the number to be converted to a Float first, and
5.2 can't be represented exactly in a single-precision float.  If you
don't go via Float, you get the exact result:

Prelude> 5.2 :: Rational
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

These are all symptoms of rounding.

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to