cmath 宏 INFINITY 是否总是适用于 double?

Does the cmath macro INFINITY always works for double?

我正在使用 cmathINFINITYdouble 数字,到目前为止我没有发现任何问题:根据我的经验,它总是计算为 double无穷大。例如:

#include <iostream>
#include <cmath>

int main()
{
    double x = INFINITY;
    std::cout << x << std::endl; // prints "inf" as expected
    return 0;
}

但是根据 C++ reference and cplusplus.comINFINITY 似乎保证只对 float 计算无穷大。对于 double(和 long double)是否总是保证计算为无穷大?

我知道 C++ 标准库 std::numeric_limits 解决了这个问题,但我在一个内存有限的嵌入式系统上工作,所以我宁愿使用我已有的 (cmath) 而不是添加另一个 header.

编辑:我正在使用 C++11。

是的。根据 C++14 标准:

  1. A prvalue of type float can be converted to a prvalue of type double. The value is unchanged.

-- N4296 [conv.fpprom]

如果在提升为双精度之前该值是无穷大,则在提升之后它将保持无穷大。