关于数学:实数比较

Real numbers comparison

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Comparing floating point values
How dangerous is it to compare floating point values?

我不明白,为什么实数比较是编程中的一个坏习惯?当然,我知道实数可以用一定的精度来表示。你能给我解释一下不比较这类数字的重要原因吗?例子会很好,文章也很受欢迎。事先谢谢。


从本网站floating-accuracy标签下的所有问题来看,任何讨论都应该从参考这个问题开始:比较浮点值有多危险?

并引用了大卫戈德伯格的《每一个计算机科学家应该知道的关于浮点运算的知识》。这是一个简短的总结。

1。精确的浮点结果不可移植

浮点运算既不是交换的,也不是结合的。大多数编译器和平台遵循的IEEE754标准并不保证结果的精确再现性。此外,不同处理器上的结果也会有所不同。

2。浮点比较与数学不符

考虑以下陈述

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

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

三。为什么浮点比较在硬件中实现?

有些地方需要精确的浮点相等。一个是浮点数的规范化。