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]如何舍弃值?
在此先感谢
如采取4(迭代(0.001)1.0),得到的答复是[1.0,1.001,1.0019999999999998,1.0029999999999997]迭代并且使用迭代函数四舍五入在Haskell
但希望为0.001和答案的增量如[1.0,1.001,1.002,1.003]如何舍弃值?
在此先感谢
您可以使用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..]
这可以用理性来完成,以及修正:
x = take 4 $ map (fromRational) [1.000::Rational, 1.001..]
这也可能是有用的,因为理性五月比较容易操作,例如:
map (logBase 10 . fromRational) $ take 4 [1.000::Rational, 1.001..]
你是否反对使用有理数类型? – DiegoNolan
没有任何数字可以表示为一个浮点数,它可以给你你想要的。 0.001不能精确表示,你可以选择的下一个数字给出不同的答案会超出你想要的结果。浮点很难。 – augustss