关于IEEE 754浮点运算的问题

问题描述 投票:0回答:1

我想问一个关于IEEE 754浮点的操作问题:

(以IEEE 754单精度浮点数为例:1个符号位,8个指数位,23个尾数位]

[计算两个浮点数的加法和减法时,指数较小的尾数应与指数较大的尾数对齐。

即,这取决于两个浮点数之间的指数差,以查看尾数偏移多少

这是我的问题:如果指数较小的尾数超出了移位后尾数可以表达的范围。

我们应该一起算出超出范围的位,还是必须丢弃它们?

例如:我想计算两个浮点数的减法]

第一个操作数:“ 0”(符号)10010011(指数)0000 0000 0000 0000 1111 111(尾数)

第二个操作数:“ 1”(符号)“ 10001110”(指数)“ 0000 0000 0000 0111 1111 111”(尾数)

第一个数字的指数为十进制的147,第二个数字的指数为十进制的142,并且147-127(bias)= 20,142-127 = 15

实际上,以上两个数字可以变成:

第一个操作数: 1.0000 0000 0000 0000 1111 111 * 2 ^ 20

第二个操作数: -1.0000 0000 0000 0111 1111 111 * 2 ^ 15

由于第二个数字比第一个数字的幂小五,因此需要将它向右移5位,然后我的问题是,它将变成:]]

  1. 所有位都保留,因此总共需要28位来表示尾数-0.0000 1000 0000 0000 0011 111“ 1 1111”(这5位超过23位)*(2 ^ 20)

  2. 超过23bit后立即切断,因此满足23bit表示尾数-0.0000 1000 0000 0000 0011 111 *(2 ^ 20)

  3. 要考虑的三位数字是圆形,后卫和粘性,因此请使用25bit表示尾数。-0.0000 1000 0000 0000 0011 111 11 =>最后两位(第24位和第25位)是保护位和舍入位,并设置S = 1(因为最后三个1被切掉)

  4. 以上选项中哪个是正确的,或者没有一个是正确的?

我想问一个关于IEEE 754浮点数的操作问题:(以IEEE 754单精度浮点数为例:1个符号位,8个指数位,23个尾数位...

floating-point precision ieee-754
1个回答
0
投票

根据IEEE 754,始终考虑所有位。该操作产生的结果与您使用实数算术计算完整结果然后将其四舍五入以使用有效的四舍五入规则将其四舍五入为浮点格式相同。 (四舍五入到最接近,甚至连到低位/位数也很常见,但是舍入还有其他选择,例如始终向上,始终向下,朝零逼近,并且始终将任何非零值朝着奇数低位舍入。)

这并不意味着计算机始终必须计算完整的实数结果。对于加法和减法,使用舍入,保护和粘性位即可获得所需的答案。对于其他操作,可能需要更复杂的算法。要求仅是计算机必须计算出if

© www.soinside.com 2019 - 2024. All rights reserved.