(fromRational (1%5)) :: Double

S.D.Mechveliani [email protected]
Thu, 19 Apr 2001 10:02:34 +0400


Lennart Augustsson <[email protected]> writes


> "S.D.Mechveliani" wrote:

>> the matter is in what the _language standard_ says.
>> If it puts that `0.9' in the user program means precizely  9%10,
>> then Lennart is right.

> I quote the report:
>
> "The floating point literal f is equivalent to 
> fromRational (n Ratio.% d), where fromRational is a
> method in class Fractional and Ratio.% constructs a rational from
> two integers, as defined in the Ratio library. The integers n and 
> d are chosen so that n/d = f."
>
> I think the way Haskell handles numeric literals is pretty nice and
> it's important to understand what happens if you use them. :)


I confess, I do not understand from the previous letters, in what way,
for example, Hugs finds
                        Prelude> (fromRational (1%5)) :: Double

                        0.2

I never dealt with Floats in Haskell. And thought that a value of 
Double  has mantissa in a binary representation. So, the interpreter 
has to convert a decimal 5 to a binary 101B, evaluate  1B / 101B  
obtaining an infinite sequence of binary digits and take the first  m
of them required for Double. 
Printing the result should yield something like  0.1999...

Thank you in advance for the explanation. 

-----------------
Serge Mechveliani
[email protected]