Skip to content

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。

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:指数,控制数值范围

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。