浮点数的表示—IEEE754标准

浮点数的表示—IEEE754标准

引言

我们知道,在计算机中,数字以0和1组成的二进制序列来表示。但是,对于非常大的数字以及非常接近0的数字,简单的存储方式往往会造成精度的丢失。

为了解决这个问题,提供更高效的浮点数表示方法,各大厂商纷纷推出自己的浮点数表示标准。大约在1985年,IEEE(电气和电子工程师协会)推出了754标准,从此,江湖一统。

IEEE754标准浮点格式

IEEE754标准浮点格式由三部分组成:(−1)S∗M∗2E(-1)^S*M*2^E(1)SM2E

  • S:符号,表示浮点数是正数(s=0)还是负数(s=1)
  • E:阶码,对浮点数进行加权。阶码被解释为以偏置形式表示的有符号整数,偏置值(Bias)为2(n−1)−12^{(n-1)}-12(n1)1,n为e所占的位数(Bias单精度为2(8−1)−1=12710=0111111122^{(8-1)}-1=127_{10}=0111 1111_22(81)1=12710=011111112,双精度为2(11−1)−1=10232^{(11-1)}-1=10232(111)1=1023)。
  • M:尾数,用于表示小数

如下图所示,IEEE754标准浮点格式下的单精度浮点数占32位:符号占1位,阶码占8位,尾数占23位;双精度浮点数占64位。

image-20241123201454656

规格化的值

当阶码位既不全为0也不全为1时,是规格化浮点数。此时E=e-Bias,M>=1。

image-20241123205914917

例子:十进制的(−0.75)10(-0.75)_{10}(0.75)10,将其转化为IEEE754格式:

  • 转化为二进制:(−0.75)10=(−3/4)10=−(2−1+2−2)10=(−0.11)2(-0.75)_{10}=(-3/4)_{10}=-(2^{-1}+2^{-2})_{10}=(-0.11)_2(0.75)10=(3/4)10=(21+22)10=(0.11)2
  • 写为(−1)S∗M∗2E(-1)^S*M*2^E(1)SM2E格式:(−1)1∗1.12∗2−12(-1)^1*1.1_2*2^{-1_2}(1)11.12212
  • S=1,E=-1,M=1.1,e=E+Bias=−110+12710=−000000012+011111112=011111102e=E+Bias=-1_{10}+127_{10}=-0000 0001_2 + 0111 1111_2 = 0111 1110_2e=E+Bias=110+12710=000000012+011111112=011111102,将M去除包含的最高位1只留小数部分得到m=2(−1)2=100000000000000000000002m=2^{(-1)_2}=100 0000 0000 0000 0000 0000_2m=2(1)2=100000000000000000000002
  • 组合S、e、m即得IEEE754格式:101111110100000000000000000000001 011 1111 0100 0000 0000 0000 0000 000010111111010000000000000000000000

非规格化的值

当阶码位全为0时,是非规格化浮点数。此时E=1-Bias。

image-20241123205959482

因为M不需要>=1,所以提供了表示非常接近0值的方式。当尾数位也全为0时,表示0。

特殊值

当阶码位全为1时,是特殊浮点数。

此时,如果尾数位也全为1,当阶码位为1时代表负无穷,当阶码位为0时代表正无穷;

image-20241123210156935

当尾数位不全为1时,代表NaN,(Not a Number)不是一个数。

242156)]

当尾数位不全为1时,代表NaN,(Not a Number)不是一个数。

image-20241123210213826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值