有人对 haskell 中这种奇怪的舍入有解释吗(GHCi,版本 7.2.1)。一切看起来都很好,除非我乘以 100。
*Main> 1.1
1.1
*Main> 1.1 *10
11.0
*Main> 1.1 *100
110.00000000000001
*Main> 1.1 *1000
1100.0
*Main> 1.1 *10000
11000.0
编辑:令我困惑的是,舍入误差仅在乘以 100 时显示。
编辑(2):我收到的评论让我意识到,这与 haskell 完全无关,而是浮点数的一般问题。关于浮点数的奇怪现象,人们已经提出(并回答了)许多问题,其中最根本的问题通常是将浮点数与实数混淆。
Perl、python、javascript 和 C 均报告1.1 * 100.0 = 110.00000000000001
。这是 C 所做的
double 10.0 * 1.1 = 11.000000000000000000000000
double 100.0 * 1.1 = 110.000000000000014210854715
double 110.0 = 110.000000000000000000000000
double 1000.0 * 1.1 = 1100.000000000000000000000000
“为什么只有在乘以 100 时才会发生这种情况”这个问题(尽管有 110.0 的精确表示)仍然没有答案,但我想除了完全逐步执行浮点乘法之外,没有简单的答案(感谢Dax Fohl 强调 10 在二进制中没什么特别的)
数字 1.1 不能以二进制的有限形式表示。看起来像 1.00011001100110011...
“舍入误差”在数学上是不可避免的,简单地说浮点运算。如果您想要准确性,请使用十进制数字类型。
http://support.microsoft.com/kb/42980
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)