擅长:python、mysql、java
<p>在这个过程中,您会遇到一个浮点错误。“但我用的是整数!”我听到你说,Python在这行上做浮点除法:</p>
<pre><code>i = n / 2
</code></pre>
<p>看似无害,但改为整数除法解决了问题:</p>
<pre><code>i = n // 2
</code></pre>
<p>在几百个值之后,其中一个除法给出的值比实际整数值小一些ε的错误,然后在调用<code>int(n)</code>时向下舍入</p>
<p>编辑:在仔细检查我的最后一点以找到失败的值之后,我不是很正确。实际情况是,由于Pythons的BigInt实现,整数除法总是精确的,而浮点除法却不是,因为它仍然使用常规浮点数来提高速度。如果您的数字足够大,那么根本没有足够的字节来准确存储数字,这将导致舍入错误</p>
<p>所讨论的数字是<code>19981441939834942</code>。整数除法得到<code>9990720969917471</code>,而浮点除法得到<code>9990720969917472.0</code></p>
<p>这在您使用的任何语言中都是一个问题(除了大多数其他语言不允许您意外地对整数使用浮点除法),因此请确保使用整数除法</p>