保存时间:2026/3/29 16:15:48
浮点数 = 符号位 × 尾数(M) × 基数(通常是2)^指数(E)比如十进制的 123.45 用科学计数法表示是 1.2345 × 10²,对应到二进制浮点数就是 符号位×1.2345(二进制尾数)×2^指数。这里的「尾数」是“整数+小数”的组合(但标准中会统一规格化为“1.xxx”的形式,方便计算),「指数」决定了尾数的“小数点位置”——就像衡量长度,一个用“米”(指数小),一个用“千米”(指数大),必须先统一单位(对齐指数),才能加数值(加尾数)。1.0 × 2¹),一个是“800克”(对应 1.100110011... × 2⁹,因为800克=0.8千克=1.100110011...×2⁻¹),加法要先统一单位(对齐指数)。1.01 × 2³(即十进制的 1.25×8=10)浮点数B:1.101 × 2¹(即十进制的 1.625×2=3.25)指数3 > 指数1,所以B要对齐A的指数:B的指数从1变成3,需要向右移2位(每移1位,指数+1),尾数变成 0.01101(相当于 1.101 ÷ 2²),此时B变为 0.01101 × 2³。1.01 + B的尾数 0.01101 = 1.10101(二进制加法,和十进制小数加法类似,对齐小数点)。此时结果暂时是 1.10101 × 2³。10.xxx),需要把尾数向右移1位,指数+1,确保尾数是“1.xxx”的形式(方便存储和计算)。上面的例子中 1.10101 × 2³ 已经是规格化形式,无需调整,最终结果是 1.10101 × 2³(十进制:1.65625×8=13.25,和10+3.25=13.25一致)。E结果 = E1 + E2(注意要考虑指数的偏移量,比如单精度浮点数偏移量是 127,需先减去偏移量计算真实指数,相加后再加回偏移量,避免溢出)。1.01 × 2³(尾数 1.01)1.101 × 2¹(尾数 1.101)| 操作 | 指数处理 | 尾数处理 | 类比场景 |
|---|---|---|---|
| 加法 | 必须对齐(小指数向大指数看齐) | 对齐后相加 | 不同单位的长度相加(米→千米,先统一单位再相加) |
| 乘法 | 直接相加(无需对齐) | 直接相乘 | 面积计算(长 × 宽,单位直接相乘:米 × 米 = 平方米,指数自然相加) |