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

Python处理大数是否存在精度问题?卡特兰数计算结果偏差排查

卡特兰数求和计算的精度偏差原因分析

你的代码计算卡特兰数乘积的累加和时,输入59出现结果偏差,核心原因是浮点数精度丢失,具体细节如下:

  • 浮点数除法引入误差:卡特兰数本身是整数,但你在计算时使用了/浮点数除法(比如factorial(2*i)/(factorial(i)*factorial(i)))。当n较大时(比如i=59,2i=118的阶乘是超大型整数),float类型的有效位数仅15-17位,无法精确表示这么大的整数,转换为浮点数时会丢失低位信息,导致除法结果出现微小偏差。后续转int()时,这些偏差会被固化,最终累加后形成明显的结果差异。
  • 错误的取整时机:你在每一步计算后就用int()截断,而不是先完成精确的整数运算。卡特兰数的定义C(2n,n)/(n+1)中,组合数C(2n,n)必然能被n+1整除,完全可以用整数除法//完成精确计算,不需要引入浮点数。

修正方案

改用整数运算实现卡特兰数计算,利用Python的大整数特性保证精度,同时直接使用导入的comb函数简化计算:

from math import comb
import sys

def catalan(n):
    # 整数除法保证卡特兰数的精确性
    return comb(2 * n, n) // (n + 1)

total = 0
n = int(sys.stdin.readline())
for i in range(n + 1):
    total += catalan(i) * catalan(n - i)
print(total)

运行修正后的代码,输入59就能得到预期的精确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:15