定点表示法:
符号 ‘.’ 表示为二进制的点,点右边的权是2的负幂,左边是2的正幂。
小数的二进制只能表示那些能够写成x* 2 y 2^{y} 2y的数,对于那些其他数并不能准确表示,只能近似的表示。
并且不能有效表示非常大的数。(增加二进制表示长度可以增加精度)
IEEE表示:
- 符号(sign):S决定这个数是负数(S=1)还是正数(S=0)
- 尾数(significand):M是一个二进制小数
- 阶码(exponent):E是对浮点数进行加权,权重为2的E次幂
浮点数的位划分:
- 一个单独的符号位S直接编码符号
- k位的阶码字段exp编码阶码E
- n位的小数字段frac编码尾数M(M是一个二进制小数)
单精度浮点格式:float(s=1,exp=8,frac=23)32位
双精度浮点格式:double(s=1,exp=11,frac=52)64位
根据exp的值,被编码的值可以分成三种情况:
-
规格化的值:
exp的位模式既不全为0,也不全为1。
阶码字段:
被解释为以偏置形式表示的有符号整数(单精度-126~127)(双精度-1022~1023);阶码的值:E=e-Bias。
①e:(是无符号数) e k − 1 e_{k-1} ek−1… e 1 e 0 e_1 e_0 e1e0
②Bias: 2 k − 1 2^{k-1} 2k−1 -1的偏置值
小数字段:
尾数定义为M=1+f(隐含的以1开头的表示) -
非规格化的值:
阶码全0时。
阶码字段:
阶码值是E=1-Bias。
小数字段:
尾数的值是M=f 。
①非规格化数有效的避免了+0.0与-0.0的产生
②对于接近0.0的数逐渐溢出,可能的数分布均匀的接近0.0 -
特殊的值:
阶码全1,小数全0,得到的值表示无穷。s=0正无穷,s=1负无穷 。
阶码全1,小数非0,结果称为“NaN”(不是一个数)。
IEEE表示方式实例一:
假定的8位浮点格式,其中有k=4(阶码位),n=3(小数位),偏置(Bias)为 2 4 − 1 2^{4-1} 24−1-1=7.
e = e k − 1 e=e_{k-1} e=ek−1… e 1 e 0 e_1 e_0 e1e0(无符号数)
E:
- 规格化:E=e-Bias
- 非规格化:E=1-Bias
f = 0. f n − 1 f=0.f_{n-1} f=0.fn−1… f 1 f 0 f_1 f_0 f1f0(二进制值)
M:
- 规格化:M=1+f
- 非规格化:M=f
V = ( − 1 ) s × M × 2 E V=(-1)^{s}×M×2^E V=(−1)s×M×2E
IEEE表示方式实例二:
整数与浮点数之间的转换方式: