2016-11-24 53 views
2

我正在開發一些代碼,可以從浮點或固定點的HW中獲取其數據。目前我們將其作爲浮點。固定點Cholesky算法的優點

低層API都處於固定點。所以我們必須將數據作爲固定點傳遞回去。我們使用的算法是Cholesky。我想知道爲什麼我們必須爲Cholesky使用浮點數,而不是僅僅將數據作爲固定點。這樣做有什麼好處嗎?

我會認爲使用浮點會導致更多的舍入誤差。

+0

出於好奇,爲什麼你認爲浮點會導致更多的錯誤? –

+0

@SimonByrne我認爲浮點會容易出現舍入誤差。在固定點我們知道舍入誤差,所以可以補償。 – user1876942

回答

3

定點超過浮點主要優點是

  1. 這是很簡單的硬件實現,

  2. 某些運算是準確的(即不承擔任何舍入誤差),即:除了,減法和整數乘法,假設結果不會溢出。

  3. 如果你所有的數字都是相同的數值,你可以通過不需要存儲指數來獲得相同寬度的一些額外的精度:例如,在binary32 single precision的32位和24位。

特別地,第3點是不太可能對整個計算的整個階段的所有數字,特別是用於線性代數運算如喬列斯基factorisations的情況。

另一方面,浮點還有很多其他的優點。

  1. 您可以在更廣泛的幅度(如10〜-38 向 +38爲binary32)

  2. 存儲在更寬的各種數字的號碼你不會失去精度當使用較小的數字時:這對於乘法/除法尤爲重要,這在整個Cholesky計算中使用。

  3. 下溢和溢出的問題不大:它們都不太可能發生(由於1),但是當發生時通過Inf以及子正常與異常或錯誤結果更加優雅地處理。

  4. 浮點格式包含一個稍小的定點格式:即binary32包含24位定點格式的所有數字,但具有所有上述優點。

1

浮點數超過定點數的優點是可以表示的數字範圍。我不熟悉Cholesky算法,但如果它必須在內部處理非常大和非常小的數字,浮點將提供更準確的結果。

如果您使用定點算術,則需要確保輸入不會導致算法內部飽和或溢出,並將其限制在特定範圍內。此外,定義此範圍可能很困難,特別是如果您有多個輸入。

+0

這可能是一個原因。但是當我們轉換回定點時,我們不會失去這種精確度嗎?我們必須將答案寫回HW。 – user1876942

+0

我假設你的輸入/輸出具有特定的定點格式。如果你實現了定點算法,也可能是,選定的定點格式沒有足夠的整數位(溢出/飽和)或沒有足夠的小數位(精度損失)。我不是在說這裏的輸入/輸出值,而是算法中的中間結果。在浮點上,這個問題不會發生。 – maniacmic