【发布时间】:2020-11-21 02:22:15
【问题描述】:
我正在使用 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 和cplusplus.com,INFINITY 似乎只能保证float 的计算结果为无穷大。对于double(和long double),是否总是保证评估为无穷大?
我知道 C++ 标准库 std::numeric_limits 解决了这个问题,但我正在使用内存有限的嵌入式系统,所以我宁愿使用我已有的 (cmath) 而不是添加另一个头文件。
编辑:我使用的是 C++11。
【问题讨论】:
-
如果您的平台正确实现了 IEEE 754,您可以简单地评估
1.0 / 0.0以获得输入为双精度的无穷大。 -
@idclev:没错,
std::isinf有一个double过载,但我不明白为什么这会证明INFINITY对于double总是正确的。std::isinf和INFINITY毕竟是两个不同的东西。 -
无穷大的浮点值将转换为无穷大的双精度值。大概编译器会足够聪明,可以在编译时进行转换。
-
@cdhowie 这行得通,但我更愿意确定标准库的作用而不是依赖技巧。
-
@Mµvh773 这不是“技巧”。这就是定义 IEEE 754 浮点的工作方式。
标签: c++ floating-point double infinity cmath