# (fromRational (1%5)) :: Double

S.D.Mechveliani mechvel@math.botik.ru
Thu, 19 Apr 2001 10:02:34 +0400

```Lennart Augustsson <lennart@mail.augustsson.net> 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
mechvel@botik.ru

```