当我运行这段代码时:
#include <limits>
#include <cstdio>
#define T double
int main()
{
static const T val = std::numeric_limits<T>::min();
printf( "%g/2 = %g\n", val, val/2 );
}
我希望看到一个不可预测的结果。
但我得到了正确的答案:
(16:53) > clang++ test_division.cpp -o test_division
(16:54) > ./test_division
2.22507e-308/2 = 1.11254e-308
这怎么可能?
Because min
给你最小的归一化价值。你还可以有更小的非规范化的值(参见http://en.wikipedia.org/wiki/Denormalized_number).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)