簡體   English   中英

c ++除以0

[英]c++ division by 0

我正在進行長時間的模擬。 我將結果記錄到矢量中以計算有關數據的統計數據。 我意識到,從理論上講,這些樣本可能是零除的結果; 這只是理論上的,我很確定情況並非如此。 為了避免在修改代碼后重新運行模擬,我想知道在這種情況下會發生什么。 我是否能夠意識到是否發生了0分裂? 我會收到錯誤消息嗎? (暫時沒有處理例外情況)。

謝謝

對於IEEE浮點數,有限非零浮點數除以0的定義很明確,導致+無窮大(如果值> 0)或-infinity(如果該值小於零)。 0.0 / 0.0的結果是NaN。 如果使用整數,則行為未定義。

注意C標准說(6.5.5):

/運算符的結果是第一個操作數除以第二個操作數的商; %運算符的結果是余數。 在這兩個操作中,如果第二個操作數的值為零,則行為未定義。

因此,對於整數類型和浮點,未定義(按標准)/ 0。 然而,大多數實現具有前面提到的行為(+ -INF或NAN)。

如果你正在說整數,那么你的程序應該在除以零時崩潰。

如果您正在談論浮點數,則允許除以零,結果為INF或-INF。 現在,如果程序崩潰,處理得很好或者繼續未定義/意外結果,那么這完全取決於您的代碼。

取決於您是否使用整數或浮點數。 對於整數,您將獲得運行時異常。 對於浮點數,結果將為+/-無窮大,或NaN為(0.0 / 0.0),您可以使用std::isnan()進行測試。

如果使用IEEE浮點數,則它將返回0或NaN。 如果op1為0,您將得到未定義。 如果op1高於0,您將獲得Infinity。 如果op1低於0,那么你將獲得-Infinity。 如果使用直接除以0或整數,則會出現錯誤“浮點異常”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM