浮点数#
浮点数是与定点数相对的概念,计算机中的定点数约定小数点的位置不变,即人为约定俗成地规定了小数点的位置。例如定点纯整数约定了小数点在数值位的最后。定点纯小数约定了数值位的最高位在小数点后面。
由于计算机字长的限制,当需要表示的数据有很大的数值范围时,他们不能直接用定点小数或者定点整数表示。
浮点数的形式
浮点数由尾数 \(M\) 和阶码 \(E\) 构成。基数为 \(2\) 的数 \(F\) 的浮点数表示为:
尾数 \(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\)。