【发布时间】:2021-04-29 18:55:02
【问题描述】:
考虑一下这段代码 sn-p。
>>> n, m = 10011617, 100000000000006340
>>> s = lambda n: n * (n + 1) / 2
>>> s(n)
50116242483153.0
>>> s(n) == int(s(n))
True
>>> m % s(n)
18096246116101.0
>>> m % int(s(n))
18096246116105
如您所见,s(n) 是一个整数(数学上),而m % s(n) != m % int(s(n))。
这可能与 s(n) 或 m 的幕后长篇大论有关吗?即使是这样,为什么s(n) == int(s(n)) 却在我取模时结果不相等?
附注我在 repl.it 中运行了这个
【问题讨论】:
-
使用整数除法
n * (n + 1) / /2而不是n * (n + 1) / 2。浮点数的精度有限。 -
其实——不一样。对于较大的
n,(n+1)//2可能与int((n+1)/2)不同。 -
@JohnColeman 我明白了。那么为什么 python 为
s(n) == int(s(n))返回 True 但在我取模时返回不同的结果? -
因为
==在浮点数和整数之间应用时的实现方式。 -
不是完全重复,但请参阅:Python modulo on floats,因为这是您在
%s(n)中使用的运算符
标签: python-3.x math integer long-integer