c++pow()関数について
595 ワード
今日c++のpow()関数で問題を発見しました.
そのままpow(int,int)で使うと誤差がありますが、もちろん関数のパラメータは(double,double)のはずですが、前のパラメータをdoubleに変更すると誤差はなくなります(少なくとも小さいですが)、同時に後のパラメータもdoubtに変更すると誤差がまた発生します.これはどういうことですか?
資料を調べてもらう
すなわち、(int,int)のパラメータを使用する場合、コンパイラはそのリロードバージョンを使用する(hdojでエラーが報告されている)とは特定できませんが、一部のコンパイラではエラーが報告されませんので注意してください.
そのままpow(int,int)で使うと誤差がありますが、もちろん関数のパラメータは(double,double)のはずですが、前のパラメータをdoubleに変更すると誤差はなくなります(少なくとも小さいですが)、同時に後のパラメータもdoubtに変更すると誤差がまた発生します.これはどういうことですか?
資料を調べてもらう
double pow (double base , double exponent);
float pow (float base , float exponent);
long double pow (long double base, long double exponent);
double pow (double base , int exponent);
long double pow (long double base, int exponent);
すなわち、(int,int)のパラメータを使用する場合、コンパイラはそのリロードバージョンを使用する(hdojでエラーが報告されている)とは特定できませんが、一部のコンパイラではエラーが報告されませんので注意してください.