std::exp(-100.0f) == NaN?
std::exp(-100.0f) == NaN?
g++版本(5.4.0
(返回浮点数小于大约87的std::exp
的NaN
。
但是要std::exp
的文档建议,它接近0
对于少量数字:
如果参数为 -∞,则返回 +0
这是标准库实现中的错误,还是我缺少什么?
效果可以像这样重现:
#include <cmath>
#include <fenv.h>
#include <iostream>
int main()
{
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);
for (float x = 30; x > -1000; --x)
{
float y = std::exp(x);
std::cout << x << "tt" << y << std::endl;
}
}
输出:
30 1.06865e+13
29 3.93133e+12
28 1.44626e+12
27 5.32048e+11
...
-84 3.3057e-37
-85 1.2161e-37
-86 4.47378e-38
-87 1.64581e-38
Floating point exception
您指定FE_UNDERFLOW
早期浮点运算的结果是低于正规的,并且精度损失(FE_ALL_EXCEPT
位标志之一(。可以用 float
表示的不等于零的最小值为 1e-38
。x
达到 -88
后,您会得到浮点异常,而结果6.0546e-39
小于 1e-38
。这不是NaN
,你用指令feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT)
调整了异常的引发。
如果删除位标志FE_UNDERFLOW
则循环将输出零(或小于非零值,具体取决于平台(。
相关文章:
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- g++的分段错误(在NaN上使用to_string两次时)
- 输出是NaN,如何
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么我在输出端得到 nan?
- 提升反序列化对象具有 nan 或 -nan 值
- Is !NaN not a NaN?
- NaN 上的宇宙飞船操作员
- C++ STL 排序会检查 NaN 吗?
- C++ 每次运行程序时我都会"nan"输出的问题
- 介于 1 和 100 之间的质数列表
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0
- 如何使用 Node-addon-API 实现 node-nan 回调
- 检查nullptr是否100%保护内存布局不受segfault影响
- C ++ pcl_ros:如何使用最新的 100 条消息生成点云
- 为什么我的双变量通过添加 c++ 显示 nan?
- nan() 函数的参数
- 为什么 acos() 在使用点积的结果时会导致"nan(ind)"?
- 如何在 c++ 中处理 -nan 输出
- std::exp(-100.0f) == NaN?