Floating Point¶
约 827 个字 预计阅读时间 4 分钟 共被读过 次
1. 表示实数的方法¶
-
实数的表示:
在计算机中,实数可以使用固定点数或浮点数来表示。二进制中,实数的表达方式可以分为整数部分和小数部分。 -
如何将1011.101用二进制表示:
直接写作1011.101
。- 整数部分(1011) = 1×23+0×22+1×21+1×20=11
- 小数部分(.101) = 1×2−1+0×2−2+1×2^−3=0.625
因此,1011.101表示为11.625。
2. 二进制的左移和右移操作¶
-
Divide by 2 by shifting right:
将二进制数右移一位相当于整数部分除以2。例如:
10112⇒1012=11→5 -
Multiply by 2 by shifting left:
将二进制数左移一位相当于整数部分乘以2。例如:
10112⇐101102=11→22
3. 关于0.111111...的特殊性¶
- 为何0.111111... just below 1.0?
0.111111...是二进制中重复1的小数。- 它表示的是一个趋近于1的极限值:
0.111111...=1−2^−w,其中w是小数点右边的位数。 - 由于2^{-w}会随着w的增大逐渐变小,故当位数无限接近时,结果会非常接近1,但始终小于1。
- 它表示的是一个趋近于1的极限值:
4. 二进制数的限制¶
-
为什么只能精确表示 x / 2^k:
- 二进制表示本质上是以2为底的系统,因此可以精确表示的数是分母为2^k的分数。
- 比如:0.5 = 1 / 2^1,0.25 = 1 / 2^2,而0.3这样的数在二进制中会有无限循环的小数部分,无法精确表示。
-
其它数字的重复位表示:
-
例如:0.1_{10}在二进制中表示为0.0001100110011...,具有循环节
0011
。这导致它无法被精确表示,只能用近似值表示。 -
固定的二进制小数点位置:
-
固定点数的限制在于小数点的位置固定在某一位,无法动态调整范围。这限制了表示的数字范围。
5. 浮点数的引入¶
- 浮点数的原理:
浮点数通过“移动二进制小数点的位置”来表示尽可能大的数字范围和精度。- 浮点数 = (-1)^s M 2^E
- s:符号位(0为正,1为负)
- M:尾数,表示有效数字(归一化形式,通常为1.xxx)
- E:指数,控制数值范围
- 浮点数 = (-1)^s M 2^E
6. IEEE 754 浮点数标准¶
-
特点:
- 提供了对溢出(overflow)和下溢(underflow)的处理规范。
- 定义了精确的舍入方式,使得浮点数运算尽可能接近真实值。
- 但硬件实现复杂且成本较高。
-
标准格式:
-
单精度(32位):1位符号 + 8位指数 + 23位尾数
- 双精度(64位):1位符号 + 11位指数 + 52位尾数
-
归一化值(Normalized Value):
-
当指数不等于全0(0000000...)或全1(1111111...)时,浮点数是归一化的。
- 指数值:E=Exp−Bias
- Bias:偏移量,用于保证指数是正值。
- 单精度:7Bias = 2^{8-1} - 1 = 127
- 双精度:Bias = 2^{11-1} - 1 = 1023
7. 科学计数法的类比¶
-
浮点数可以类比科学计数法:
- 科学计数法:N = M \times 10^e
- 浮点数:N = M \times 2^e
在浮点数中,通过偏移量(Bias)表示指数部分,表面上的数字实际是“指数值-偏移量”。 -
如何计算Bias和范围:
-
假设指数有kk位,则表示范围为:
- 0到2^k-1。
- 去掉全0和全1作为特殊值,剩余有效指数范围为:2^k - 2。
- Bias为有效指数范围的一半:(2^k - 2) / 2。