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

时间:2017-11-21 07:38:25

标签: floating-point ieee-754 subtraction

我搜索了谷歌,没有运气找到我正在寻找的答案。

想象一下基数2中的这2个数字:

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

因此,为了减去这两个数字,我们需要将2端向右移2位,以获得相同的指数。所以现在我们有:

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

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

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

然后我们对结果进行归一化和舍入处理。作为一个人,我们知道如何处理这个减法,但是硬件呢?它是否使用任何特殊的算法来使B数字为负(算法像2' s补码就像我们对整数的做法一样)?如果我们想要A+BB为负数,则此问题也有效。

2 个答案:

答案 0 :(得分:2)

  

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

要明确:IEEE 754没有规定HW必须如何执行减法,只有给定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。移位会在b寄存器中留下一些N+2位,有些则留给“右”。

  1.xxxxxxx_00     e AA
- 0.00001xx_xx xxx e AA

xxx向外移出,设置“借位c”到其中任何一个 1?

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

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

为了简化功能说明,考虑2种情况:没有初始移位/移位,即使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.减法为 exact 。专门处理零结果(未示出)。

在情况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喜欢向上,向下,截断,向无穷大和流行的“圆到最近与偶数相关”可以仅从符号or和{{1 }}。 <{1}}和C为零时,结果是准确的。

r

现在添加圆形位C

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

此总和可能会导致R。在这种情况下,结果向右移动,指数递增。

答案 1 :(得分:0)

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

抱歉,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.