首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在硬件上实现IEEE 754浮点减法?

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

Stack Overflow用户
提问于 2017-11-21 07:38:24
回答 2查看 754关注 0票数 3

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

假设这两个数字在基数2中:

代码语言:javascript
复制
A = 1.0001 * e-4
B = 1.001 * e-6

因此,要减去这两个数字,我们需要将2end 1,2位右移,才能得到相同的指数。所以现在我们有:

代码语言:javascript
复制
A = 1.0001 * e-4
B = 0.001001 * e-4

现在我们的指数是相同的,我们应该对有意义的值做减法,这意味着:

代码语言:javascript
复制
  1.000100
- 0.001001
----------
  0.111011

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-21 18:54:09

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

需要明确的是: IEEE 754并没有规定HW必须如何执行减法,只要求给定两个输入和舍入模式,结果必须是什么。HW是中间的一个黑匣子,其中有一个奇迹发生

样本HW减去算法:

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

代码语言:javascript
复制
  1.xxxxxxx e AA
- 1.xxxxxxx e BB

使用N+2宽寄存器。找到需要AA - BB的班次。这一转变将把一些b位留在N+2寄存器中,而另一些则保留在“右”。

代码语言:javascript
复制
  1.xxxxxxx_00     e AA
- 0.00001xx_xx xxx e AA

xxx移出,设置一个“借位c”是其中的任何一个吗?

代码语言:javascript
复制
             c <-- Initial borrow bit                    
  1.xxxxxxx_00 
- 0.00001xx_xx

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

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

代码语言:javascript
复制
  // 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。

代码语言:javascript
复制
  // Result with shift
  1.1111110_11 Max value.
  0.1111111_1x Lowest-values. 

如果引线位为0,则结果左移,指数递减。它是最小值子情况,它要求N+2而不是N+1寄存器使舍入(以下)正确。

现在开始四舍五入。首先,sc位是或“‘ed”的(其中一个是?)以形成新的C。各种舍入模式,如向上、向下、截断、向无穷远,以及流行的“圆到最近与偶数的关系”,完全可以从符号、orC中推导出来。当rC为零时,结果是准确的。

代码语言:javascript
复制
          o rs c
  1.xxxxxxx_xx c
  -->
  1.xxxxxxx_x  C

现在添加圆位R

代码语言:javascript
复制
  1.xxxxxxx
  0.000000R

这一总和可能导致10.0000000。在这种情况下,结果向右移动,指数增加。

票数 2
EN

Stack Overflow用户

发布于 2021-06-18 01:18:11

嗯嗯。就像这个问题,每个细节都需要精确,否则就会失败.

抱歉,LF和引文的格式有问题。:-(

代码语言:javascript
复制
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位!

代码语言:javascript
复制
A = 1.0001 * e-4
B = 0.001001 * e-4

!!不是吗!

B= 0.01001 * e-4

代码语言:javascript
复制
Now our exponents are the same and we should do subtraction for 
significands, which means:

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

!!还有acc。上述更正如下:

代码语言:javascript
复制
  1.000100
- 0.010010
----------
  0.110010

雷格。

b.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47407662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档