0

可能重复:
比较浮点值 比较浮点值
有多危险?

我不明白,为什么在编程中比较实数是一种不好的做法?当然,我知道实数可以用某种精确度来表示。你能给我解释一个不比较这种数字的重要理由吗?例子会很好,文章也很受欢迎。预先感谢。

4

1 回答 1

4

floating-accuracy 本网站标签下的所有问题中,任何讨论都应该从对以下问题的引用开始:比较浮点值有多危险?

以及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. 那么为什么要在硬件中实现浮点比较呢?

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

于 2012-06-10T09:49:05.207 回答