2014-01-17 56 views
1

如採取4(迭代(0.001)1.0),得到的答覆是[1.0,1.001,1.0019999999999998,1.0029999999999997]迭代並且使用迭代函數四捨五入在Haskell

但希望爲0.001和答案的增量如[1.0,1.001,1.002,1.003]如何捨棄值?

在此先感謝

+0

你是否反對使用有理數類型? – DiegoNolan

+0

沒有任何數字可以表示爲一個浮點數,它可以給你你想要的。 0.001不能精確表示,你可以選擇的下一個數字給出不同的答案會超出你想要的結果。浮點很難。 – augustss

回答

3

您可以使用Data.Fixed

import Data.Fixed 

xs1 = take 4 $ iterate (+0.001) (1.0::Fixed E3) 

-- or you can use Enum instance for (Fixed a) also 
xs2 = take 4 [1.0::Fixed E3, 1.001..] 
0

這可以用理性來完成,以及修正:

x = take 4 $ map (fromRational) [1.000::Rational, 1.001..] 

這也可能是有用的,因爲理性五月比較容易操作,例如:

map (logBase 10 . fromRational) $ take 4 [1.000::Rational, 1.001..]