版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
原理专栏收录该内容
35 篇文章0 订阅
订阅专栏
偏置常数,帮助增大浮点数的精度
拿float 举例:
float 的阶码有八位
规格化数的表示范围 1~254
P s : 当阶码全为1时或全为0时,表示的是特殊情况——如无穷和非数NaN\color{green}{Ps:当阶码全为1时或全为0时,表示的是特殊情况——如无穷和非数NaN}Ps:当阶码全为1时或全为0时,表示的是特殊情况——如无穷和非数NaN
这样的指数,足以给浮点数表示足够大的数
但是, 想精确小数点后的数字却仍有不足\color{red}{想精确小数点后的数字却仍有不足}想精确小数点后的数字却仍有不足
所以,这里设置一个偏执常数2^(n-1) - 1 =2^7 -1 =127
来让 float 规格化数阶码部分的表示范围变成
-126~127
当指数为负数时,相当于小数点往左边移动,让小数部分的位数增加了
举例:
1.1 x 2^(-1) (这里的1.1是二进制,真值是1.5,可参考二进制小数)
即表示 0.11 ——0.75
Ps:
在十进制中,除以10即小数点左移一位
在二进制中,除以2即小数点左移一位
综上:
偏执常数的设置,是为了浮点数小数部分的精度考虑的
额外拓展一个问题,为什么偏置常数要设置成127 ? \color{green}{额外拓展一个问题,为什么偏置常数要设置成127?}额外拓展一个问题,为什么偏置常数要设置成127?
127 = ( 1 + 254 ) / \color{green}{127=(1+254)/ }127=(1+254)/ 2 \color{green}{2}2
127 刚好是float规格化数阶码的表示范围的中间值\color{green}{127 刚好是float 规格化数阶码的表示范围的中间值}127刚好是float规格化数阶码的表示范围的中间值
前面求偏置常数的公式,就是据此推出来的\color{green}{前面求偏置常数的公式,就是据此推出来的}前面求偏置常数的公式,就是据此推出来的