阅读 378

二进制小数和IEEE浮点标准

二进制小数

首先复习进位计数制的要素:

  1. 数码:用来表示进制数的元素。比如

    • 二进制数的数码为:0,1

    • 十进制数的数码为:0,1,2,3,4,5,6,7,8,9

    • 十六进制数的数码为:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

  2. 基数:数码的个数。比如

    • 二进制数的基数为2

    • 十进制数的基数为10

    • 十六进制数的基数为 16

  3. 位权:数制中每一固定位置对应的单位值称为位权。

    总结来说

    • 十进制表示公式为:

      d=mi=n10i×did=∑i=−nm10i×di

    • 二进制表示公式为:

      b=mi=n2i×bib=∑i=−nm2i×bi

    • 二进制第2位的位权为2121,第3位的位权为2222(10010.1110)2=124+023+022+121+020+121+122+123+024=16+2+1/2+1/4+1/8(10010.1110)2=1∗24+0∗23+0∗22+1∗21+0∗20+1∗2−1+1∗2−2+1∗2−3+0∗2−4=16+2+1/2+1/4+1/8

    • 十进制第2位的位权为101101,第3位的位权为102102(123.45)101×102+2×101+3×100+4×101+5×102(123.45)10=1×102+2×101+3×100+4×10−1+5×10−2

    • 十六进制第2位位权为161161,第3位的位权为162162(BAD)16=11×162+10×161+13×160=(2989)10(BAD)∗16=11×162+10×161+13×160=(2989)∗10

  • 注意 :二进制小数不像整数一样,只要位数足够,它就可以表示所有整数。假设我们仅考虑有限长度的编码,那么二进制小数无法精确的表示任意小数,比如十进制小数0.2,我们并不能将其准确的表示为一个二进制数,只能增加二进制长度提高表示的精度。如下图所示,二进制表示十进制的0.2只能无限接近,却永远无法精确表示0.2。

IEEE 浮点表示

于是为了在计算机中准确表示浮点数,IEEE指定了一条标准来规范表示浮点数,若不对浮点数的表示作出明确的规定,同一个浮点数的表示就不是唯一的。例如(1.75)10(1.75)10可以表示成1.11×201.11×200.111×210.111×210.0111×220.0111×22等多种形式。

IEEE,电气和电子工程师协会( 全称是Institute of Electrical and Electronics Engineers)是一个国际性的电子技术与信息科学工程师的协会,是目前全球最大的非营利性专业技术学会,IEEE 754 标准是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号。

浮点数的存储格式

IEEE754 标准中规定:

  1. Float 单精度浮点数,用 1 位表示符号,用 8 位表示阶码,用 23 位表示尾数,一共32位。

  2. double 双精度浮点数,用 1 位表示符号,用 11 位表示阶码,52 位表示尾数,一共64位。

  • 阶码:阶码是整数,阶符和 m 位阶码的数值部分共同反映 浮点数的表示范围及小数点的实际位置 ,常用移码或补码表示。IEEE754标准中采用移码的表示形式。

    • 移码:移码(又叫增码)是对 真值补码的符号位取反 ,一般用作浮点数的阶码,引入的目的是便于浮点数运算时的对阶操作。

  • 尾数:数符表示浮点数的符号,尾数的数值部分的位数 n 反映浮点数的 精度 ,常用原码或补码表示。IEEE754标准中采用原码的表示形式

浮点数的表示格式

浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样,在位数有限的情况下,既扩大了数的表示范围,又保持了数的有效精度。

浮点数的真值为:


x=(1)S×2e×Mx=(−1)S×2e×M


