在C中计算double变量的最大值时出错

时间:2017-11-14 04:59:36

标签: c debugging double limits

我按照此处的解决方案: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

为什么计算不适合变量?上面的顶部示例适用于浮点变量。

1 个答案:

答案 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);