我需要检查一个双值在Linux上的C ++程序无穷大。在大多数平台上这个工程用std::numeric_limits<double>::infinity()比较。然而,在一些旧的平台(红帽9例如用gcc 3.2.2),这是不可用的,并且是std::numeric_limits<double>::has_infinity假那里。

你会推荐什么解决办法为这些平台?

有帮助吗?

解决方案 3

好吧,我现在已转向使用该特定机器上的INFINITYNAN宏 - 似乎很好地工作。他们来自math.h

其他提示

如果您正在使用IEEE 754算法,因为你几乎可以肯定是,无穷大的明确界定值,并为所有算术运算界定的成果。尤其是,

infinity - infinity = NaN

正和负无穷大,NaN值是指此为真唯一值。 NaN是用于指示功能,例如域错误特殊“不是一个号码”的值sqrt(-1)。也:

NaN != NaN

NaNs是针对这是真实的唯一的值。

因此:

bool is_infinite(double x) {
    double y = x - x;
    return x == x && y != y;
}

当且仅当是x正或负无穷大,将返回true。添加测试x > 0如果只想检查正无穷大。

有关大多数情况下,标准:: numeric_limits :: MAX()可以是用于标准:: numeric_limits有效替换::无穷大()。

您将不得不更加谨慎地使用它,但是。随着溢出我相信你将不得不手动检测溢出,如果检测到溢出的结果明确设置为最大值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top