2016-08-03 76 views
0

我正在用Verilog實現一個硬件雙精度加法器。在驗證階段,當我將硬件輸出與MATLAB(或C)雙精度加法輸出進行比較時,發現LSB不匹配的一些奇怪情況,考慮到我正在使用相同的舍入模式(舍入到最近偶數) 。我的問題是關於C計算的準確性,它是否在舍入時真正準確,還是僅限於某些CPU架構(32位或64位)?帶LSB錯誤的浮點加法

下面是一個例子,

A = 0x62a5a1c59bd10037 = 1.5944933396238637e + 167

B = 0x62724bc40659bf0c = 1.685748657333889e + 166 = 0.1685748657333889e + 167

正確的輸出(只是通過執行加法手動以上的實數)的

= 1.7630682053572526e + 167 = 0x62a7eb3e1c9c3819(這是我的硬件)

匹配3210

當我嘗試做在C A + B,結果是等於

= 1.7630682053572525e + 167 = 0x62a7eb3e1c9c3818

當我嘗試此應用程序來檢查中間操作 http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/

我可以從尾數可以看出,C沒有正確地進行舍入(舍入到最近的偶數)。在這種情況下,尾數應加四捨五入。任何想法爲什麼發生這種情況?

回答