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