计算机系统第二章——浮点数
二进制小数:底权公式
1011.101=8+2+1+0.5+0.125=11.625
窍门;小数部分写成分数,分母为2^k,k为小数位数,分子为小数部分二进制的值,即101=5/8=0.625
观察:小数点右移一位——乘2
小数点左移一位——除2
二进制小数表示范围——只能精确表示诸如x/2^k的数
其他的值只能近似表示
IEEE浮点数
数学形式:形如科学计数法
符号位s 确定了这个数是负数还是正数,数值0的符号位特殊处理
尾数M是一个二进制小数,通常规定在范围[1.0,2.0)满2就进位,所以不能等于2
阶码E表示2的幂
符号位——阶码——尾数
浮点数:
规格化值:判断条件——阶码exp不全0也不全1
阶码字段被解释为以偏置形式表示的有符号整数:
E=Exp-Bias
E是科学计数法的那个幂次,exp是保存的阶码,是无符号数,放在机器里的
Bias=2^(k-1)-1,其中k为阶码位数
减去Bias实现了对称,因为exp范围为(0到2^k-1)
减了之后E的范围就为(1-2(k-1)到2(k-1))
尾数M是1.xxx
所以为了节省空间我们就在机器中只保存frac:xxx
最小值000…0(M=1.0)
最大值:111…1(M=2.0-&)
单精度存到机器中的形式阶码exp有8位,尾数frac有23位
Float F=15213.0=11101101101101=1.1101101101101x2^13
这就是科学计数法表示,我们要把它变成在机器中存的形式
E=13,M=1.1101101101101
exp=E+Bias=13+2^7-1=140=10001100
frac=11011011011010000000000
所以保存在机器中的形式就为0(符号位)10001100(阶码)11011011011010000000000(尾数)
非规格化值:exp为全0,表示趋近于0的数
科学计数法的E=1-Bias(为了非规格化与规格化的平滑过渡)
M=0.xxx
xxx:frac的位表示
特殊值:
exp为全1
1.frac为全0,表示无穷大,由符号位决定是正无穷还是负无穷
2.frac不为全0,用来表示一些无法表示的数
平滑过渡:从0000到0001 E都是1-Bias
而且尾数M刚好进位从0.111变为1.000
0 1111 000表示正无穷
1 1111 000表示负无穷
0 1111 001表示无法表示的数
最小的非规格化正数:存储的阶码exp为全0,尾数frac=00…001
最大的非规格化正数:存储的阶码exp为全0,尾数frac=11…111
最小的规格化正数:存储的阶码exp为00…001,尾数frac=00…000
最大的规格化正数:存储的阶码exp为11…10 尾数frac=11…111
浮点运算思路:
需要舍入,
基本思路:首先计算精确结果,然后通过舍入得到近似结果
舍入方式:
1.向上舍入
2.向下舍入
3.向0舍入
4.向偶数舍入
各种模式的优点是什么:向偶数舍入能找到最接近的匹配值;其它三种用于计算上界和下界
向偶数舍入:中间值舍入到偶数,避免了四舍五入
使用四舍六入
浮点数乘法:
符号位s1^s2
尾数M1xM2
阶码E:E1+E2
如果M>=2,M右移一位,E=E+1(因为乘2代表左移一位)
如果E超出表示范围,溢出
将M舍入到frac的位数范围
浮点数加法
1.对阶,小阶向大阶对齐(首先要使两个数阶码相同,即小数点的位置对齐,因为阶码是指的尾数要左移多少位)将原来阶码小的数的尾数右移E位,其阶码值加上E,即每次右移一位尾数要阶码加1,则该浮点数的值不变,但精度变差了
2.尾数进行加法运算
3.结果规格化并进行舍入处理(如果尾数不是规格化数,则需要进行规格化处理,并进行舍入)
4.判断溢出
(根据阶码来判断是否溢出)