vis*_*ell 5 python math cpython python-3.7
从Python 3.7的新增功能中,
我们可以看到有新的math.remainder。它说
返回关于y的x的IEEE 754样式余数。对于有限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)提高ValueError任何非NaN的X。如果余数运算的结果为零,则该零将具有与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
Run Code Online (Sandbox Code Playgroud)
所以,区别是,而不是nan和ZeroDivisionError我们会得到ValueError,因为它在文档中说。
所以问题是%和之间有什么区别math.remainder?请问math.remainder还用复数(工作%从它缺乏)?主要优势是什么?
这里是源的math.remainder官方CPython的GitHub库。
返回 x 相对于 y 的 IEEE 754 样式余数。对于有限 x 和有限非零 y,这是差值
x - n*y,其中 n 是最接近商的确切值的整数x / y。如果x / y正好位于两个连续整数的中间,则使用最近的偶数作为 n。因此余数r = remainder(x, y)总是满足abs(r) <= 0.5 * abs(y)。
对于模数,这是m = x - n*y地方n是floor(x/y),如此0 <= m < y而不是abs(r) <= 0.5 * abs(y)对剩余部分。
所以
modulo(2.7, 1) = 0.7
remainder(2.7, 1) = -0.3
Run Code Online (Sandbox Code Playgroud)