浮点数表示(IEEE 754)

本文介绍了浮点数的表示方法,包括定点数(定点整数和定点小数)的概念,并详细讲解了IEEE754浮点数规范,如浮点数的结构、尾数和指数的表示,以及移码在指数中的应用。通过示例解释了如何将十进制数转换为浮点数并遵循IEEE754标准进行存储。
摘要由CSDN通过智能技术生成

引入

N = S × r j N = S×r^j N=S×rj

  • N:浮点数
  • S:尾数
  • r:基数
  • j:阶码

举个例子:
123.456 = 1.23456 × 1 0 2 123.456 = 1.23456×10^{2} 123.456=1.23456×102
其中123.456是浮点数,1.23456是尾数,10是基数(10进制),2是阶码。

可以发现,表示123.456的方法不唯一,比如:
123.456 = 12.3456 × 1 0 1 = 0.123456 × 1 0 3 = 0.0123456 × 1 0 4 = . . . 123.456 = 12.3456×10^{1} = 0.123456×10^{3} = 0.0123456×10^{4} = \quad ... 123.456=12.3456×101=0.123456×103=0.0123456×104=...


在二进制中也是如此:

10进制转化为二进制
11.62 5 10 = 1011.10 1 2 11.625_{10} = 1011.101_{2} 11.62510=1011.1012

表示方法同样多种:
1011.101 = 0.1011101 × 2 100 = 1.011101 × 2 11 = . . . 1011.101 = 0.1011101×2^{100} = 1.011101×2^{11} = \quad... 1011.101=0.1011101×2100=1.011101×211=...
指数部分也用二进制表示,2100表示24211表示23

可以看出,表示一个数的方式太多,因此要有一个规范(IEEE 754),在讲规范之前,先了解一下基础概念。

定点数

计算机中是没有通过硬件来表示小数点的,因此小数点及其位置是隐含规定的,所谓定点就是小数点的位置不变。

定点数又分为定点整数和定点小数。

定点整数

小数点隐含在最低位之后,最高位为符号位。

  • 为什么有符号位?

    计算机中用补码表示数(补码不会有+0-0之分),补码的最高位为符号位。

举个例子:
− 1 3 10 = − 110 1 2 -13_{10} = -1101_{2} 1310=11012
用8位的定点整数来表示10进制的-13

如果是13,则将符号位改为0

  • 为什么符号位0表示正,1表示负?

    数的符号表示为:-1符号位

    • 若符号位=0,则数的符号为-10 = 1,表示正数
    • 若符号位=1,则数的符号为-11 = -1,表示负数

定点小数

小数点隐含与数值位与符号位之间

举个例子:
0.62 5 10 = 0.10 1 2 0.625_{10} = 0.101_{2} 0.62510=0.1012
若用8位的定点小数来表示10进制的0.625

然而生活中的数常常不是纯整数或是纯小数,而是两者的结合

IEEE 754规范

因为表示一个浮点数的方法有很多,但是计算机中要有一个统一的规范,这规范就是IEEE 754

本文讲IEEE 754Float32标准
V = − 1 S × M × R E V = -1^{S}×M×R^{E} V=1S×M×RE
V:浮点数

R:基数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EG1yxTS-1649169898441)(../../Figure/image-20220405213717011.png)]

  • 符号:1bit
  • 指数:8bit
  • 尾数:23bit

同时规定:

  • 1 ≤ M < 2 1≤M<2 1M2

    因此尾数的第一位固定为1,并且在表示时忽略。

  • 尾数M采用的是定点小数表示。

维基百科-移码

  • 移码(offset binary),是将二进制原码无符号整数所代表的值,减去一个预设值。
  • 标准移码,预设值为二进制原码表示的最大整数的一半。 一个数的标准移码和补码,最高位相反,其余各位均相同。
  • E 用移码表示,8 位无符号数的表示范围是[0, 255],而 IEEE754 规定移码的真值为 E - 127127 被称为偏置),因此要存储阶码时,需要先加上偏置 127

    • 其中,8 位移码 1000 0000 的真值为 0,即补码 0000 0000 的最高位符号位取反
    • 手算时,如果考虑补码取反,那操作起来很麻烦,将移码直接看作是:无符号数 + 偏置更为方便,例如阶码值 = 3,则移码表示的阶码为 127 + 3 = 130 = 128 +2(1000 0010)
    • IEEE754 中移码全 1 和全 0 保留,全 0 被认为是机器零,全 1 被认为是无穷大,因此 E 的取值为 1 ~ 254,减去偏置后对应真值 -126 ~ 127
  • 指数E采用的是定点整数表示

  • 用符号位来表示尾数的符号

示例1

− 9.62 5 10 = − 1001.10 1 2 -9.625_{10} = -1001.101_{2} 9.62510=1001.1012

尾数M = 1.001101

指数E = 310 = 112

  • 上面提到过,尾数小数点左侧的1忽略,因此尾数表示为:

  • 指数在表示时会减去127,因此指数部分的实际值应该为:
    127 + 3 = 13 0 10 = 1000001 0 2 127+3 = 130_{10} = 10000010_{2} 127+3=13010=100000102
    指数表示为:

  • -9.625为负数,因此符号位=1(-11=-1),符号位表示为:

-9.625表示为:

示例2

0.0937 5 10 = 0.0001 1 2 0.09375_{10} = 0.00011_{2} 0.0937510=0.000112

2 − 4 = 0.0625 , 2 − 5 = 0.03125 , 2 − 4 + 2 − 5 = 0.09375 2^{-4} = 0.0625, \quad 2^{-5} = 0.03125,\quad 2^{-4}+2^{-5} = 0.09375 24=0.0625,25=0.03125,24+25=0.09375

  • 尾数M = 1.1

    尾数的小数点左侧的1忽略,所以M表示为:

  • 指数E = -4

    因为要减去127这个偏置,所以E=123(123-127=-4),二进制为:01111011,所以E表示为:

  • 符号S = 0

    因为0.09375为正数,符号为-10 = 1,符号位表示为:

    在这里插入图片描述

0.09375表示为:
在这里插入图片描述

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值