cmath 宏 INFINITY 是否总是适用于 double?
Does the cmath macro INFINITY always works for double?
我正在使用 cmath
宏 INFINITY
和 double
数字,到目前为止我没有发现任何问题:根据我的经验,它总是计算为 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.com,INFINITY
似乎保证只对 float
计算无穷大。对于 double
(和 long double
)是否总是保证计算为无穷大?
我知道 C++ 标准库 std::numeric_limits
解决了这个问题,但我在一个内存有限的嵌入式系统上工作,所以我宁愿使用我已有的 (cmath
) 而不是添加另一个 header.
编辑:我正在使用 C++11。
是的。根据 C++14 标准:
- A prvalue of type
float
can be converted to a prvalue of type double
. The value is unchanged.
-- N4296 [conv.fpprom]
如果在提升为双精度之前该值是无穷大,则在提升之后它将保持无穷大。
我正在使用 cmath
宏 INFINITY
和 double
数字,到目前为止我没有发现任何问题:根据我的经验,它总是计算为 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.com,INFINITY
似乎保证只对 float
计算无穷大。对于 double
(和 long double
)是否总是保证计算为无穷大?
我知道 C++ 标准库 std::numeric_limits
解决了这个问题,但我在一个内存有限的嵌入式系统上工作,所以我宁愿使用我已有的 (cmath
) 而不是添加另一个 header.
编辑:我正在使用 C++11。
是的。根据 C++14 标准:
- A prvalue of type
float
can be converted to a prvalue of typedouble
. The value is unchanged.
-- N4296 [conv.fpprom]
如果在提升为双精度之前该值是无穷大,则在提升之后它将保持无穷大。