0

我正在用 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 没有正确进行舍入(舍入到最接近的偶数)。在这种情况下,尾数应通过加一来四舍五入。知道为什么会这样吗?

4

1 回答 1

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
于 2016-08-04T11:48:04.140 回答