任意の数値 'a' を 'b' に累乗できるカスタム関数を作成しようとしていますが、答えの実数部分を取得することにのみ関心があります。処理する独自の関数を作成しましたが、 a が負の場合でも失敗します。これを修正する方法を教えてください。
#include <exception>
...
double power(double a, double b) {
double output;
try {output = pow(a,b);}
catch (std::domain_error) { //even if I use catch(...) I still get a NaN.
if (b==0.0) output = 1.0;
if (a==0.0) output = 0.0;
if (b<0.0) {
b=-1.0*b;
try {output = 1.0/pow(a,b);}
catch (std::domain_error){
a = -1.0*a;
output = -1.0/pow(a,b);
}}
else {
a=-1.0*a;
output = -1.0*pow(a,b);}
}
return output;
}
返信ありがとうございます。回答を読んで、次のコードを作成しました。
double power(double a, double b) {
double output;
output = pow(a,b);
if (output != output) {
if (b==0.0) output = 1.0;
if (a==0.0) output = 0.0;
else if (b<0.0) {
b=-1.0*b;
output = 1.0/pow(a,b);
if (output != output) {
a = -1.0*a;
output = -1.0/pow(a,b);
}}
else {
a=-1.0*a;
output = -1.0*pow(a,b);}
}
if (output >= DBL_MAX) output = DBL_MAX;
if (output <= -DBL_MAX) output =-DBL_MAX;
if ((output >= -DBL_MIN) && (output <= DBL_MIN)) output = 0.0;
return output;
}
私の残りの唯一の質問は、c++ が 1.0/inf をどのように処理するかということです。に引っかかることを願っています
if ((output >= -DBL_MIN) && (output <= DBL_MIN)) output = 0.0;