浮点数
浮点表示对形如\(V=x\times 2^y\)的有理数进行编码
二进制小数
\(\(d= \sum _{i=-n}^{m}10^{i}\times d_{i}\)\) - 与二进制整数的计算方式相同 - 整数部分:小数点左边的数字的权是10的正幂次 - 小数部分:小数点右边的数字的权是10的负幂次 - 对于这种表示方法,增加二进制表示的长度可以提高表示的精度
IEEE浮点表示
\(\(V=(-1)^s\times M \times 2^E\)\)
- 一个浮点数的组成与其编码方式:
- 符号(Sign):\(s\)决定数的正负
- 1位符号位
- 尾数(Significand):\(M\)是一个二进制小数,其范围是\(1\sim 2-\varepsilon\)或\(0\sim 1-\varepsilon\)
- \(n\)位小数字段编码\(M\):\(frac=f_{n-1}\cdots f_{1}f_{0}\)
- 阶码(Exponent):\(E\)的作用是对浮点数加权,其权重是\(e\)的\(E\)次幂
- \(k\)位阶码字段编码\(E\):\(exp=e_{k-1}\cdots e_{1}e_{0}\)
- 根据\(exp\)的值,被编码的值可以分为三种不同的情况
1. 规格化的值:
- 最普遍的情况:\(exp\)不全为\(1\)或\(0\)
- 阶码的值\(E=e-Bias\)
- 此时阶码字段被解释为以偏置形式表示的有符号整数
- \(Bias=2^{k-1}-1\)
- 单精度的情况下为127
- 双精度的情况下为1023
- 尾数的值\(M=1+f=1.f_{n-1}...f_1f_0\)
- 小数字段\(frac\)被解释为描述小数值\(f=0.f_{n-1}...f_1f_0\)
- 这种方式也被称为隐含的以1开头表示
2. 非规格化的值
- 阶码域全部为0
- 阶码值:\(E=1-Bias\)
- 这样偏置值的设置可以使非规格化值平滑的转换到规格化值
- 尾数值:\(M=f\)
- 用途:
- 提供了一种表示数值0的方法
- 因为在规格化表示中,有\(M\ge 1\)
- 根据符号位的不同,有\(-0\)与\(+0\)
- 方便的表示接近于0的数
3. 特殊值:
[!具体分类] - 规格化的:
- 非规格化的:
- 无穷大:
- NaN(Not a Number):
数字示例
- 一个6位格式:\(k=3\quad n=2\)
- 一个8位浮点数的表示:\(k=4\quad n = 3\)
舍入
- 向偶数舍入的方式:将数字向上或向下舍入,使结果的最低有效数字是偶数
[!向偶数舍入] 在计算一组数的平均值时,使用向上或向下舍入的方式,会使计算一组数的平均值偏高或偏低,向偶数舍入在大多数现实情况中避免了这一统计偏差,因为向上舍入与向下舍入的概率各位50%,在计算平均值时候的影响相对较小
浮点运算
- 由于溢出的存在,在一定情况下,不满足结合律
- \((3.14+1e10)-1e10=0\)
- \(3.14+(1e10-1e10)=3.14\)