<p>感谢@MaartenFabré,我没有注意到细节:</p>
<blockquote>
<h3><code>math.remainder()</code> is the difference <code>x - n*y</code>, where <code>n</code> is the closest integer to the exact value of the quotient <code>x / y</code></h3>
</blockquote>
<p>我构建了Python 3.7:</p>
<pre><code>Python 3.7.0a0 (heads/master:f34c685020, May 8 2017, 15:35:30)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
</code></pre>
<p>以下是不同之处:</p>
<p>零作为除数:</p>
<pre><code>>>> math.remainder(1, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> 1 % 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
</code></pre>
<p>基本数字,其中<code>math.remainder(x, y) < x % y</code></p>
<pre><code>>>> math.remainder(5, 3)
-1.0
>>> 5 % 3
2
</code></pre>
<p>复数:</p>
<pre><code>>>> math.remainder(3j + 2, 4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float
>>> (3j + 2) % 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't mod complex numbers.
</code></pre>
<p>无穷大(<code>math.inf</code>)</p>
<pre><code>>>> math.remainder(3, math.inf)
3.0
>>> 3 % math.inf
3.0
>>> math.remainder(math.inf, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.inf % 3
nan
</code></pre>