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

Error when calculating max value for double variable in C

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

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

The intermediate exponent is one too high. Change pow(2, 10) to (pow(2, 10) - 1) and it should work. You can compensate by multiplying the final result by 2. – Tom Karzes

double dbl_max = pow(2, pow(2, 10)-1) * (1-pow(2, -53)) * 2;
printf("%.2e", dbl_max);