Floating point 为什么我的方法不正确,根据ieee754添加两个浮点数,如5.0和3.0?

Floating point 为什么我的方法不正确,根据ieee754添加两个浮点数,如5.0和3.0?,floating-point,addition,ieee-754,Floating Point,Addition,Ieee 754,二进制中的5是101 二进制中的3是11 5的指数为127+2=129 10000001 3的指数为127+1=128 10000000 5的尾数是01000000000000000 3的尾数是100000000000000000000 均衡指数129-128=1 将3的尾数向右移动1 01000000000000000000000 加上两个尾数 01000000000000000000000+01000000000000000000000 = 10000000000000000000000

二进制中的5是
101

二进制中的3是
11

5的指数为
127+2=129 10000001

3的指数为
127+1=128 10000000

5的尾数是
01000000000000000

3的尾数是
100000000000000000000

均衡指数
129-128=1

将3的尾数向右移动1

01000000000000000000000
加上两个尾数

01000000000000000000000+01000000000000000000000 =

10000000000000000000000
结果:

sign = 0

exponent = 10000001

mantissa = 10000000000000000000000
为什么我的方法不正确,根据ieee754添加两个浮点数,如5.0和3.0

未考虑有效位的隐含最高有效位

5的尾数是01000000000000000(OP不正确的声明)
3的尾数为100000000000000000000(OP的索赔不正确)

不。这些是编码,不是值

尾数,更恰当地称为有效位,是

5 is 1.01000000000000000000000 expo 129
3 is 1.10000000000000000000000 expo 128
加上这些

 10.1000000000000000000000  expo 128
  1.10000000000000000000000 expo 128
--------------------------
100.00000000000000000000000 expo 128
将其舍入到1+23位

1.00000000000000000000000 expo 130
或8.0f

为什么我的方法不正确,根据ieee754添加两个浮点数,如5.0和3.0

未考虑有效位的隐含最高有效位

5的尾数是01000000000000000(OP不正确的声明)
3的尾数为100000000000000000000(OP的索赔不正确)

不。这些是编码,不是值

尾数,更恰当地称为有效位,是

5 is 1.01000000000000000000000 expo 129
3 is 1.10000000000000000000000 expo 128
加上这些

 10.1000000000000000000000  expo 128
  1.10000000000000000000000 expo 128
--------------------------
100.00000000000000000000000 expo 128
将其舍入到1+23位

1.00000000000000000000000 expo 130

或8.0f

5的有效位是(作为二进制数字)1.01000000000000000。3的有效位为1.100000000000000。当这些被编码到IEEE-754格式的位字段中时,最后23位被放入有效位字段,1位通过指数表示。包含这23位的字段不是整个有效位;这只是编码的一部分。另一位由指数字段确定。当您将3的23位100000000000000右移以使其与5的位对齐时,必须包含前导1,因此结果为110000000…5的有效位(作为二进制数字)为1.01000000000000000。3的有效位为1.100000000000000。当这些被编码到IEEE-754格式的位字段中时,最后23位被放入有效位字段,1位通过指数表示。包含这23位的字段不是整个有效位;这只是编码的一部分。另一位由指数字段确定。将3的23位10000000000000000右移以与5的位对齐时,必须包含前导1,因此结果为110000000…@omskiski 26位总和为“100.000000000000000000”。下一步是将其四舍五入到24位的数字:“1.00000000000000000000000 expo 130”。只是为了澄清我的理解,5的指数是129,因为它的分数小于3而减小。0.1<.10,因此,通过指数差将其向右移动(情况为1)。我不明白舍入到1+23是因为保持隐式1完好无损,还是因为指数129-128之间的差异,1代表1+23。“5的指数129减小,因为其分数小于3。”-->否。分数不相关。1.01000000000000000000000000000 expo 129被重新写为'10.1000000000000000000000000000000 expo 128,因此加法可以添加相同单位的值。你不能把1英镑加2便士得到3英镑。需要普通单位。100便士+2便士-->102便士@omskiski在加上之后,总数为100.000000000000000000000000便士。这是大于24位的
浮点
有效位。所以我们四舍五入到最好的24位答案,即1.000000000000000000000000000000。在本例中,这只是删掉最右边的2个零位。@omskiski 26位和为“100.000000000000000000000000”。下一步是将其四舍五入到24位的数字:“1.00000000000000000000000 expo 130”。只是为了澄清我的理解,5的指数是129,因为它的分数小于3而减小。0.1<.10,因此,通过指数差将其向右移动(情况为1)。我不明白舍入到1+23是因为保持隐式1完好无损,还是因为指数129-128之间的差异,1代表1+23。“5的指数129减小,因为其分数小于3。”-->否。分数不相关。1.01000000000000000000000000000 expo 129被重新写为'10.1000000000000000000000000000000 expo 128,因此加法可以添加相同单位的值。你不能把1英镑加2便士得到3英镑。需要普通单位。100便士+2便士-->102便士@omskiski在加上之后,总数为100.000000000000000000000000便士。这是大于24位的
浮点
有效位。所以我们四舍五入到最好的24位答案,即1.000000000000000000000000000000。在这种情况下,就是简单地剪掉最右边的2个零位。