我按照此处的解决方案:How to Calculate Double + Float Precision并且无法计算double类型变量的最大值。
我跑:
double dbl_max = pow(2, pow(2, 10)) * (1-pow(2, -53));
printf("%.2e", dbl_max);
Result: inf
或者:
double dbl_max = (pow(2, pow(2, 10)));
printf("%.2e", dbl_max);
Result: inf
或者:
double dbl_max = pow(2, pow(2, 9)) * (1-pow(2, -53));
printf("%.2e", dbl_max);
Result: 1.34e+154
为什么计算不适合变量?上面的顶部示例适用于浮点变量。
答案 0 :(得分:1)
中间指数太高了。 将
pow(2, 10)
更改为(pow(2, 10) - 1)
即可 应该管用。您可以通过将最终结果乘以来进行补偿 2。 - 汤姆卡尔兹
double dbl_max = pow(2, pow(2, 10)-1) * (1-pow(2, -53)) * 2;
printf("%.2e", dbl_max);