【问题标题】:Does infinite of floating point number satisfy these equation?无限的浮点数是否满足这些方程?
【发布时间】:2015-02-27 13:54:52
【问题描述】:

对于双精度或浮点数,

1. -inf < inf == true

2. inf + inf == inf

3. -inf - inf == -inf

4. positive / 0.0 == inf

5. negative / 0.0 == -inf

6. any real number < inf == true

7. -inf < any real number == true

这个说法是真的吗?

我们不知道(inf < inf),但我们可以确定它不会引发任何异常。

【问题讨论】:

  • 将它写入 IDE 并按下构建不是更容易吗? static_assert 可能有用...
  • 是什么让你想到num / 0.0 == inf?除以零在数学上是非法的。
  • 用在线编译器试试吧,应该不会超过 5 分钟 :)
  • 它在我的编译器中工作,但我想知道哪些是标准的。
  • @SnowInnocent:如果std::numeric_limits<double>::is_iecsomething 为真,那么理想情况下您应该拥有 IIEE 754 规则。但是,特别是对于 g++,当您要求它进行优化时,这些规则就会被打破。因此,对于在实践中,无论正式情况如何,您都没有保证,但我认为即使在正式情况下也没有。

标签: c++ floating-point infinity


【解决方案1】:

当由实现 IEEE 754 规则的编译器编译时,您问题中的所有表达式 1-7 的计算结果为 true。它们都不依赖于舍入模式。对于许多人来说,这仅仅是因为< 和== 是精确的操作。此外,-inf - inf 始终为-inf(即在所有舍入模式下),positive / 0.0 始终为+inf,negative / 0.0 始终为-inf。

在下面的 6. 和 7. 中,通常将您引用的值称为“有限”而不是“真实”。

  1. 任何实数

  2. -inf

inf < inf 总是评估为假。与您问题中的所有属性 1-7 一样,这应该被视为惯例问题。决定让inf 等于它自己,这样它就不会严格小于它自己。所有这些选择旨在使 IEEE 754 算法在实践中尽可能有用。换句话说,目的是让尽可能多的算法可以实现,而不必明确检查这些特殊值,并且当它们发生时计算继续有意义(如果适用)。当特殊值没有意义时,当然总是有可能对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2021-02-24
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多