比較Double 和Float 資料型時出現意外結果
比較雙精確度浮點數(double) 與單精確度浮點數時數字(浮點數),你可能會遇到意想不到的結果。具體來說,即使兩個值看起來相同,浮點變數 f 和雙精確度變數 d 之間的相等檢查 (f == d) 也可能傳回 false。
此行為源自於與浮點相關的兩個基本因素 -點數:精確度和捨去。
精確度與捨入誤差
相等檢查的含義
浮點數固有的精度和舍入-點數可能會導致舍入誤差,尤其是在比較彼此非常接近的值時。這些錯誤累積,導致相等比較失敗。這使得對浮點數的直接相等性檢查不可靠,並且容易出現漏報。
解:與Epsilon 比較
不使用相等性檢查,而是使用更可靠的方法比較浮點數的方法是取它們之間的絕對差,並檢查它是否低於一個稱為epsilon (ε) 的小值。這使您可以考慮舍入誤差並確定差異對於您的應用程式是否微不足道。
if (abs(x - y) < epsilon)
以上是為什麼比較“float”和“double”值有時會傳回“false”,即使它們看起來相同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!