首頁 >後端開發 >C++ >浮點相等可靠嗎?

浮點相等可靠嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-19 21:17:02314瀏覽

Is Floating-Point Equality Ever Reliable?

浮點相等的令人困惑的案例

在軟體開發領域,浮點比較的話題引發了無數爭論。雖然眾所周知,浮點精度對確定相等性提出了挑戰,但仍然存在使用 == 可能不會像人們想像的那樣有問題的情況。

讓我們剖析提出的具體程式碼範例:

// Defined in somewhere.h
static const double BAR = 3.14;

// Code elsewhere.cpp
void foo(double d)
{
    if (d == BAR)
        ...
}

問題是在某些情況下這種比較是否有效。答案在於浮點數資料表示的基本性質。

IEEE 754 是浮點運算的流行標準,保證特定範圍內的整數表示在儲存為浮點數時是準確的。換句話說,包括 0.0 在內的整數都可以直接使用 == 進行比較,而不必擔心精確度錯誤。

因此,在給定的程式碼中,只要將 BAR 初始化為 float 範圍內的整數值即可,比較 d == BAR 是安全可靠的。

但是,當處理經過數學運算或計算的變數時,情況就變得更加複雜。雖然某些計算可能會產生精確的整數值,但其他計算可能會引入舍入錯誤,從而使浮點相等性無效。

類似地,假設 BAR 確實是整數常數,呼叫 foo(BAR) 將永遠比較相等。這是因為兩個變數使用相同的靜態常數,這保證表示相同的基礎整數值。

總之,雖然通常應謹慎對待浮點相等,但在某些特定情況下可以放心使用。當比較浮點範圍內的整數或使用靜態常數時,程式設計師可以依靠浮點表示的精確性質來執行可靠的相等檢查。

以上是浮點相等可靠嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn