我最近经历了一个Haskell教程,并在交互式ghcishell中尝试一些简单的Haskell表达式时注意到了这种行为:
Prelude> 1.1 + 1.1 == 2.2
True
Prelude> 1.1 + 1.1 + 1.1 == 3.3
False
Prelude> 1.1 + 1.1 + 1.1 > 3.3
True
Prelude> 1.1 + 1.1 + 1.1
3.3000000000000003
Run Code Online (Sandbox Code Playgroud)
有谁知道那是为什么?
我刚刚开始玩GHCi.我看到列表生成器基本上解决了给定集合中的等式:
Prelude> [x | x <- [1..20], x^2 == 4]
[2]
Run Code Online (Sandbox Code Playgroud)
(根据预期只找到一个根)
现在,我为什么不能解决在ℝ结果方程式,因为该解决方案被包括在指定范围内?
[x | x <- [0.1,0.2..2.0], x*4 == 2]
Run Code Online (Sandbox Code Playgroud)
如何在实数集中解决这些方程式?
编辑:对不起,我的意思0.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]
Run Code Online (Sandbox Code Playgroud)
代替
[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8]
Run Code Online (Sandbox Code Playgroud)