You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IEEE 754单精度浮点数相加时2^(-50)被忽略的原因求解

为什么b + c结果为-1的原因解答

32位IEEE 754单精度浮点数的有效数字部分为24位二进制(1位隐式前导1 + 23位显式存储的尾数),仅能精确表示最高位与最低位差值不超过23个二进制位的数值,这是核心原因。

浮点数相加需要先执行对阶操作,规则为小指数向大指数对齐,将指数更小的数的尾数右移对应位数,待两个数指数一致后再做加法:

  • b = -1对应的IEEE 754表示为1.0 * 2^0,指数为0
  • c = pow(2, -50)对应的表示为1.0 * 2^-50,指数为-50

对阶时需要把c的尾数右移 0 - (-50) = 50 位,才能让它的指数和b保持一致。但单精度浮点数只有23位显式尾数存储空间,右移50位后,c的所有有效二进制位都会被完全移出尾数的存储范围,对阶后的c值等价于0。
因此-1 + 2^-50经过对阶后实际运算等价于-1 + 0,最终得到结果-1。

你可以简单验证:单精度浮点数下,和±1相加不会被舍入丢弃的最小正数为2^-23(约1.19e-7),只要小于该阈值的正数和±1相加,都会因为有效位在对阶时被全部移出而被丢弃,你用到的2^-50远小于该阈值,自然会被舍掉。

内容的提问来源于stack exchange,提问作者Zacryon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:45:04