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

C++中INT32_MAX乘0.1f与整除10结果不一致的原因是什么

计算结果差异原因分析
  • 先明确基础数值:INT32_MAX是32位有符号整数的最大值,固定为 2^31 - 1 = 2147483647
  • 整数除法的结果逻辑

C++中针对正整数的整数除法默认采用向零取整规则。2147483647除以10的数学计算结果为214748364.7,直接丢弃小数部分后得到整数214748364,也就是res2的输出值,这个结果完全符合整数运算的预期。

  • 单精度浮点数乘法的精度损失是差异核心

float类型为单精度浮点数,仅配备23位有效尾数,最多只能精确表示不超过2^24 = 16777216的整数,INT32_MAX远高于这个阈值,运算过程中会发生两次精度舍入:

  1. 运算INT32_MAX * 0.1f时,首先会把INT32_MAX转换为float类型,此时2147483647无法被float精确存储,会被舍入到最接近的可表示值2147483648
  2. 用舍入后的2147483648乘以0.1f,得到的数学结果为214748364.8,这个值同样超出float的精确表示范围,会被再次舍入为float可表示的最接近值214748368
  3. 最后将该float值转换为int64_t类型时,直接取整数部分就得到了res1的输出结果214748368

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:45:00