k <= n
时取值为 n! / (k! * (n - k)!)
;当 k > n
时取值为零。也称为二项式系数,因为它等价于 (1 + x)ⁿ
的多项式展开中第 k 项的系数。如果任一参数不为整数则会引发 TypeError。 如果任一参数为负数则会引发 ValueError。3.8 新版功能.
copysign(1.0, -0.0)
返回 -1.0.
5.0
) 的行为已被弃用。
fmod(x, y)
,由平台C库定义。请注意,Python表达式 x % y
可能不会返回相同的结果。C标准的目的是 fmod(x, y)
完全(数学上;到无限精度)等于 x - n*y
对于某个整数 n ,使得结果具有 与 x 相同的符号和小于 abs(y)
的幅度。Python的 x % y
返回带有 y 符号的结果,并且可能不能完全计算浮点参数。 例如, fmod(-1e-100, 1e100)
是 -1e-100
,但Python的 -1e-100 % 1e100
的结果是 1e100-1e-100
,它不能完全表示为浮点数,并且取整为令人惊讶的 1e100
。 出于这个原因,函数 fmod() 在使用浮点数时通常是首选,而Python的 x % y
在使用整数时是首选。
(m, e)
对的形式返回 x 的尾数和指数。 m 是一个浮点数, e 是一个整数,正好是 x == m * 2**e
。 如果 x 为零,则返回 (0.0, 0)
,否则返回 0.5 <= abs(m) < 1
。这用于以可移植方式“分离”浮点数的内部表示。
0
。 不带参数的 gcd()
返回 0
。3.5 新版功能.**在 3.9 版更改: 添加了对任意数量的参数的支持。 之前的版本只支持两个参数。
True
,否则返回 False
。根据给定的绝对和相对容差确定两个值是否被认为是接近的。rel_tol 是相对容差 —— 它是 a 和 b 之间允许的最大差值,相对于 a 或 b 的较大绝对值。例如,要设置5%的容差,请传递 rel_tol=0.05
。默认容差为 1e-09
,确保两个值在大约9位十进制数字内相同。 rel_tol 必须大于零。abs_tol 是最小绝对容差 —— 对于接近零的比较很有用。 abs_tol 必须至少为零。如果没有错误发生,结果将是: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
。IEEE 754特殊值 NaN
, inf
和 -inf
将根据IEEE规则处理。具体来说, NaN
不被认为接近任何其他值,包括 NaN
。 inf
和 -inf
只被认为接近自己。3.5 新版功能.参见 PEP 485 —— 用于测试近似相等的函数
True
,否则返回 False
。 (注意 0.0
被认为 是 有限的。)3.2 新版功能.
True
,否则返回 False
。
True
,否则返回 False
。
a = 1 + isqrt(n - 1)
来计算。3.8 新版功能.
0
。 不带参数的 lcm()
返回 1
。3.9 新版功能.
x * (2**i)
。 这基本上是函数 frexp() 的反函数。
math.nextafter(x, math.inf)
的方向朝上:趋向于正无穷。math.nextafter(x, -math.inf)
的方向朝下:趋向于负无穷。math.nextafter(x, 0.0)
趋向于零。math.nextafter(x, math.copysign(math.inf, x))
趋向于零的反方向。另请参阅 math.ulp()。在 3.12 版更改: 增加了 steps 参数。3.9 新版功能.
k <= n
时取值为 n! / (n - k)!
;当 k > n
时取值为零。如果 k 未指定或为 None,则 k 默认值为 n 并且函数将返回 n!
。如果任一参数不为整数则会引发 TypeError。 如果任一参数为负数则会引发 ValueError。3.8 新版功能.
1
。当可迭代对象为空时,返回起始值。 此函数特别针对数字值使用,并会拒绝非数字类型。3.8 新版功能.
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二进制浮点的平台上,此操作的结果始终可以完全表示:不会引入舍入错误。3.7 新版功能.
sum(itertools.starmap(operator.mul, zip(p, q, strict=True)))
对于浮点数或混合整数/浮点数的输入,中间的乘积和总计值将使用扩展精度来计算。3.12 新版功能.
trunc()
对于正的 x 相当于 floor() ,对于负的 x 相当于 ceil() 。如果 x 不是浮点数,委托给 x.__trunc__ ,它应该返回一个 Integral 值。
ulp(-x)
。如果 x 为正数,则返回 x。如果 x 等于零,则返回 去正规化的 可表示最小正浮点数 (小于 正规化的 最小正浮点数 sys.float_info.min)。如果 x 等于可表示最大正浮点数,则返回 x 的最低有效比特位的值,使得小于 x 的第一个浮点数为 x - ulp(x)
。在其他情况下 (x 是一个有限的正数),则返回 x 的最低有效比特位的值,使得大于 x 的第一个浮点数为 x + ulp(x)
。ULP 即 "Unit in the Last Place" 的缩写。另请参阅 math.nextafter() 和 sys.float_info.epsilon。3.9 新版功能.
注意 frexp() 和 modf() 具有与它们的C等价函数不同的调用/返回模式:它们采用单个参数并返回一对值,而不是通过 '输出形参' 返回它们的第二个返回参数(Python中没有这样的东西)。
对于 ceil() , floor() 和 modf() 函数,请注意 所有 足够大的浮点数都是精确整数。Python浮点数通常不超过53位的精度(与平台C double类型相同),在这种情况下,任何浮点 x 与 abs(x) >= 2**52
必然没有小数位。
math.e ** x
或 pow(math.e, x)
更精确。
exp(x) - 1
中的减法运算可能导致 明显的精度损失; expm1() 函数提供了一种以完整精度计算此数量的办法:>>>>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-05
3.2 新版功能.
log(x)/log(base)
。
log(x, 2)
更准确。3.3 新版功能.参见 int.bit_length() 返回表示二进制整数所需的位数,不包括符号和前导零。
log(x, 10)
更准确。
x
的 y
次幂。 特殊情况将尽可能遵循 IEEE 754 标准。 特别地,pow(1.0, x)
和 pow(x, 0.0)
总是返回 1.0
,即使当 x
为零或 NaN 也是如此。 如果 x
和 y
均为有限值,x
为负数,而 y
不是整数则 pow(x, y)
是未定义的,并将引发 ValueError。与内置的 **
运算符不同, math.pow() 将其参数转换为 float 类型。使用 **
或内置的 pow() 函数来计算精确的整数幂。在 3.11 版更改: 特殊情况 pow(0.0, -inf)
和 pow(-0.0, -inf)
已改为返回 inf
而不是引发 ValueError,以便同 IEEE 754 保持一致。
0
到 pi
之间。
-pi/2
到 pi/2
之间。
-pi/2
到 pi/2
之间。.
atan(y / x)
。结果是在 -pi
和 pi
之间。从原点到点 (x, y)
的平面矢量使该角度与正X轴成正比。 atan2() 的点的两个输入的符号都是已知的,因此它可以计算角度的正确象限。 例如, atan(1)
和 atan2(1, 1)
都是 pi/4
,但 atan2(-1, -1)
是 -3*pi/4
。
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
3.8 新版功能.
sqrt(sum(x**2 for x in coordinates))
。 这是从原点到坐标给定点的向量长度。对于一个二维点 (x, y)
,这等价于使用毕达哥拉斯定义 sqrt(x*x + y*y)
计算一个直角三角形的斜边。在 3.8 版更改: 添加了对 n 维点的支持。 之前的版本只支持二维点。在 3.10 版更改: 改进了算法的精确性,使得最大误差在 1 ulp (最后一位的单位数值) 以下。 更为常见的情况是,结果几乎总是能正确地舍入到 1/2 ulp 范围之内。
双曲函数 是基于双曲线而非圆来对三解函数进行的模拟。
def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0
3.2 新版功能.
1.0 - erf(x)
。 它用于 x 的大值,从其中减去一个会导致 有效位数损失。3.2 新版功能.
-math.inf
。)相当于 float('inf')
的输出。3.5 新版功能.
float('nan')
的输出。 根据 IEEE-754 标准 要求,math.nan
和 float('nan')
不会被视为等于任何其他数值,包括其本身。 要检查一个数字是否为 NaN,请使用 isnan() 函数来测试 NaN 而不能使用 is
或 ==
。 例如:>>>>>> import math >>> math.nan == math.nan False >>> float('nan') == float('nan') False >>> math.isnan(math.nan) True >>> math.isnan(float('nan')) True
在 3.11 版更改: 该常量现在总是可用。3.5 新版功能.
CPython 实现细节: math 模块主要包含围绕平台C数学库函数的简单包装器。特殊情况下的行为在适当情况下遵循C99标准的附录F。当前的实现将引发 ValueError 用于无效操作,如 sqrt(-1.0)
或 log(0.0)
(其中C99附件F建议发出无效操作信号或被零除), 和 OverflowError 用于溢出的结果(例如, exp(1000.0)
)。除非一个或多个输入参数是NaN,否则不会从上述任何函数返回NaN;在这种情况下,大多数函数将返回一个NaN,但是(再次遵循C99附件F)这个规则有一些例外,例如 pow(float('nan'), 0.0)
或 hypot(float('nan'), float('inf'))
。
注意:Python不会将显式NaN与静默NaN区分开来,并且显式NaN的行为仍未明确。典型的行为是将所有NaN视为静默的。