实数比较

时间:2012-06-10 08:58:41

标签: math floating-accuracy computation-theory

  

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

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

1 个答案:

答案 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。那么为什么在硬件中实现浮点比较呢?

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