我讀到在 0 和 1 之間乘以多個值會顯著降低數字計算機的精度;我想知道這種假設的依據是什么?它仍然適用于現代計算機嗎?
uj5u.com熱心網友回復:
典型的符合 IEEE 標準的小數表示僅支持有限數量的(二進制)數字。所以,很多時候,一些計算的結果不是預期數學值的精確表示,而是接近它的東西(四舍五入到數字限制內可表示的下一個數字),這意味著在大多數情況下存在一定量的錯誤計算。
如果您進行多步計算,您可能很幸運,一步引入的誤差會在后面的步驟中被一些互補誤差補償。但這純粹是運氣,統計資料告訴我們,預期誤差確實會隨著每一步而增加。
例如,如果您使用該float資料型別進行 1000 次乘法運算(通常達到 6-7 位有效十進制數字的準確度),我希望結果最多只能正確約 5 位數字,最壞情況下只有 3-4 位數字。
有一些方法可以進行精確計算(至少對于加法、減法、乘法和除法),例如使用ratioLISP 編程語言中的型別,但實際上它們很少使用。
所以,是的,在支持小數的資料型別中進行多步計算會迅速降低精度,并且它發生在所有數字范圍內,而不僅僅是 0 和 1 之間的數字。
如果這是某些應用程式的問題,則將數學公式轉換為可以更精確計算的等效公式(例如,具有較少中間步驟的公式)是一項特殊技能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381001.html
下一篇:非常慢的內連接查詢
