这是一个C代码;
#include<stdio.h>
#include<math.h>
int main()
{
double n=10.0;
double automatic = pow(10.0,log10(n)-log10(5.0));
printf("%.9lf\n",log10(n)-log10(5.0));
printf("%.9lf\n",pow(10.0,0.30102996));
double manual = pow(10.0,0.30102996);
printf("%.9lf %lf\n",automatic, floor(automatic));
printf("%.9lf %lf\n",manual,floor(manual));
return 0;
}
输出是:
0.301029996
1.999999836
2.000000000 1.000000
1.999999836 1.000000
从输出中我可以推断出在 pow(x,y) 中 y 被四舍五入为 6 位,因为它的签名是 pow(double x, double y) 所以 0.301029996 变为 0.301030 这就是为什么自动的值是 2.000000000 否则它将是和手册一样。
我的问题:
- 我的推断正确吗?
- 如果第一个问题的答案是正确的,那么我们如何绕过这个四舍五入来获得更准确的结果?