我正在尝试编写一个自定义函数,该函数可以将任何数字 '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;