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