mr_*_*udo 13 c floating-point range
我正在尝试确定各种浮点类型的范围.当我读到这段代码时:
#include <stdio.h>
main()
{
float fl, fltest, last;
double dbl, dbltest, dblast;
fl = 0.0;
fltest = 0.0;
while (fl == 0.0) {
last = fltest;
fltest = fltest + 1111e28;
fl = (fl + fltest) - fltest;
}
printf("Maximum range of float variable: %e\n", last);
dbl = 0.0;
dbltest = 0.0;
while (dbl == 0.0) {
dblast = dbltest;
dbltest = dbltest + 1111e297;
dbl = (dbl + dbltest) - dbltest;
}
printf("Maximum range of double variable: %e\n", dblast);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么笔者添加1111e28的fltest变量?
当fltest到达时+Inf,循环终止,就像在那一点fl = (fl + fltest) - fltest变为NaN,这是不相等的0.0. last包含一个值,当添加到1111e28生成时+Inf,因此接近上限float.
1111e28选择达到+Inf合理的速度; 它还需要足够大,以便当添加到大值时,循环继续进行,即它至少与最大和第二大非无限float值之间的间隙一样大.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |