如何在硬件中实现 IEEE 754 浮点减法?

how to implement IEEE 754 floating point subtraction in hardware?

我搜索了 google,但没有找到我正在寻找的答案。

假设这 2 个数字以 2 为基数:

A = 1.0001 * e-4
B = 1.001 * e-6

所以要减去这 2 个数字,我们需要将 2end 右移 2 位,以获得相同的指数。所以现在我们有:

A = 1.0001 * e-4
B = 0.001001 * e-4

现在我们的指数相同,我们应该对有效数字进行减法,这意味着:

  1.000100
- 0.001001
----------
  0.111011

然后我们对结果进行归一化和舍入处理。作为人类,我们知道如何处理这种减法,但是 HW 呢?它是否使用任何特殊算法来使 B 数字为负数(算法类似于 2 的补码,就像我们对整数所做的那样)?当我们想做 A+BB 是负数时,这道题也有效。

how to implement IEEE 754 floating point subtraction in hardware?

明确一点:IEEE 754 没有规定硬件必须如何执行减法,只是规定了给定的 2 个输入和舍入模式结果必须是什么。 HW 是中间的一个黑框 miracle occurs


HW 减法算法示例:

假设 N=8 位有效数,a b 相同符号(否则使用加法),|a| >= |b| > 0(否则交换操作数)。位 x 为 0 或 1。

  1.xxxxxxx e AA
- 1.xxxxxxx e BB

使用 N+2 宽寄存器。查找需要的班次 AA - BB。移位将在 N+2 寄存器中留下一些 b 位,一些在 "right".

  1.xxxxxxx_00     e AA
- 0.00001xx_xx xxx e AA

xxx移出,设一个"borrow bit c"是其中任何一个1?

             c <-- Initial borrow bit                    
  1.xxxxxxx_00 
- 0.00001xx_xx

现在以通常的方式执行减法。

为了简化函数解释,考虑两种情况:没有初始 shift/shift,即使 HW 会使用单个公共路径。

  // Result with no shift.  Initial borrow bit 'c' is then zero.
  0.1111111_00 Max value
  0.0000000_00 Min-value  (a == b)

结果左移,指数递减,直到首位为1。减法精确。零结果被特殊处理(未显示)。


在情况 2 中,通过移位,'c' 为 0 或 1。

  // Result with shift
  1.1111110_11 Max value.
  0.1111111_1x Lowest-values. 

如果前导位为0,则结果左移,指数递减。它是最低值的子案例,它要求 N+2 而不是 N+1 寄存器来使四舍五入(下)正确。


现在四舍五入。首先 sc 位被或运算(是其中之一吗?)以形成新的 C。各种 rounding modes,如向上、向下、截断、向无穷大和流行的 "round to nearest with ties to even" 可以仅从符号 orC 中推导出来。当 rC 为零时,结果是准确的。

          o rs c
  1.xxxxxxx_xx c
  -->
  1.xxxxxxx_x  C

现在添加圆位R

  1.xxxxxxx
  0.000000R

这个总和可能会导致 10.0000000。在这种情况下,结果右移并且指数递增。

hmmmmmm ... 就像这个问题一样,每个细节都需要准确,否则会失败...

抱歉,LF 和引文的格式设置有困难.. :-(

Imagine these 2 numbers in base 2:
A = 1.0001 * e-4 
B = 1.001 * e-6
So to subtract these 2 numbers we need to shift the 2end one 2 bits right, 
to have the same exponents. So now we have:

!! 2 位 !!

A = 1.0001 * e-4
B = 0.001001 * e-4

!!不应该是!!:

B = 0.01001 * e-4

Now our exponents are the same and we should do subtraction for 
significands, which means:

  1.000100
- 0.001001
----------
  0.111011

!!和acc。到上面的更正!!:

  1.000100
- 0.010010
----------
  0.110010

注册

b.