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

Python 3中sum_way2函数求和结果不精确的原因咨询

为什么sum_way2计算1到10000000000的和无法得到精确结果?

你实现的两种求和函数代码如下:

def sum_way1(last_num):
    sum_val = 0
    for num in range(1, last_num+1):
        sum_val=sum_val+num
    return sum_val

def sum_way2(last_num):
    return int((last_num*(last_num+1))/2)

当计算1到10000000000的和时,sum_way1得到精确结果50000000005000000000(耗时268.999秒),而sum_way2得到的结果为50000000005000003584(耗时0.000秒),结果不精确。

原因分析

问题出在浮点数的精度限制:

  • 你在sum_way2里用了/除法,这会让表达式last_num*(last_num+1)/2的结果变成float类型(双精度浮点数)。
  • 双精度浮点数的有效位数只有约15-17位,而10000000000*(10000000000+1)的结果是100000000010000000000,这个数有21位,远超过浮点数能精确表示的范围,转换为浮点数时会丢失部分低位信息。
  • 之后再用int()转换回整数,自然就得到了错误的结果。

而sum_way1用整数累加,Python的int类型支持任意精度的整数运算,全程不会有精度丢失,只是循环次数过多导致耗时很长。

修正方法

只需要把/换成Python的整数除法运算符//,让运算全程保持整数类型:

def sum_way2(last_num):
    return last_num * (last_num + 1) // 2

因为last_num和last_num+1是连续整数,必然有一个是偶数,所以用//2能保证整除,既保留了计算效率,又能得到精确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:32:25