在 C++ 中比较无穷大和无穷大
Compare infinity with infinity in C++
假设我有两个变量都设置为无穷大
double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();
在代码的另一处,我对这两个变量进行了比较
if (l < r) {}
这个比较的结果是否在库中正确定义? (在我的程序逻辑中,我希望结果为 false
。)
(Within the logic of my program, I would expect the result to be
false
.)
根据this:
In comparison operations, positive infinity is larger than all values
except itself and NaN
原来你是对的
请注意,如果您的编译器使用与 IEEE 754 不同的标准,这可能无效,因此请确保 std::numeric_limits<double>::is_iec559;
returns true
有疑问时。
C++ 不需要实现来支持其浮点类型中的无穷大。但是,如果实现确实支持无穷大,我们可以预期 infinity < infinity
为假。 C++ 隐含地假设了正常的数学——它没有定义数学加法、乘法、除法、余弦、对数等,而只是假设数学是 reader.
已知的背景信息。
数学家确实区分了不同类型的无穷大,但 C++ 对此没有规定;它只提供一个正无穷大和一个负无穷大。所以很明显它们是实数的简单扩展。
假设我有两个变量都设置为无穷大
double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();
在代码的另一处,我对这两个变量进行了比较
if (l < r) {}
这个比较的结果是否在库中正确定义? (在我的程序逻辑中,我希望结果为 false
。)
(Within the logic of my program, I would expect the result to be
false
.)
根据this:
In comparison operations, positive infinity is larger than all values except itself and NaN
原来你是对的
请注意,如果您的编译器使用与 IEEE 754 不同的标准,这可能无效,因此请确保 std::numeric_limits<double>::is_iec559;
returns true
有疑问时。
C++ 不需要实现来支持其浮点类型中的无穷大。但是,如果实现确实支持无穷大,我们可以预期 infinity < infinity
为假。 C++ 隐含地假设了正常的数学——它没有定义数学加法、乘法、除法、余弦、对数等,而只是假设数学是 reader.
数学家确实区分了不同类型的无穷大,但 C++ 对此没有规定;它只提供一个正无穷大和一个负无穷大。所以很明显它们是实数的简单扩展。