可能重复:
Comparing floating point values
How dangerous is it to compare floating point values?
我不明白,为什么比较实数是编程中的一个不好的做法?当然,我理解实数可以用一定的准确度来表示。你能解释一下我不能比较这种数字的重要理由吗?例子很好,文章也很受欢迎。 先谢谢。
答案 0 :(得分:3)
根据本网站floating-accuracy
标记下的所有问题,任何讨论都应该从对此问题的引用开始:How dangerous is it to compare floating point values?
David Goldberg对“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。那么为什么在硬件中实现浮点比较呢?
有些地方需要精确的浮点相等。一个是浮点数的标准化。