Python 3.7 math.remainder和%(模运算符)之间的区别

时间:2017-05-08 10:30:38

标签: python math cpython python-3.7

来自What’s New In Python 3.7  我们可以看到有新的math.remainder。它说

  

返回相对于y的IEEE 754样式的x余数。对于有限x和有限非零y,这是差x - n*y,其中n是与商x / y的精确值最接近的整数。如果x / y恰好位于两个连续整数之间,则最近的偶数整数用于n。其余r = remainder(x, y)因此始终满足abs(r) <= 0.5 * abs(y)

     

特殊情况遵循IEEE 754:特别是remainder(x, math.inf)对于任何有限x都是x,而remainder(x, 0)remainder(math.inf, x)对于任何非NaN x都是ValueError。如果余数运算的结果为零,则该零将与x具有相同的符号。

     

在使用IEEE 754二进制浮点的平台上,此操作的结果始终完全可以表示:不会引入舍入错误。

但我们也记得有%符号

  

剩余的x / y

我们也看到操作员有一个注释:

  

不是复杂的数字。而是在适当的情况下使用abs()转换为浮点数。

如果可能的话,我还没有尝试过运行Python 3.7。

但我试过

Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> 100 % math.inf
100.0
>>> math.inf % 100
nan
>>> 100 % 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

差别很大,而不是nanZeroDivisionError,我们会像文档中所说的那样得到ValueError

所以问题是%math.remainder之间有什么区别? math.remainder是否也适用于复数(%缺少)?主要优势是什么?

这是官方CPython github repo的source of math.remainder

0 个答案:

没有答案