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