浮点数表示与运算

浮点数的表示也就是运用了科学记数法的表示方法,如下:

浮点数表示与运算

其中,r是浮点数的底(一般都默认为2),E是阶码,M是尾数。可见浮点数的存储除去默认的底数后就仅由阶码和尾数构成。

浮点数表示与运算

阶码E反映浮点数的表示范围和小数点的具体位置,尾数数值部分的位数反映了浮点数的精度。

通常阶码常用补码和移码表示,尾数常用原码和补码表示。

IEEE标准

在IEEE标准中,明确规定了浮点数的格式。

浮点数表示与运算

在IEEE中,数符被提到最前面,阶码部分使用移码表示,尾数数值位使用隐藏位策略的原码(隐藏最高位1)表示。其中阶码的偏置值为127。

上图也表示出了float(短浮点数)和double(长浮点数)的格式。

浮点数表示与运算

IEEE754标准中,规格化短浮点数的真值为:

浮点数表示与运算

长浮点数的真值为:

浮点数表示与运算

规格化浮点数

所谓规格化浮点数,就是规定尾数的最高位必须是一个有效值。从而保证了在能力范围内提高浮点数的精度。

左规:当浮点数运算结果为非规格化时要进行规格化处理,将尾数算术左移一位、阶码减一(基数为2时)的方法称为左规,左规可能要进行多次。

右规:当浮点数运算的结果尾数发生溢出的时候(双符号位出现10或01时),将尾数算术右移一位、阶码加一(基数为2时)的方法称为右规。需要右规时,只需要进行一次。

浮点数表示与运算

规格化表示的尾数表示如下:

  1. 原码规格化后,

    1. 正数为 0.1XX....X的格式,其最大值表示为 0.1111...1,最小值表示为 0.10000...0。

    2. 负数为 1.1XX....X的格式,其最大值表示为 1.1000...0,最小值表示为 1.11111...1。

  2. 补码规格化后,

    1. 正数为 0.1XX....X的格式,其最大值表示为 0.1111...1,最小值表示为 0.10000...0。

    2. 负数为 1.0XX....X的格式,其最大值表示为 1.0111...1,最小值表示为 1.00000...0。

浮点数运算

  1. 先把真值转化为机器数

  2. 对阶

    对阶的目的是使两个操作数的小数点位置对齐,使得两个操作数的阶码相等。先求阶差,然后小阶向大阶看起。

  3. 尾数求和

  4. 规格化

  5. 舍入

    在对阶和右规的时候,可能会导致尾数低位丢失,影响精度。

    1. ”0“舍”1“入法

    2. 恒置”1“法

  6. 溢出判断

    浮点数阶码符号不同表示溢出,且真实符号位和最高位符号位一致。

浮点数表示与运算