これが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になるため、automaticの値が2.000000000になる場合は次のようになります。マニュアルと同じ。
私の質問:
- 私の推測は正しいですか?
- 最初の質問への回答が正しい場合、より正確な結果を達成するために、この四捨五入をどのように回避できますか?