【问题标题】:Compare infinity with infinity in C++在 C++ 中比较无穷大和无穷大
【发布时间】:2019-03-19 22:15:09
【问题描述】:

假设我有两个变量都设置为无穷大

double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();

在代码的另一点,我对这两个变量进行了比较

if (l < r) {}

库中是否正确定义了此比较的结果? (在我的程序逻辑中,我希望结果是false。)

【问题讨论】:

  • 看看std::numeric_limits::infinity,我希望至少对 IEEE 754 如此。
  • 请注意,c++ 不要求浮点算术实现定义或支持infinity。我见过的所有实现都支持它,但可能有例外。

标签: c++ floating-point infinity


【解决方案1】:

(在我的程序逻辑中,我希望结果是 false.)

根据this

在比较运算中,正无穷大于所有值 除了自身和 NaN

所以你确实是对的。

请注意,如果您的编译器使用与 IEEE 754 不同的标准,这可能无效,因此请确保 std::numeric_limits&lt;double&gt;::is_iec559; 在有疑问时返回 true

【讨论】:

    【解决方案2】:

    C++ 的浮点类型不需要实现来支持无穷大。然而,如果一个实现确实支持无穷大,我们可以预期infinity &lt; infinity 是假的。 C++ 隐含地假设了普通数学——它没有定义数学加法、乘法、除法、余弦、对数等,而只是假设数学是读者已知的背景信息。

    数学家确实区分了不同类型的无穷大,但 C++ 对此没有任何规定;它只提供一个正无穷大和一个负无穷大。所以很明显,它们是实数的简单扩展。

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2013-11-29
      • 1970-01-01
      • 2015-03-22
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多