[Haskell-cafe] Error with Float
Dinh Tien Tuan Anh
tuananhbirm at hotmail.com
Tue Jul 19 11:12:07 EDT 2005
Here's what i got
writeln x = putStr (x++ "\n")
f:: Double -> IO Double
f x = do
let t = 2*x
if (t<1)
then return t
else return (t-1)
gen :: Double -> IO()
gen x = do c<-f x
writeln ("Value is: " ++ show c)
if (c /= 0.0)
then gen c
else return ()
Main> gen 0.1
Value is: 0.2
Value is: 0.4
Value is: 0.8
Value is: 0.6
Value is: 0.2
Value is: 0.4
Value is: 0.800000000000001
Value is: 0.600000000000001
Value is: 0.200000000000003
Value is: 0.400000000000006
Value is: 0.800000000000011
Value is: 0.600000000000023
Value is: 0.200000000000045
Value is: 0.400000000000091
Value is: 0.800000000000182
Value is: 0.600000000000364
Value is: 0.200000000000728
Value is: 0.400000000001455
Value is: 0.80000000000291
Value is: 0.600000000005821
Value is: 0.200000000011642
Value is: 0.400000000023283
Value is: 0.800000000046566
Value is: 0.600000000093132
Value is: 0.200000000186265
Value is: 0.400000000372529
Value is: 0.800000000745058
Value is: 0.600000001490116
Value is: 0.200000002980232
Value is: 0.400000005960464
Value is: 0.800000011920929
Value is: 0.600000023841858
Value is: 0.200000047683716
Value is: 0.400000095367432
Value is: 0.800000190734863
Value is: 0.600000381469727
Value is: 0.200000762939453
Value is: 0.400001525878906
Value is: 0.800003051757813
Value is: 0.600006103515625
Value is: 0.20001220703125
Value is: 0.4000244140625
Value is: 0.800048828125
Value is: 0.60009765625
Value is: 0.2001953125
Value is: 0.400390625
Value is: 0.80078125
Value is: 0.6015625
Value is: 0.203125
Value is: 0.40625
Value is: 0.8125
Value is: 0.625
Value is: 0.25
Value is: 0.5
Value is: 0.0
>From: Cale Gibbard <cgibbard at gmail.com>
>Reply-To: Cale Gibbard <cgibbard at gmail.com>
>To: Dinh Tien Tuan Anh <tuananhbirm at hotmail.com>
>CC: haskell-cafe at haskell.org
>Subject: Re: [Haskell-cafe] Error with Float
>Date: Tue, 19 Jul 2005 11:00:34 -0400
>
>Perhaps you mean:
>f x
> | x < 1 = 0 : f (2*x)
> | otherwise = 1 : f (2*(x-1))
>
>Note that in the second case, the 1 is subtracted before multiplication by
>2.
>
>If you were referring to the problem that this eventually gives
>constantly 0 for values like 0.6, try importing the Ratio module and
>applying it to 6%10, which is the exact rational value rather than a
>floating point representation.
>
> - Cale
>
_________________________________________________________________
Winks & nudges are here - download MSN Messenger 7.0 today!
http://messenger.msn.co.uk
More information about the Haskell-Cafe
mailing list