Haskell返回错误的结果

时间:2013-02-04 04:15:41

标签: haskell double ghci

  

可能重复:
  Haskell: Unexpected output for expression [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]

1 个答案:

答案 0 :(得分: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表示十分之一。