2012-03-31 57 views
5

我正在製作一個程序,用於生成VHDL測試平臺中使用的測試向量。測試平臺從本質上測試了一個作爲單精度浮點加法器的硬件,因此向量將符合IEEE 754標準。是否有危險從浮動轉換爲BigDecimal然後回來?

無論如何,我的電流產生的計劃是浮點值轉換爲BigDecimal,做必要的arithmatic,再轉換回浮動。這是危險的嗎?精度是否會丟失導致測試向量中的結果可能不準確?我想轉換爲BigDecimal,所以我可以避免舍入問題。

所以將這個截斷結果呢?

BigDecimal repA = new BigDecimal(Float.toString(A)); 
BigDecimal repB = new BigDecimal(Float.toString(B)); 
BigDecimal repResult = repA.add(repB); 
float result = repResult.floatValue(); 

其中A和B是一些浮動。

+0

你肯定會寬鬆一些,因爲精度浮點數不能代表所有可能的小數。 – anubhava 2012-03-31 18:07:19

+0

有沒有一種方法可以通過不失去任​​何精度來實現這一點? – Franklin 2012-03-31 18:10:10

+1

你認爲你需要它有多準確? – 2012-03-31 18:11:48

回答

5

如果你的目標是有一個浮動的預期限制範圍內精確的32位浮點矢量,然後我很喜歡你的方法。您首先將32位浮點數轉換爲精度較高的對象,然後對數學運算執行幾個步驟,然後再轉換回32位浮點數。最後,你的舍入誤差可能會低於你在32位浮點數中原生執行過相同的一系列步驟。

如果您的目標是準確地模擬使用32位浮點執行本機計算的硬件的預期結果,那麼您可能會冒着錯誤地報告測試失敗的風險,因爲您的計算更加準確比正在測試的硬件。

+0

我編輯了我的問題。我在想對嗎? – Franklin 2012-04-04 22:16:53

+0

根據您的示例,我沒有看到您避免了任何舍入問題。如果你只是隨機生成向量作爲浮動,將它們轉換爲字符串,將字符串轉換爲BigDecimal,添加,然後轉換回浮動,那麼你不會比僅僅添加浮動更好。 – phatfingers 2012-04-05 01:56:30

+0

查看建模的硬件截斷值而不是舍入。所以我的軟件的一部分是隨着邊緣情況產生隨機向量。我無法得到四捨五入的結果,否則測試將因爲硬件截斷而無用。 – Franklin 2012-04-05 12:12:59