gpt4 book ai didi

c++ - 如果 numeric_limits::has_infinity 为 false,推荐的解决方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:27 26 4
gpt4 key购买 nike

我需要在 Linux 上的 C++ 应用程序中检查无穷大的 double 值。在大多数平台上,这通过与 std::numeric_limits<double>::infinity() 进行比较来实现。 .然而,在一些旧平台上(例如 RedHat 9,带有 gcc 3.2.2)这是不可用的,并且 std::numeric_limits<double>::has_infinity那里是假的。

您会为这些平台推荐什么解决方法?

最佳答案

如果您使用的是 IEEE 754 算术,几乎可以肯定,无穷大是定义明确的值,并且已为所有算术运算定义了结果。特别是,

infinity - infinity = NaN

正无穷大和负无穷大以及 NaN 值是唯一适用的值。 NaN 是特殊的“非数字”值,用于指示函数的域错误,例如平方(-1)。还有:

NaN != NaN

NaN 是唯一符合此条件的值。

因此:

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

当且仅当 x 为正无穷大或负无穷大时,才会返回 true。如果您只想检查正无穷大,请添加针对 x > 0 的测试。

关于c++ - 如果 numeric_limits<double>::has_infinity 为 false,推荐的解决方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com