关于IEEE 754浮点数隐式1改变小数部分值的疑问
理解IEEE 754半精度浮点数(f16)的隐式前导1与尾数计算
你得先理清两个核心概念:f16的尾数部分是二进制小数位,而非直接转成十进制整数后做除法。你看到的
1001001000是f16的10位尾数,它的十进制值584只是这个二进制整数本身的数值,但在IEEE754标准里,这串二进制是用来构成1.xxxxx形式中的小数部分,每一位对应2的负幂次权重。计算
1.1001001000的十进制值:
把小数位按二进制权重展开:1*(1/2) + 0*(1/4) + 0*(1/8) + 1*(1/16) + 0*(1/32) + 0*(1/64) + 1*(1/128) + 0*(1/256) + 0*(1/512) + 0*(1/1024)计算各部分的和:
1/2 = 0.5,1/16 = 0.0625,1/128 = 0.0078125
加起来得到0.5703125,再加上隐式的前导1,结果就是1.5703125。为什么不是1.584?
你错误地把1001001000这个二进制整数转成十进制584后,直接除以1000得到0.584,但这是十进制的思维逻辑,和IEEE754的二进制小数规则完全无关。二进制小数的每一位权重是2的负幂(1/2、1/4、1/8……),不是10的负幂,所以不能用整数转十进制后除以10^位数的方式计算。
内容的提问来源于stack exchange,提问作者Raven King
相关产品推荐
相关产品推荐

