在C++中比较无穷大和无穷大

9
假设我有两个变量,它们都被设置为无穷大。
double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();

在代码的另一个部分,我有对这两个变量的比较。
if (l < r) {}

这个比较的结果在库中是否被正确定义?(根据我的程序逻辑,我期望结果为false。)

1
看一眼 std::numeric_limits::infinity,至少在IEEE 754中应该是这样的。 - George
3
请注意,C++并不要求浮点运算实现定义或支持“无穷大(infinity)”。我见过的所有实现都支持它,但也可能有例外。 - François Andrieux
2个回答

14

(在我的程序逻辑中,我期望结果应该是false。)

根据此文

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

所以你是正确的。

请注意,如果您的编译器使用的标准不同于IEEE 754,则可能无效,请在怀疑时确保 std::numeric_limits<double>::is_iec559; 返回 true


2

C++不要求其浮点类型支持无穷大。然而,如果实现支持无穷大,则我们可以期望infinity < infinity为假。C++隐式地假定了普通数学——它不定义数学加法、乘法、除法、余弦、对数等,只是假定数学是读者已知的背景信息。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接