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