这里是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,这就是为什么auto值为2.000000000否则将与手册相同。
我的问题:
pow
不能四舍五入。它使用双精度,对于IEEE双精度是52位有效数(大约15个小数位)。以这种精度,它可能对最后一位数字可能不准确,但通常是接近的。