1.浮点数介绍
基本格式
首先需要明确的是浮点数的组成,浮点数由阶码和尾数两部分组成
其中阶码又分为阶符和数值部分,阶码J和阶码的位数m共同反应浮点数的表示范围以及小数点的实际位置;尾数由数符和数值部分组成,数符代表浮点数的符号,尾数的数值部分反映浮点数的精度
例:
阶码E反映浮点数的表示范围及小数点的实际位置
尾数M的数值部分反映浮点数的精度
阶码和尾数的表示:
阶码:常用补码或移码表示的定点整数
尾数:常用原码或补码表示的定点小数
浮点数的真值:N=r^E*M,其中r为阶码的底,通常为2
规格化
表示范围
运算结果大于最大正数时称为正上溢,小于绝对值最大负数时称为负上溢,正上溢和负上溢统称上溢。
数据一旦产生上溢,计算机必须中断运算操作,进行溢出处理。
当运算结果在0至最小正数之间时称为正下溢,在0至绝对值最小负数之间时称为负下溢,正下溢和负下溢统称下溢。
数据下溢时,浮点数值趋于零,计算机仅将其当作机器零处理。
IEEE754
浮点数的表示主要用的是IEEE标准
IEEE 754标准的浮点数(除临时浮点数外),是尾数用采取隐藏位策略的原码表示,且阶码用移码表示的浮点数。
以短浮点数为例,最高位为数符位;其后是8位阶码,以2为底,用移码表示,阶码的偏置值为28-1-1= 127;其后23位是原码表示的尾数数值位。
对于规格化的二进制浮点数,数值的最高位总是“1”,为了能使尾数多表示一位有效位,将这个“1”隐含,因此尾数数值实际上是24位。隐含的“1”是一位整数。
在浮点格式中表示的23位尾数是纯小数。
将它规格化后结果为1.1x, 其中整数部分的“1”将不存储在23位尾数内。
因为IEEE754的阶码部分用的是移码表示,所以我们先回顾一下移码的概念,在我们学习原码,反码,补码和移码的时候,对于移码给出的定义是:在补码的基础上将符号位取反(移码只能表示整数),移码真正的定义为:移码=真值-偏置值
在IEEE754标准中,偏置值等于127D=01111111B
需要特别注意的是,对于规格化的二进制浮点数,数值的最高位总是“1”,为了能使尾数多表示一位有效数字,将这个“1”隐含
具体规则
2.浮点数运算
加减
1对阶:使两个操作数的小数点位置对齐,即使得两个数的阶码相等。遵循的原则是小阶向大阶看齐。如果尾数右移,阶码加1,尾数左移,阶码减1
2尾数加减:对阶后的尾数按定点数渐渐规则运算
3规格化:由于IEEE754尾数采用的是补码表示,前面的知识我们知道补码规格化后,符号位与最高数值位一定相反,故当尾数最高数值位与符号位不同时才为规格化形式。这里也分为左规和右规
左规:当尾数为00.0xxx或11.1xxxx时左规,尾数左移一位,和的阶码减1
右规:当尾数求和结果溢出时(尾数为10.xx或01.xx)时右规,右规尾数右移一位,和的阶码加1 注意:高位补位时看双符号位的更高位,因为双符号位的跟高位的符号才是正确的符号
4舍入:在对阶和右规的过程中可能会将尾数的低位丢失从而引起误差,故须用”0“舍”1“入法或恒置”0“法,这里就不再赘述
5判溢出
例
具体例题
左规右规
舍入 在对阶和右规过程中,可能出现尾数末位丢失 引起误差,需考虑舍入 (1)“0 舍 1 入”法 (2)“恒置 1”法 溢出判断 设机器数为补码,尾数为规格化形式,并假设 阶符取 2 位,阶码取 7 位,数符取 2 位,尾数 取 n 位,则该补码在数轴上的表示为