2017-05-28 70 views
0

根據this very elaborate answer我估計的最大相對誤差δ資源,執行以下計算的最大這樣的:估計最大相對誤差

// Pseudo code  
float a, b, c; // Prefilled IEEE 754 floats with double precision  
res = a/b * c; 

解析度= A *(1 + δ一個)/(b *(1 +δ b))*(1 +δ A/b)* C *(1 +δç)*(1 +δ A/b * c

= A/B * C *(1 +δ一個)/(1 +δ b)*(1 +δ A/B)*(1個+δÇ)*(1 +δ A/b * C

= A/b * C *(1個+δ RES

=>δ RES =(1 +δ一個)/( 1 +δ b)*(1 +δ A/B)*(1個+δÇ)*(1 +δ A/B * C) - 1個

所有ΔS是±ε的範圍內/ 2,其中ε是2^-52。

=>δ水庫,最大 =(1 +ε/ 2)^ 4 /(1 - ε/ 2) - 1≈2.5 *ε

這是對於誤差估計的有效的方法,可以用於基本浮點運算的每個組合?

PS:

是的,我閱讀了「什麼的每一臺計算機科學家應該知道關於浮點運算」。 ;)

+2

您可能會發現一些相關且有趣的論文:Claude-Pierre Jeannerod和Siegfried M. Rump。 「關於浮點操作的相對錯誤:最佳範圍和應用程序。」 (2016)[(online)](https://hal.inria.fr/docs/00/93/44/43/PDF/JeannerodRump2014.pdf) – njuffa

+0

感謝您的鏈接@njuffa!有趣的,的確如此。:)現在我只對安全的錯誤界限感興趣。如果需要,收緊它們將是我的下一步。 – Thorsten

回答

1

那麼,這是大概一個有效的方法。我不確定你是如何駕馭最後一行的,但你的結論基本上是正確的(儘管注意到,由於理論誤差可能超過2.5e,實際上誤差界限爲3e)。

是的,這是一種有效的方法,可以用於這種形式的任何浮點表達式。但是,結果並不總是那麼幹淨。一旦你在混音中加/減,而不僅僅是乘法和除法,你通常無法將精確表達式和錯誤乘法器完全分開。相反,你會看到輸入項和誤差項直接疊加在一起,而不是這裏愉快而相對恆定的界限。

作爲一個有用的例子,嘗試導出(a+b)-a的最大相對誤差(假設ab是準確的)。

+0

感謝您的回覆,@sneftel! :)你是什麼意思_almost valid_&_theoretical error_?關於我的最後一個等式:我用δ的上界或下界取代δs,所以δres具有最大的可能值。 – Thorsten

+0

「幾乎有效」是因爲,正如我所說的,錯誤可能超過2.5e。順便說一句,對於除法運算符,通常使用替代公式fl [a?b] = a?b /(1 +δ)是有用的,這也是有效的,並且避免了古怪的劃分。 – Sneftel

+0

你介意解釋一下δ如何超過2.5e?爲什麼我可以在同一個等式中結合不同的浮點模型? – Thorsten