【问题标题】:Real numbers comparison [duplicate]实数比较[重复]
【发布时间】:2012-06-13 14:43:37
【问题描述】:

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

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

【问题讨论】:

  • 您可以在此处阅读有关浮点精度问题的信息:en.wikipedia.org/wiki/Floating_point#Accuracy_problems。浮点数的比较并不总是不好的,例如检查“小于”很有用,但检查相等可能很危险。
  • 请注意不要让他们将您拖入教条式的“永远不要通过相等性比较浮点数”的观点,这简直是垃圾。
  • @ChristianRau - 建立规则是有原因的。他们帮助那些缺乏经验/判断力的人做出明智的决定。在某些时候,人们了解到规则在某些情况下可能会被打破,这些规则永远不会涵盖所有的可能性。但是,您所说的有关规则是“普通垃圾”的说法同样教条,同样不正确。

标签: math floating-accuracy computation-theory


【解决方案1】:

对于来自本网站上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.那么为什么要在硬件中实现浮点比较呢?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多