【问题标题】:Floating point addition with LSB error带有 LSB 错误的浮点加法
【发布时间】:2016-08-03 23:53:46
【问题描述】:

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

【问题讨论】:

    标签: rounding point floating mantissa


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多