我想寫一個自定義函數,可以提高任何數字「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;
使用哪種編譯器? – Dialecticus
我在Visual Studio 2012上沒有出現異常。從文檔'pow()'不應引發異常,請參閱http://msdn.microsoft.com/en-us/library/vstudio/dt5dakze(v=vs .120).aspx –
std :: pow不會拋出afaik。 –