在Haskell中迭代和舍入

时间:2014-01-17 16:59:58

标签: loops haskell

使用迭代函数作为4(迭代(+0.001)1.0),我得到的答案是[1.0,1.001,1.0019999999999998,1.0029999999999997]

但要增加0.001并回答为[1.0,1.001,1.002,1.003]如何舍入值?

提前致谢

2 个答案:

答案 0 :(得分: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..]

答案 1 :(得分:0)

这可以通过Rational和Fixed来完成:

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

这可能也很有用,因为Rational可能更容易使用,例如:

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