C++ Builder 數(shù)學函數(shù)異常處理 (DOMAIN error 等)

C++ Builder 參考手冊 ? C++ Builder 數(shù)學函數(shù)異常處理 (DOMAIN error 等)


一般情況卖陵,我們認為 C++ Builder 的 try 非常好用赁濒,可是遇到了 cmath 或 math.h 里面的數(shù)學函數(shù)出錯挣菲,就無法捕獲了苍柏,程序彈出類似下面截圖的錯誤提示 (log: DOMAIN error):

數(shù)學函數(shù)異常:log: DOMAIN error

這是 cmath 或 math.h 里面的數(shù)學函數(shù)無法正常計算引起的芋类,例如 domain error 定義域錯誤哩牍,就是函數(shù)的參數(shù)值超過了函數(shù)能夠處理的范圍,例如 log 函數(shù)無法計算 0 和負數(shù)的對數(shù)值倘待,計算 log(-1.0) 的值就會彈出前面截圖的對話框疮跑。

如果程序里面有大量的計算,不可能每一個函數(shù)計算的時候都判斷參數(shù)是否合理凸舵,因為加了很多判斷不但讓程序復(fù)雜了祖娘,而且影響計算效率,這時候就需要屏蔽彈出這樣的提示框啊奄。

屏蔽數(shù)學函數(shù)彈出出錯提示框渐苏,需要在程序里面寫 C 語言函數(shù) _matherr 和 _matherrl 來捕獲異常,這兩個函數(shù)可以放在項目里面的任何一個 .c 或 .cpp 文件里面菇夸。

#ifdef __cplusplus
extern "C" {
#endif

int _matherr(struct _exception *e)
{
  return 1;
}
int _matherrl(struct _exceptionl *e)
{
  return 1;
}

#ifdef __cplusplus
}
#endif

例如用上面代碼的方法來捕獲異常琼富,用 log 函數(shù)計算 -1.0 的對數(shù)值就等于 NAN 而不彈出錯提示框了:

計算 -1.0 的對數(shù)值,不彈出錯對話框

計算結(jié)果如果等于:
NAN:無法計算的算式的計算結(jié)果庄新;
+INF:正無窮大鞠眉;
-INF:負無窮大。

std::_isnan(x) 函數(shù)可以判斷浮點數(shù) x 是否為 NAN择诈,即 x 是 NAN 為真凡蚜;
std::_finite(x) 函數(shù)可以判斷 x 是否為實數(shù),即 -∞ < x < +∞ 為真吭从;
這兩個函數(shù)在 #include <cfloat> 里面朝蜘。

如果計算結(jié)果等于 NAN 說明在整個計算過程中,遇到了無法計算的數(shù)值涩金,比如 0 除以 0谱醇,或者給負數(shù)求平方根等。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  double x = 1.0/std::sqrt(-2.0);
  if(std::_finite(x))
    Memo1->Text = x;
  else
    Memo1->Text = L"計算出錯";
}

如果 +INF步做、-INF 和 NAN 都不是計算結(jié)果期望的值副渴,可以用 _finite 函數(shù)判斷計算結(jié)果。

運行結(jié)果:計算出錯

由于計算過程中全度,無法計算 -2.0 的平方根煮剧,計算結(jié)果為 NAN,這個數(shù)值不是 -∞ 到 +∞ 之間的實數(shù),所以判斷是否為實數(shù)的函數(shù) _finite 返回 false勉盅,顯示輸出 "計算出錯"佑颇。


相關(guān):


C++ Builder 參考手冊 ? C++ Builder 數(shù)學函數(shù)異常處理 (DOMAIN error 等)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市草娜,隨后出現(xiàn)的幾起案子挑胸,更是在濱河造成了極大的恐慌,老刑警劉巖宰闰,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬贵,死亡現(xiàn)場離奇詭異,居然都是意外死亡移袍,警方通過查閱死者的電腦和手機解藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葡盗,“玉大人舆逃,你說我怎么就攤上這事〈亮#” “怎么了路狮?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔚约。 經(jīng)常有香客問我奄妨,道長,這世上最難降的妖魔是什么苹祟? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任砸抛,我火速辦了婚禮,結(jié)果婚禮上树枫,老公的妹妹穿的比我還像新娘直焙。我一直安慰自己,他們只是感情好砂轻,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布奔誓。 她就那樣靜靜地躺著,像睡著了一般搔涝。 火紅的嫁衣襯著肌膚如雪厨喂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天庄呈,我揣著相機與錄音蜕煌,去河邊找鬼。 笑死诬留,一個胖子當著我的面吹牛斜纪,可吹牛的內(nèi)容都是我干的贫母。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼盒刚,長吁一口氣:“原來是場噩夢啊……” “哼腺劣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伪冰,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樟蠕,沒想到半個月后贮聂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡寨辩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年吓懈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靡狞。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡耻警,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甸怕,到底是詐尸還是另有隱情甘穿,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布梢杭,位于F島的核電站温兼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏武契。R本人自食惡果不足惜募判,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咒唆。 院中可真熱鬧届垫,春花似錦、人聲如沸全释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浸船。三九已至符衔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糟袁,已是汗流浹背判族。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留项戴,地道東北人形帮。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辩撑。 傳聞我的和親對象是個殘疾皇子界斜,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 在編程中我們總要進行一些數(shù)學運算以及數(shù)字處理,尤其是浮點數(shù)的運算和處理合冀,這篇文章主要介紹C語言下的數(shù)學庫各薇。而其他語...
    歐陽大哥2013閱讀 5,165評論 0 12
  • C++ Builder 參考手冊 ? C++ Builder 浮點數(shù)異常處理 Floating point div...
    玄坴閱讀 2,949評論 1 2
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解...
    上街買菜丶迷倒老太閱讀 1,360評論 0 20
  • 總結(jié)了一些開發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒君躺。 unpack() //函數(shù)從二進制...
    ADL2022閱讀 454評論 0 3
  • 第一章 前端三大語言:HTML(專門編寫網(wǎng)頁內(nèi)容)峭判、CSS(編寫網(wǎng)頁樣式)、JS(專門編寫網(wǎng)頁交互行為) 能簡寫盡...
    fastwe閱讀 943評論 0 0