浮点加法与LSB错误

时间:2016-08-03 23:53:46

标签: rounding point floating mantissa

我正在使用Verilog实现硬件双精度加法器。在验证阶段,当我将我的硬件输出与MATLAB(或C)双精度加法输出进行比较时,我发现了LSB不匹配的一些奇怪情况,考虑到我使用相同的舍入模式(舍入到最接近的偶数) 。我的问题是关于C计算的准确性,它是否真正准确地进行舍入或者仅限于一些CPU架构(32或64位)?

这是一个例子,

A = 0x62a5a1c59bd10037 = 1.5944933396238637e + 167

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

正确的输出(只需手动添加上述实数)

= 1.7630682053572526e + 167 = 0x62a7eb3e1c9c3819(这与我的硬件匹配)

当我尝试用C做A + B时​​,结果等于

= 1.7630682053572525e + 167 = 0x62a7eb3e1c9c3818

当我尝试此应用程序来检查中间操作时 http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/

我可以从尾数中看到,C没有正确地进行舍入(舍入到最近的偶数)。在这种情况下,尾数应该通过添加一个来舍入。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/的操作是正确的。最近的一轮甚至是向下舍入:

A+B  + 1.0111111010110011111000011100100111000011100000011000|10 *2^555
                                                            ^
                                                            |
to forget the |10 part (exactly in the middle), the result chooses 0 (even) instead of 1