這是一個C代碼;pow的參數精度()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
從輸出I可以推斷,在POW(X,Y)Y是四捨五入到6位數字,因爲它的簽名是爲POW(雙X,雙y)的因此0.301029996變爲0.301030,這就是爲什麼自動值爲2.000000000,否則它將與手動相同。
我的問題:
1.我的感染是否正確?
2.如果第一個問題的答案是真的,那麼我們如何繞過這個舍入來獲得更準確的結果?
我使用gcc所以我需要方法如何在gcc中做到這一點。 – 2012-08-12 14:48:12