浮点数的表示—IEEE754标准
引言
我们知道,在计算机中,数字以0和1组成的二进制序列来表示。但是,对于非常大的数字以及非常接近0的数字,简单的存储方式往往会造成精度的丢失。
为了解决这个问题,提供更高效的浮点数表示方法,各大厂商纷纷推出自己的浮点数表示标准。大约在1985年,IEEE(电气和电子工程师协会)推出了745标准,从此,江湖一统。
IEEE754标准浮点格式
IEEE754标准浮点格式由三部分组成:$(-1)^SM2^E$
- S:符号,表示浮点数是正数(s=0)还是负数(s=1)
- E:阶码,对浮点数进行加权。阶码被解释为以偏置形式表示的有符号整数,偏置值(Bias)为$2^{(n-1)}-1$,n为e所占的位数(Bias单精度为$2^{(8-1)}-1=127_{10}=0111 1111_2$,双精度为$2^{(11-1)}-1=1023$)。
- M:尾数,用于表示小数
如下图所示,IEEE754标准浮点格式下的单精度浮点数占32位:符号占1位,阶码占8位,尾数占23位;双精度浮点数占64位。
规格化的值
当阶码位既不全为0也不全为1时,是规格化浮点数。此时E=e-Bias,M>=1。
例子:十进制的$(-0.75)_{10}$,将其转化为IEEE754格式:
- 转化为二进制:$(-0.75){10}=(-3/4){10}=-(2^{-1}+2^{-2})_{10}=(-0.11)_2$
- 写为$(-1)^SM2^E$格式:$(-1)^11.1_22^{-1_2}$
- S=1,E=-1,M=1.1,$e=E+Bias=-1_{10}+127_{10}=-0000 0001_2 + 0111 1111_2 = 0111 1110_2$,将M去除包含的最高位1只留小数部分得到$m=2^{(-1)_2}=100 0000 0000 0000 0000 0000_2$
- 组合S、e、m即得IEEE754格式:$1 011 1111 0100 0000 0000 0000 0000 0000$
非规格化的值
当阶码位全为0时,是非规格化浮点数。此时E=1-Bias。
因为M不需要>=1,所以提供了表示非常接近0值的方式。当尾数位也全为0时,表示0。
特殊值
当阶码位全为1时,是特殊浮点数。
此时,如果尾数位也全为1,当阶码位为1时代表负无穷,当阶码位为0时代表正无穷;
当尾数位不全为1时,代表NaN,(Not a Number)不是一个数。
浮点数的表示—IEEE754标准
https://www.wananhome.site/2024/11/23/浮点数的表示—IEEE754标准/