- Objective:
- Breadcrumb:
# 概念阐释
- 浮点数(Floating-Point Number)是一种**用于表示小数或科学计数法**的数值类型,广泛用于计算机科学和数学计算中。它可以表示**整数、小数、非常大的数和非常小的数**。
- “浮点”指的是小数点的位置是“浮动”的,可以根据指数的变化而移动。所以既可以表示很大的数字,也可以表示很小的数字。
# 实例
## **浮点数的应用**
浮点数在计算机科学中广泛应用,例如:
- **科学计算**:存储天文学、物理学计算中的大数/小数(如 `6.022e23`)。
- **机器学习**:深度学习模型(如 `GPT-4`)的**[[权重]]**和**[[Embedding]]** 都是浮点数数组。
- **计算机图形学**:颜色、坐标、变换矩阵都是浮点数。
- **金融计算**(但要小心精度问题)。
# 相关内容
## **浮点数 vs. 整数**
|类型|例子|解释|
|---|---|---|
|**整数(Integer)**|`1, -5, 100`|没有小数部分的数|
|**浮点数(Floating-Point)**|`1.5, -3.14, 0.0001, 2.5e6`|有小数部分的数|
**区别**:
- 整数只存储完整的数值(如 `5`)。
- 浮点数可以存储小数(如 `5.75`)。
- 浮点数可以存储非常大的数(如 `2.5e6` 表示 2.5×1062.5×106)。
## **计算机中的浮点数表示**
计算机内部使用 **IEEE 754 标准** 来存储浮点数,主要有两种常见精度:
- **单精度(float32,32 位)4 个[[字节Byte]]**
- **双精度(float64,64 位)2 个字节**
**IEEE 754 浮点数存储方式**:
|**部分**|**位数(float32)**|**作用**|
|---|---|---|
|**符号位(Sign)**|1 bit|0 表示正数,1 表示负数|
|**指数(Exponent)**|8 bits|控制小数点的位置|
|**尾数(Mantissa)**|23 bits|存储有效数字|
例如:
- `3.14` 在计算机中的二进制表示:`01000000 01001000 11111010 11100001`
- `-2.5` 在计算机中的二进制表示:`11000000 00100000 00000000 00000000`
计算机不能完美表示所有小数,比如 `0.1` 在二进制中是**无限循环小数**,会导致**浮点数精度误差**:`print(0.1 + 0.2) # 输出 0.30000000000000004`
这就是浮点数计算时可能出现的**精度丢失问题**。
## **重要特性**
1. **精度有限**:计算机不能完美表示所有小数,可能导致 **0.1 + 0.2 ≠ 0.3**。
2. **有正负零(+0 和 -0)**:由于 IEEE 754 的符号位存在 `+0.0` 和 `-0.0`,在某些计算场景下会影响结果。
3. **可能溢出**:
- **上溢(overflow)**:数值过大,例如 `1e308 * 10` 变成 `inf`(无穷大)。
- **下溢(underflow)**:数值太小,例如 `1e-324 / 10` 变成 `0`。
4. **精度问题**:使用 `decimal` 或 `numpy.float128` 可以提高精度。
## **总结**
✅ **浮点数是计算机用来存储小数、极大数或极小数的数值类型**
✅ **浮点数的名称来源于科学计数法,小数点的位置可以浮动**
✅ **计算机采用 IEEE 754 标准,使用二进制存储浮点数**
✅ **浮点数计算可能有精度误差,可用 `decimal` 或 `fractions` 解决**
✅ **浮点数广泛应用于科学计算、机器学习、图形学等领域**
# 参考资料
- [CwG-embedding&浮点数](https://chatgpt.com/share/679b25da-7ac8-8002-b37e-ea3e2469d975)
- [花费 100 亿美元打造,史上最强 AI 芯片到底强在哪?](https://readwise.io/reader/shared/01hsgbvbzyp7eesnh7drms2d9a)
目前 OpenAI 最大的模型已经有 1.8T(万亿)参数,需要吞吐数十亿 token(字符串),即使是一块 PetaFLOP(每秒千万亿次)级的 GPU,训练这样大的模型也需要 1000 年才能完成。