IEEE 754浮点数标准中64位浮点数为什么指数偏移量是1023?

图片描述

这个值是怎么得出来的?有什么数学依据吗?

阅读 720
评论
    1 个回答
    • 11.6k

    如果你知道为什么32位浮点数的指数偏移量是127,你就能知道为什么64位浮点数的指数偏移量是1023。

    在32位浮点数中,指数位有8位,它能表示的数字是从0到2的8次方,也就是256。但是指数有正有负,所以我们需要把256这个数字从中间劈开,一半表示正数,一半表示负数,所以就是-128到+128。哦,不对,忘记了中间还有个0,所以只能表示-128到127这256个数字。那么怎么记录负数呢?一种作法是把高位置1,这样我们只要看到高位是1的就知道是负数了,所谓高位置1就是说把0到255这么多个数字劈成两半,从0到127表示正数,从128到255表示负数。但是这种作法会带来一个问题:当你比较两个数的时候,比如130和30,谁更大呢?机器会觉得130更大,但实际上130是个负数,它应该比30小才对啊。所以为了解决这个麻烦,人们发明了另外一种方法:干脆把所有数字都给它加上128得了,这样-128加上128就变成了0,而127加上128变成了255,这样的话,再比较大小,就不存在负数比正数大的情况了。

    但是我要得到原来的数字怎么办呢?这好办,你只要再把指数减去128就得到了原来的数字,不是吗?比如说你读到0,那么减去128,就得到了负指数-128,读到255,减去128,就得到了127。

    那为什么指数偏移是127,不是128呢?因为人们为了特殊用处,不允许使用0和255这两个数字表示指数,少了2个数字,自然就只好采用127了。

    同理,64位浮点数,指数位有11位之多,2的11次方是2048,劈一半作偏移,可不就是1024吗?同理,去掉0和2048这两个数字,所以就用1023作偏移了。

    80位扩展双精度,一个道理。