其中

  • S代表符号位,取值为0或1

  • e代表指数,E代表阶码

    • e=E127(Float)e=E−127(Float)e=E1023(Double)e=E−1023(Double)

    • E=e1E=e移−1

    • 计算指数e时,对阶码E的计算采用原码的计算方式,因此单精度浮点数(Float)的阶码E为8位的取值范围是0到255。根据规定,阶码E既不全为0(数值0),也不全为1。

    • 所以单精度下8位阶码E的规格化的浮点数阶码范围是1至254,因此指数e的范围则为-126至127。

    • 双精度下11位阶码E的规格化的浮点数阶码范围是1至2046,所以指数e范围为-1022至1023。

  • M代表尾数,决定浮点数的精度,它是一个二进制小数,表示为M=1+fM=1+f

    • 其中ff是n 位的尾数所表示的小数值,满足0f<10≤f<1,其二进制表示为:0.fn1fn2f1f00.fn−1fn−2⋅⋅⋅f1f0 ,也就是二进制小数点在最高有效位的左边。

    • 由于是1+f1+f,所以我们又可以看成1.fn1fn2f1f01.fn−1fn−2⋅⋅⋅f1f0

    • 所以尾数的范围为1M<21≤M<2

由上面的每个对应位置的范围,我们可以求得

  • 单精度最小规格化正数为:x=(1)0×2126×1x=(−1)0×2−126×1

  • 单精度最大规格化正数为:x=(1)0×2127×(2223)x=(−1)0×2127×(2−2−23)

例题

a:

0,01,其中0代表是正数,所以原码和补码相同,01→021+120=10∗21+1∗20=1,所以阶码为+1

1.1001,其中1代表是负数,所以原码为补码末尾减一(1000),按位取反(0111),对应真值为-0.0111=(22+23+24)=716−(2−2+2−3+2−4)=−716

所以a=21×(0.0111)=21×(716)=78a=21×(−0.0111)=21×(−716)=−78

b:

0,01,对应真值为+1

0.01001对应真值为+0.01001=+(22+25)=+932+(2−2+2−5)=+932

所以b=21×(+0.01001)=21×932=916b=21×(+0.01001)=21×932=916

规格化单精度浮点数

为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。

在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数R(这里R=2)的倒数,即|M|1/R|M|≥1/R

0.5规格化

0.5的二进制为0.1

符号位S为0,指数为e=1e=−1(为啥?我猜是因为0.1中1的最高位是-1),规格化后尾数为1.0(为啥?因为M最小为1.0)。

单精度浮点数尾数域共23位,右侧以0补全,尾数域:


M=[000 0000 0000 0000 0000 0000]2M=[000 0000 0000 0000 0000 0000]2


阶码E:


E=[1]1=[0111 1111]21=[0111 1110]2E=[−1]移−1=[0111 1111]2−1=[0111 1110]2


对照单精度浮点数的存储格式,将符号位S,阶码E和尾数域M存放到指定位置,得0.5的机器码:


0.5=[0011 1111 0000 0000 0000 0000 0000 0000]20.5=[0011 1111 0000 0000 0000 0000 0000 0000]2


1.5规格化

1.5的二进制为1.1 符号位为0,指数e=0e=0(为啥?我猜是因为1.1中1的最高位是0),规格化后尾数为1.1(为啥?因为二进制为1.1,所以M就是1.1,如果二进制是1111,M就是1.111)。

尾数域M右侧以0补全,得尾数域:


M=[100 0000 0000 0000 0000 0000]2M=[100 0000 0000 0000 0000 0000]2


阶码E:


E=[]1=[10000000]21=[01111111]2E=[0]移−1=[10000000]2−1=[01111111]2


得1.5的机器码:


1.5=[0011 1111 1100 0000 0000 0000 0000 0000]21.5=[0011 1111 1100 0000 0000 0000 0000 0000]2


5规格化

5的二进制为101

符号位为0,指数为e=2e=2,规格化后尾数为1.01(为啥?因为二进制为101,所以M就是1.01)。

单精度浮点数尾数域共23位,右侧以0补全,尾数域:


M=[010 0000 0000 0000 0000 0000]2M=[010 0000 0000 0000 0000 0000]2


阶码E:


E=[2]1=[1000 0010]21=[1000 0001]2E=[2]移−1=[1000 0010]2−1=[1000 0001]2


得5的机器码:


5=[0100 0000 1010 0000 0000 0000 0000 0000]2

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 

小鱼号 https://www.237fa.com/ 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