让我惊讶的是代码:
log_file << "\n" << std::numeric_limits<double>::max();
log_file << "\n" << std::numeric_limits<double>::min();
double test = 1e-10;
for (size_t i = 0; i < 31; i++)
test *= 1e-10;
log_file << "\n" << test;
给出结果:
1.79769e+308
2.22507e-308
9.99989e-321
那些。double test可以存储明显小于 的值std::numeric_limits<double>::min()。并且只有当循环在之前时i < 32;,它test才输出为零。
类似的乘法测试1e10表明::max()一切都是有序的,超过时e+308 test就会变成inf。
有没有任何版本为什么会这样?
min()产生最小的模非非标准化数。非规范化的可能更小。考虑到非规范化的数量,最小数量为denorm_min()。