Featured image of post 浮点数

浮点数

浮点数

定点数的局限性:定点数可表示的数字范围有限,又不能无限制地增加数据的长度。

浮点数的表示

​ 一个浮点数由阶码与尾数组成,阶码反映了数值大小,尾数反映了精度。

image-20220502180232280

  • 阶码:常用补码或移码表示的定点整数,最多不超过两位数(99)

  • 尾数:常用原码或补码表示的定点小数

  • 浮点数的真值: $r^E*M$,r就是阶码的底,通常为2

  • 尾数的最高位是无效值(0)会丧失精度

浮点数尾数的规格化

规格化浮点数:规定尾数的最高数值位必须是一个有效值,且阶码字段十进制值介于[1,254]

左归:尾数算数左移1位,阶码-1

右归:尾数出现溢出(双符号位为01或10)时,尾数算数右移1位,阶码+1

采用双符号位,当溢出发生时,可以挽救。更高的符号位是正确的符号位。

补码的算术左移,低位补0;补码算数右移,高位补1

规格化浮点数的特点

  1. 规格化的原码尾数,最高数值位一定是1
  2. 规格化的补码尾数,符号位与最高数值位一定相反。

浮点数标准IEEE 754

移码:补码的基础上将符号位取反。只能用于表示整数

移码=真值+偏置值(8位移码的偏置值=128D=10000000B),即2^n-1^

但偏置值可以取其他值,在IEEE 754标准中,阶码由移码表示,其偏置值取了2^n-1^-1

image-20220502183607777

image-20220502184643693

最小绝对值:尾数全0,阶码真值最小-126,对应移码机器数0000 0001,此时整体的真值为1.0x2-126

最大绝对值:尾数全1,阶码真值最大值为127,对应移码机器数1111 1110 此时整体的真值为(1.1111…11)2x2127

以上皆基于单精度浮点数进行讨论,双精度浮点数同理

image-20220502185116465

阶码全1全0用作特殊用途

  • 当阶码全为0,尾数M不全为0时,表示非规格化小数
  • 当阶码全为1,尾数M不全为0时,表示非数值NaN(0/0,无穷/无穷,等)
  • 当阶码全为0,尾数M全为0,数符为1表示-0,数符为0表示+0
  • 当阶码全为1,尾数M全为0时,数符为1表示负无穷,数符为0表示正无穷

类型转换精度丢失问题

例如intfloat类型转换,由于int类型4字节32位表示,float类型尾数部分只有23位表示,

故当int类型的数据无法用23位表示完全时会导致精度丢失

double类型尾数部分有52位,所以int转换为double就可以精确表示

浮点数运算

加减运算的步骤:

  1. 对阶:小阶码向大阶码对齐
  2. 尾数加减
  3. 规格化:若运算结果出现非规格化则进行左归或右归
  4. 舍入:若只能保留6位有效尾数,若舍弃部分非0,则入1

​ 或者四舍五入

​ 或者直接舍弃

  1. 判溢出: 若规定的阶码不超过两位,则运算后阶码超出范围,则溢出(尾数溢出未必导致整体溢出,也许可以通过3,4来救)

image-20220502191917646

总有些事情高于其他
Built with Hugo
主题 StackJimmy 设计
本站访客数人次 总访问量 本文阅读量