-1

可能重复:
Haskell:表达式 [0, 0.1 .. 1] 的意外输出

在 Haskell 中,有人知道以下结果的原因吗?

Prelude Data.List> map (\x -> x - 0.1) [0.2,0.3..0.9]

[0.1,0.19999999999999998,0.29999999999999993,0.3999999999999999,0.4999999999999999,0.5999999999999998,0.6999999999999996,0.7999999999999995]

代替

[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8]
4

1 回答 1

11

默认情况下,Double(一种不精确但有效的数据类型)将为小数数据选择。如果您对其进行注释以Rational代替使用,那么您可以获得准确的答案。

ghci> map (\x -> x - 0.1) [0.2,0.3..0.9] :: [Rational]
[1 % 10,1 % 5,3 % 10,2 % 5,1 % 2,3 % 5,7 % 10,4 % 5]

百分号用于表示精确的分数,因此1 % 10表示十分之一。

于 2013-02-04T05:03:47.143 回答