网站做seo推广 s/百度客服在线咨询
文章目录
- 科学计数法
- 浮点数的表示
- 表示范围
- IEEE 754
- 16进制数转浮点数
- 浮点数转01序列
科学计数法
规格化的数,小数点前一位不为0
如:1.23×1041.23\times10^41.23×104
解析一下这个式子,1.23是尾数,10是基,4是指数(阶码)
相应的,二进制同样道理
如:1.101×211111.101\times2^{1111}1.101×21111
1.101是尾数,2是基,1111是指数
因此对尾数和指数分别编码即可表示一个浮点数(基已经规定,无需表示)
浮点数的表示
第一位是符号位,0为正,1为负。
2至9位用移码表示阶码,偏置常数是2^7=128。
10至32位用原码表示尾数,规格化的尾数首位不是0,所以尾数的第一位一定是1,所以规定不用显式的表示1,所以10至32位共23位数,可以表示24位数(尾数首位1省略)
表示范围
小数点在1前
最大的正数:0.111…11×211...11=(1−2−24)×2256−1−128=(1−2−24)×21270.111…11\times2^{11...11}=(1-2^{-24})\times2^{256-1-128}=(1-2^{-24})\times2^{127}0.111…11×211...11=(1−2−24)×2256−1−128=(1−2−24)×2127
最小的正数:0.100...00×200...00=0.1×20−128=2−1290.100...00\times2^{00...00}=0.1\times2^{0-128}=2^{-129}0.100...00×200...00=0.1×20−128=2−129
因为用原码表示尾数,所以正负对称。
最小的负数:=−(1−2−24)×2127=-(1-2^{-24})\times2^{127}=−(1−2−24)×2127
最大的负数:=−2−129=-2^{-129}=−2−129
IEEE 754
早起机器,各自定义自己的浮点数形式。机器之间交换数据难,因此规定了一个标准。
以下是一些规定:
阶码:
- 偏置常数:127(单精度),1023(双精度) 这样比128和1024表示的数的范围更大(离0的距离更远)
- 阶码范围:0000 0001(1-127=-126)~ 1111 1110(254-127=127) 全0和全1表示特殊值
- 尾数最高位是1,所以隐含表示,省一位(同上)
- 小数点在1后
- 单精度可表示1+23位,双精度可表示1+52位
公式 - SP(单精度)(−1)s×(1+M)×2E−127(-1)^{s}\times(1+M)\times2^{E-127}(−1)s×(1+M)×2E−127
- DP(双精度)(−1)s×(1+M)×2E−1023(-1)^{s}\times(1+M)\times2^{E-1023}(−1)s×(1+M)×2E−1023
16进制数转浮点数
BEE0 0000H对应的浮点数是多少呢?
B对应的二进制数是1011
E对应的二进制数是1110
上面的16进制数换成二进制数是1011 1110 1110 0000 0000 0000 0000 0000
- 符号位是1,是负数
- 阶码0111 1101是125,减去127得到-2
- 尾数0.11+1=1.11=1.75
- −1.75×2−2=−0.4375-1.75\times2^{-2}=-0.4375−1.75×2−2=−0.4375
总结成一个式子就是:
−1.11×201111101−127=−(20+2−1+2−2)×2−2=−1.75×2−2=−0.4375-1.11\times2^{0111 1101-127}=-(2^{0}+2^{-1}+2^{-2})\times2^{-2}=-1.75\times2^{-2}=-0.4375−1.11×201111101−127=−(20+2−1+2−2)×2−2=−1.75×2−2=−0.4375
浮点数转01序列
−1.275×101-1.275\times10^{1}−1.275×101
- 转换成−12.75转换成-12.75转换成−12.75
- 小数点左边12=8+4=1000+0100=1100小数点左边12=8+4=1000+0100=1100小数点左边12=8+4=1000+0100=1100
- 小数点右边0.75=0.5+0.25=0.1+0.01=0.11小数点右边0.75=0.5+0.25=0.1+0.01=0.11小数点右边0.75=0.5+0.25=0.1+0.01=0.11
- 再合起来写成二进制,1100.11
- 规格化,1.10011×23规格化,1.10011\times2^{3}规格化,1.10011×23
- 负数,符号位是1
- 尾数是110011,省略1就是10011
- 3加上偏置常数得到阶码是3+127=0000 0011+0111 111=1000 0010
- 最后得出1 10000010 10011000000000000000000