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

Python中x%(1e9+7)与x%(10**9+7)结果不同的原因是什么?

1e9+7 与 10**9+7 取模结果差异的原因

核心本质

两者的类型完全不同:

  • 10 ** 9 + 7 是Python原生整数,值精确等于1000000007,参与所有整数运算都不会丢失精度
  • 1e9 +7 是64位双精度浮点数,虽然表面数值同样是1000000007,但浮点数的存储结构天生存在精度限制

具体出错原因

64位双精度浮点数的有效二进制位数只有53位,只能精确表示绝对值不超过 2^53(约等于9e15)的整数。你这道题的测试用例maxMove达到了50,迭代过程中累计的路径总数ans会远远超过9e15这个阈值,此时ans被隐式转换为浮点数参与运算时,末尾的二进制位会被截断,变成不精确的近似值,基于近似值做取模运算自然会得到错误结果。
就算迭代过程中ans暂时没有超过精度阈值,整数和浮点数取模返回的结果也是浮点数类型,后续累加过程中也会逐步累积精度误差,迭代次数足够多时误差同样会放大到导致结果错误的程度。

避坑建议

所有算法题涉及取模运算时,统一使用整数字面量 10 ** 9 +7 声明模数,绝对不要使用浮点数写法的 1e9+7,避免这类极难排查的精度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:27:03