[Haskell-cafe] 9.3 - (2 * 4.5) => 0.3000000000000007

Daniel Fischer daniel.is.fischer at googlemail.com
Wed Jan 16 16:32:41 CET 2013


On Wednesday 16 January 2013, 15:25:15, ivan dragolov wrote:
> 9.3 - (2 * 4.5) => 0.3000000000000007
> 
> I expected 0.3
> 
> ?

Prelude Text.FShow.RealFloat> FD 9.3
9.300000000000000710542735760100185871124267578125

The closest Double to 9.3 is somewhat larger than 9.3. Since the first two 
significant digits are enough to distinguish it from the next smaller number, 
only those are delivered by the Show instance.

If you subtract 9 from that, you get, unsurprisingly,

Prelude Text.FShow.RealFloat> it - 9
0.300000000000000710542735760100185871124267578125

which is not the closest Double value to 0.3 (in fact, there are 12 Double 
values between that and the closest Double to 0.3). To distinguish that number 
from its neighbours, 16 significant digits are necessary, hence so many are 
displayed.



More information about the Haskell-Cafe mailing list