假设我有两个变量都设置为无穷大
double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();
在代码的另一点,我对这两个变量进行了比较
if (l < r) {}
此比较的结果是否在库中正确定义? (在程序的逻辑内,我希望结果为false
。)
答案 0 :(得分:12)
(在我程序的逻辑内,我希望结果是
false
。)
根据this:
在比较操作中,正无穷大大于所有值 除了自身和NaN
所以你确实是对的。
请注意,如果您的编译器使用与IEEE 754不同的标准,则这可能无效,因此请确保在有疑问时std::numeric_limits<double>::is_iec559;
返回true
。
答案 1 :(得分:2)
C ++不需要实现在其浮点类型中支持无穷大。但是,如果实现确实支持无穷大,则可以预期infinity < infinity
为false。 C ++隐式地假设正常的数学—它没有定义数学的加,乘,除,余弦,对数等,而仅假设数学是读者所知道的背景信息。
数学家确实区分了不同类型的无穷大,但是C ++对此没有做任何规定。它仅提供一个正无穷大和一个负无穷大。显然,它们是实数的简单扩展。