浮点数表示与运算
浮点数的表示也就是运用了科学记数法的表示方法,如下:
其中,r是浮点数的底(一般都默认为2),E是阶码,M是尾数。可见浮点数的存储除去默认的底数后就仅由阶码和尾数构成。
阶码E反映浮点数的表示范围和小数点的具体位置,尾数数值部分的位数反映了浮点数的精度。
通常阶码常用补码和移码表示,尾数常用原码和补码表示。
IEEE标准
在IEEE标准中,明确规定了浮点数的格式。
在IEEE中,数符被提到最前面,阶码部分使用移码表示,尾数数值位使用隐藏位策略的原码(隐藏最高位1)表示。其中阶码的偏置值为127。
上图也表示出了float(短浮点数)和double(长浮点数)的格式。
IEEE754标准中,规格化短浮点数的真值为:
长浮点数的真值为:
规格化浮点数
所谓规格化浮点数,就是规定尾数的最高位必须是一个有效值。从而保证了在能力范围内提高浮点数的精度。
左规:当浮点数运算结果为非规格化时要进行规格化处理,将尾数算术左移一位、阶码减一(基数为2时)的方法称为左规,左规可能要进行多次。
右规:当浮点数运算的结果尾数发生溢出的时候(双符号位出现10或01时),将尾数算术右移一位、阶码加一(基数为2时)的方法称为右规。需要右规时,只需要进行一次。
规格化表示的尾数表示如下:
原码规格化后,
正数为 0.1XX....X的格式,其最大值表示为 0.1111...1,最小值表示为 0.10000...0。
负数为 1.1XX....X的格式,其最大值表示为 1.1000...0,最小值表示为 1.11111...1。
补码规格化后,
正数为 0.1XX....X的格式,其最大值表示为 0.1111...1,最小值表示为 0.10000...0。
负数为 1.0XX....X的格式,其最大值表示为 1.0111...1,最小值表示为 1.00000...0。
浮点数运算
先把真值转化为机器数
-
对阶
对阶的目的是使两个操作数的小数点位置对齐,使得两个操作数的阶码相等。先求阶差,然后小阶向大阶看起。
尾数求和
规格化
-
舍入
在对阶和右规的时候,可能会导致尾数低位丢失,影响精度。
”0“舍”1“入法
恒置”1“法
-
溢出判断
浮点数阶码符号不同表示溢出,且真实符号位和最高位符号位一致。