Floating point problems

Lennart Augustsson lennart at augustsson.net
Wed Aug 30 18:04:47 EDT 2006


On Aug 30, 2006, at 14:58 , David Roundy wrote:

> On Wed, Aug 30, 2006 at 07:38:35PM +0100, Jamie Brandon wrote:
>> I recently defied my supervisor and used Haskell to write my
>> coursework instead of C. All went well until I needed floating point
>> and started having odd results. As far as I can tell it isn't
>> substantially affecting my results but it is rather embarrassing
>> after slagging off C so much. Here are some examples:
>>
>>         *Main> 0.2 + 0.1
>>         0.30000000000000004
>>         *Main> 0.200000000000000 + 0.100000000000000000
>>         0.30000000000000004
>>         *Main> 0.3 + 0.1
>>         0.4
>>         *Main> 0.2 + 0.1
>>         0.30000000000000004
>>         *Main> it + 0.1
>>         0.4
>>
>> I assume this is a result of the discrepancy between binary and  
>> decimal
>> representations of the numbers. Is there any way around? For a  
>> start, it
>> would be nice to have a simple way to get 0.1 + 0.2 == 0.3  =  True
>>
>> This is with GHC 6.4.1 and GCC 4.0.3
>
> The trouble here is that ghci is printing more digits than it really
> ought to be printing.

No, I don't think it is.  Ghci is printing the number that is closest  
of all numbers in decimal notation to the Double in question (i.e.,  
0.1+0.2).  Printing it with fewer decimals would yield a different  
number if it was read back.

	-- Lennart





More information about the Glasgow-haskell-users mailing list