python中1到N之间数字求和的问题

当我尝试用 python 计算 1 到 N 之间数字的总和时,我尝试了这段代码

N = int(input())
S = int(N*(N+1)/2)
print(S)

它运行良好,直到我尝试输入 N=641009859 预期结果应该是 = 205446819988104870 但结果是 = 205446819988104864

这里有什么问题?

回答

N * (N + 1) / 2做浮点除法,浮点数不能全部精确表示。做整数除法:N * (N + 1) // 2给你你所期望的 ( 205446819988104870)

补充阅读:每个计算机科学家都应该了解的关于浮点运算的知识

或者,您可以右移一位 ( N >> 1),这与除以二相同,因为二进制系统的工作方式。

(N >> 1) * (N + 1) 给出与以前相同的答案。


以上是python中1到N之间数字求和的问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>