2015-01-07 51 views
4

更棒的是,如果我想保存儘可能精確可能與IEEE-754浮點值的計算:IEEE-754浮點:爲了獲得最佳精度,先分開還是先乘以?

a = b * c/d 

a = b/d * c 

是否有區別?如果存在,是否取決於輸入值的大小?而且,如果幅度很重要,那麼當數值的一般幅度已知時,最佳排序是如何確定的?

+2

雖然可能不常見,但可能需要考慮a = b * c/d表達式中的b * c太大而不能表示b和c是非常大的數字的情況......其他情況可能是圍繞着同樣的想法。 – NoChance

回答

2

假設沒有任何操作會產生溢出或下溢,並且您的輸入值具有均勻分佈的有效數,那麼這是等效的。那麼,我想有一個嚴格的證明,應該做一個詳盡的測試(可能在實際中不可能實現雙精度,因爲有2^156個輸入),但是如果平均誤差存在差異,那麼它很小。我可以用Sipe以低精度嘗試。

在任何情況下,在沒有上溢/下溢,只有有效數的精確值關係,而不是指數。

但是,如果該結果一個被添加到(或相減)的另一種表達,而不是再利用,則與分裂開始,因爲你可以組具有以下另外通過使用FMA乘法可能更有趣(因此一個舍入)。

2

這取決於值的大小。顯然,如果一個除以零,所有的賭注都關閉,但如果在非正規隨後操作的乘除結果可能會失去精度。

你可能會發現,研究Goldberg的開創性論文What Every Computer Scientist Should Know About Floating-Point Arithmetic這將解釋的東西遠遠大於你可能會得到這裏的任何答案更好。 (高盛是IEEE-754的原創作者之一)。