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

使用pow函数实现减法操作后输出异常的问题排查

问题根因:pow()的浮点精度缺陷
  • pow()是浮点函数,精度有限:pow(2,i)返回double类型值,而double仅能精确表示15-17位十进制数字。你的ans是1到1e9的和,计算得500000000500000000,这是一个18位的数。当i较小时,2^i的量级远小于ans,此时ans转成double会丢失低数位精度,ans - pow(2,i)在浮点计算中被判定为和原ans相等,赋值回long long后自然看不出变化。
  • 整数递推无精度损失:用long long val = 1; val *= 2;的方式生成2^i,是纯整数运算,long long能容纳到9e18(远大于你的ans和2^60以内的数),每次生成的数值都是精确的,减法操作自然能正确修改ans。
  • 直观例子:比如i=29时,2^29=536870912,但ans转成double后是5.000000005e17,这个浮点值的精度覆盖不到后9位的500000000,所以减去5e8对浮点表示的ans毫无影响;而整数递推得到的536870912是精确值,直接和ans做整数减法,结果完全准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:25:05