比较C ++中的无穷大与无穷大

时间:2018-10-15 13:06:41

标签: c++ floating-point infinity

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

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

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

if (l < r) {}

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

2 个答案:

答案 0 :(得分:12)

  

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

根据this

  

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

所以你确实是对的。

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

答案 1 :(得分:2)

C ++不需要实现在其浮点类型中支持无穷大。但是,如果实现确实支持无穷大,则可以预期infinity < infinity为false。 C ++隐式地假设正常的数学—它没有定义数学的加,乘,除,余弦,对数等,而仅假设数学是读者所知道的背景信息。

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