雙精確度:了解擴充精確度
使用雙精確度資料型態時,通常認為近似精確度是有限的到小數點後 15 位元。但是,某些類型的數字(例如 1.0/7.0)在內部儲存為雙精度時可能會顯示 17 位元小數的精確度。
此異常可歸因於 IEEE 雙精確度資料表示的固有設計。雙精度值有 53 個有效位,提供約 15.95 位小數位的精度。然而,C 庫將該值向下舍入為 15,從而導致理論精度為 15 位小數。實際上,由於這種舍入,DBL_DIG 的值被設定為 15 而不是 16。
使用 nextafter() 函數進一步闡述了這種擴展精度的重要性。此函數計算最接近給定值的可表示數字。使用此函數檢查 1.0/7.0 的值時,輸出會顯示最後一位數字不同的三個連續值:0.14285714285714282、0.14285714285714285 和 0.14285714285714288。
最後顯示數字的精確值由下式決定編譯器執行的捨入操作。在本例中,數字每步變化 3,顯示精度約為 16 位十進制數字。因此,雖然雙精度數的理論精度為 15 位小數,但近 16 位的擴展精度為某些類型的計算提供了更高的精度。
以上是為什麼雙精確度算術有時會顯示超過 15 位小數的精確度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!