浮点数

浮点数#

浮点数是与定点数相对的概念,计算机中的定点数约定小数点的位置不变,即人为约定俗成地规定了小数点的位置。例如定点纯整数约定了小数点在数值位的最后。定点纯小数约定了数值位的最高位在小数点后面。

由于计算机字长的限制,当需要表示的数据有很大的数值范围时,他们不能直接用定点小数或者定点整数表示。

浮点数的形式

浮点数由尾数 \(M\) 和阶码 \(E\) 构成。基数为 \(2\) 的数 \(F\) 的浮点数表示为:

\[ F = M * 2^E \]

尾数 \(M\) 必须为小数,用 \(n+1\) 位有符号定点小数表示,可采用原码,补码。阶码 \(E\) 必须为整数,用 \(k+1\) 位有符号定点整数表示,可采用原码,补码,移码。浮点数编码的位数 \(m=(n+1)+(k+1)\)

阶符

阶码数值部分

数符

尾数数值部分

\(1\)

\(k\)

\(1\)

\(n\)

备注

  • 阶码 是整数,其位数 \(k+1\) 决定了浮点数表示的数值范围,也就是决定了数据的大小,或小数点在数据中的真实位置。阶码越长,所能表示的范围越大。

  • 阶符 决定阶码的正负。

  • 尾数 是小数,其位数 \(n+1\) 决定了浮点数的精度,如果尾数采用小数且位数 \(n\) 足够长,则当浮点数运算需要对尾数运算结果舍入时,造成的数据精度损失会比较小。即尾数越长,所能表示的精度越高。尾数的符号表示浮点数的正负。

非规格化浮点数#

当对尾数 \(M\) 只要求是小数而无其他限制时,此时的浮点数被称为 非规格化浮点数。假设阶码和尾数都用补码表示,则非规格化浮点数可表示的范围如下:

阶码和尾数

数值

阶码和尾数

数值

阶码最小值

\(-2^k\)

阶码最大值

\(2^k - 1\)

尾数最小负值

\(-1\)

尾数最大负值

\(-2^{-n}\)

尾数最小正值

\(+2^n\)

尾数最大正值

\(+(1 - 2^{-n})\)

以 8 位数值位,一位符号位的阶码为例子:

由于用补码表示,所以阶码的最小值应该为:1 00000000\(-2^8 = -256\);而阶码的最大值应为:0 11111111\(2^8-1 = 255\)