偏置常数,帮助增大浮点数的精度
拿 float 举例:
float 的阶码有八位
规格化数的表示范围 1~254
P s : 当 阶 码 全 为 1 时 或 全 为 0 时 , 表 示 的 是 特 殊 情 况 — — 如 无 穷 和 非 数 N a N \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 刚 好 是 f l o a t 规 格 化 数 阶 码 的 表 示 范 围 的 中 间 值 \color{green}{127 刚好是float 规格化数阶码的表示范围的中间值} 127刚好是float规格化数阶码的表示范围的中间值
前 面 求 偏 置 常 数 的 公 式 , 就 是 据 此 推 出 来 的 \color{green}{前面求偏置常数的公式,就是据此推出来的} 前面求偏置常数的公式,就是据此推出来的