考慮一下這個(gè)代碼片段。
>>> 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
如您所見(jiàn),s(n)
是一個(gè)整數(shù)(數(shù)學(xué)上),而m % s(n) != m % int(s(n))
。
這可能與s(n)
或m
是一個(gè)長(zhǎng)期的秘密有關(guān)嗎?即使是這樣,s(n) == int(s(n))
為什么當(dāng)我取模時(shí),結(jié)果不相等?
P、 我在repl.it里查過(guò)這個(gè)
在這種特殊情況下,問(wèn)題更多地是由于
m
而不是s(n)
。在計(jì)算m % s(n)
時(shí),由于s(n)
是一個(gè)浮點(diǎn)數(shù),m
被強(qiáng)制為浮點(diǎn)數(shù)。但是--float(m)
失去了精確性。最清楚的方法就是but
注意,
100000000000006336 % 50116242483153 == 18096246116101
,它顯示了神秘值的來(lái)源。