一個“-1.#INF000”引發的bug

在c++代碼中,今天調試時,發現一個變量的值都變成了“-1.#INF000”。如下圖所示:

出錯的變量


  

變量值變得不正常了,所以接下來的操作都不正確了,最終導致了不正常的結果。

起初不知道該怎麼去調試,感覺無從下手。後來加了測試的判斷,當滿足該判斷時加入assert(false), 這樣就可以輕鬆的找到引起錯誤的罪魁禍首了。

出錯的變量名爲:box,box.mMinimum 和 box.mMaximum存的是float類型的值。

加入的判斷爲:

 if(box.mMinimum -10.0f == box.mMinimum)
{
    assert(false);
}

這裏其實box.mMinimum做任何的操作都不會改變其本身的值。利用這一特點快速調試出bug出錯的地方。

下面對這一類的值做一下解釋:

(1)1.#INF: 表示無窮小
(2)-1.#IND: 做除法時除數爲0
(3)1.#INF000:正無窮大
(4)-1.#INF000:負無窮大
再遇到類似的出錯信息時,就可以解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章