2012-06-10 65 views
0

可能重复:
Comparing floating point values
How dangerous is it to compare floating point values?实数比较

我不明白,为什么实数的对比是在编程一种不好的做法?当然我明白,实际的数字可以用一些准确的顺序来表示。你能否解释一下我不想比较这种数字的重要原因?例子会很好,文章也很受欢迎。 预先感谢。

+3

您可以在这里阅读关于浮点精度问题:http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems。浮点数的比较并不总是很差,例如检查“少于”是有用的,但检查平等可能是危险的。 – gfour

+0

只要不要让他们把你拖入教条式的“永远不会比较平等的花车” - 意见,这是纯粹的垃圾。 –

+0

@ChristianRau - 规则建立的原因。他们帮助那些缺乏经验/判断的人做出明智的决定。在某种程度上,人们知道规则在某些情况下可能被破坏,这些规则将永远不会涵盖所有可能性。然而,你所说的规则是“纯粹的垃圾”,就像教条主义一样,也是不正确的。 – 2012-06-10 15:04:25

回答

3

从所有从下floating-accuracy标签在本网站的任何讨论,或许应该在这个问题上的参考启动问题:How dangerous is it to compare floating point values?

由David戈德堡一个为“What Every Computer Scientist Should Know About Floating Point Arithmetic”其参考。这是一个简短的总结。

1.精确浮点结果不是便携式

浮点算术既不是可交换的,也不关联。大多数编译器和平台遵循的IEEE 754标准并不能保证结果的准确性重复性。结果也会因不同处理器而异。

2.浮点比较不数学同意

考虑下面的语句

int i = 0; double x = 1.0; 
    while (x != 0.0) { x = x/2 ; i++;} 

在实数这一计算应然浮点它将终止永远不会完成。 i的值取决于底层硬件。使用浮点比较会使分析代码变得更加困难。

3.为什么在硬件中实现浮点比较?

有些地方需要精确浮点平等。一个是浮点数的标准化。