- 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 年才能完成。