math
此模块提供对C标准定义的数学函数的访问。
这些函数不能与复数一起使用;请使用 cmath
模块,如果需要对复数的支持。支持复数的函数和不支持复数的函数之间的区别是因为大多数用户不想学习理解复数所需的数学知识。接收异常而不是复杂的结果允许更早地检测用作参数的意外复数,这样程序员就可以首先确定生成异常的方式和原因。
本模块提供以下功能。除非另有明确说明,否则所有返回值都是浮动的。
数论与表示函数
- math.ceil(x)
返回的上限 x ,大于或等于的最小整数 x .如果 x 不是浮点型,委托给
x.__ceil__()
,应该返回Integral
价值。
- math.comb(n, k)
返回选择的方法数 k 项目来自 n 没有重复和顺序的项目。
计算结果为
n! / (k! * (n - k)!)
什么时候?k <= n
当k > n
.也被称为二项式系数,因为它在多项式展开式中等价于k项的系数。
(1 + x) ** n
.加薪
TypeError
如果其中一个参数不是整数。加薪ValueError
如果其中一个参数为负。3.8 新版功能.
- math.factorial(x)
返回 x 作为整数的阶乘。加薪
ValueError
如果 x 不是整数或是负数。3.9 版后已移除: 接受带整数值的浮点(如
5.0
)已弃用。
- math.floor(x)
返回的值 x ,小于或等于的最大整数 x .如果 x 不是浮点型,委托给
x.__floor__()
,应该返回Integral
价值。
- math.fmod(x, y)
返回
fmod(x, y)
,由平台C库定义。注意python表达式x % y
不能返回相同的结果。C标准的目的是fmod(x, y)
精确地(数学上;精确到无限)等于x - n*y
对于某个整数 n 结果与 x 且幅度小于abs(y)
. Pythonx % y
返回带符号的结果 y 相反,对于float参数,和可能不是完全可计算的。例如,fmod(-1e-100, 1e100)
是-1e-100
但是python的结果-1e-100 % 1e100
是1e100-1e-100
它不能精确地表示为一个浮点数,并且会四舍五入到令人惊讶的1e100
. 因此,函数fmod()
通常在处理浮动时首选,而python的x % y
处理整数时首选。
- math.frexp(x)
返回尾数和指数 x 作为对
(m, e)
. m 是漂浮物 e 是这样一个整数x == m * 2**e
确切地。如果 x 为零,返回(0.0, 0)
,否则0.5 <= abs(m) < 1
. 这用于以可移植的方式“分离”浮点的内部表示。
- math.fsum(iterable)
返回iterable中值的精确浮点和。通过跟踪多个中间部分和避免精度损失:
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0
算法的精度取决于IEEE-754算法的保证,以及舍入模式为半偶数的典型情况。在一些非Windows版本中,底层C库使用扩展精度加法,有时会对中间和进行二次取整,导致其在最低有效位中关闭。
有关进一步讨论和两种替代方法,请参见 ASPN cookbook recipes for accurate floating point summation 。
- math.gcd(*integers)
返回指定整数参数的最大公约数。如果任何参数为非零,则返回值是最大的正整数,它是所有参数的除数。如果所有参数都为零,则返回值为
0
。gcd()
不带参数返回0
。3.5 新版功能.
在 3.9 版更改: 添加了对任意数量参数的支持。以前,只支持两个参数。
- math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
返回
True
如果值 a 和 b 彼此靠近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 --一个检验近似相等性的函数
- math.isqrt(n)
返回非负整数的整数平方根 n . 这是精确平方根的底面 n 或等于最大整数 a 这样的话 a 小于 n .
对于某些应用程序,使用最小整数可能更方便 a 这样的话 n 小于 a 或者换句话说,精确平方根的上限 n . 对于积极的 n ,这可以用
a = 1 + isqrt(n - 1)
.3.8 新版功能.
- math.lcm(*integers)
返回指定整数参数的最小公倍数。如果所有参数都不为零,则返回值是所有参数的倍数的最小正整数。如果任何参数为零,则返回值为
0
.lcm()
无参数返回1
.3.9 新版功能.
- math.ldexp(x, i)
返回
x * (2**i)
. 这本质上是函数的倒数frexp()
.
- math.nextafter(x, y)
返回后面的下一个浮点值 x 朝着 y .
如果 x 等于 y 返回 y .
实例:
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.9 新版功能.
- math.perm(n, k=None)
返回选择的方法数 k 项目来自 n 没有重复和顺序的项目。
计算结果为
n! / (n - k)!
什么时候?k <= n
当k > n
.如果 k 未指定或无,则 k 默认为 n 函数返回
n!
.加薪
TypeError
如果其中一个参数不是整数。加薪ValueError
如果其中一个参数为负。3.8 新版功能.
- math.prod(iterable, *, start=1)
计算输入中所有元素的乘积 可迭代的 .违约 开始 产品价值为
1
.当iterable为空时,返回起始值。此函数专门用于数值,可能会拒绝非数值类型。
3.8 新版功能.
- math.remainder(x, y)
返回 x 关于 y . 为有限 x 和有限非零 y ,这就是区别
x - n*y
在哪里n
是最接近商的精确值的整数x / y
. 如果x / y
正好是两个连续整数的中间,最近的 even 整数用于n
. 余数r = remainder(x, y)
所以总是满足abs(r) <= 0.5 * abs(y)
.特殊情况遵循IEEE754:特别是,
remainder(x, math.inf)
是 x 对于任何有限的 x 和remainder(x, 0)
和remainder(math.inf, x)
引发ValueError
对于任何非南 x . 如果余数运算的结果为零,则该零的符号与 x .在使用IEEE754二进制浮点的平台上,此操作的结果总是完全可表示的:不引入舍入误差。
3.7 新版功能.
- math.trunc(x)
返回
Real
价值 x 截断到Integral
(通常是整数)。代表参加x.__trunc__()
.
- math.ulp(x)
返回浮点的最低有效位的值 x :
如果 x 是NaN(不是数字),返回 x .
如果 x 是负数,返回
ulp(-x)
.如果 x 是正无穷大,返回 x .
如果 x 等于零,返回最小的正数 规格化 可表示浮点数(小于最小正数 归一化 飘浮,
sys.float_info.min
)如果 x 等于最大的正可表示浮点,返回 x ,使第一个浮点小于 x 是
x - ulp(x)
.否则( x 是一个正的有限数),返回 x ,因此第一个浮点数大于 x 是
x + ulp(x)
.
ULP代表“最后的单位”。
也见
math.nextafter()
和sys.float_info.epsilon
.3.9 新版功能.
注意 frexp()
和 modf()
与它们的C等价物相比,具有不同的调用/返回模式:它们接受一个参数并返回一对值,而不是通过“输出参数”返回它们的第二个返回值(在Python中没有这种情况)。
对于 ceil()
, floor()
和 modf()
功能,注意 all 足够大的浮点数是精确的整数。python浮点数的精度通常不超过53位(与平台c double类型相同),在这种情况下,任何浮点数 x 具有 abs(x) >= 2**52
一定没有小数位。
幂函数和对数函数
- math.expm1(x)
返回 e 引发到*x*次方减去1。在这里 e 是自然对数的底。对于小浮球 x ,中的减法
exp(x) - 1
可能导致 significant loss of precision ;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 新版功能.
- math.log2(x)
返回以2为底的对数 x . 这通常比
log(x, 2)
.3.3 新版功能.
参见
int.bit_length()
返回用二进制表示整数所需的位数,不包括符号和前导零。
- math.pow(x, y)
返回
x
的y``次方 . 例外情况应尽可能遵循C99标准的附录F。特别地, ``pow(1.0, x)
和pow(x, 0.0)
总是返回1.0
,即使在x
是零还是NaN。如果两者都是x
和y
是有限的,x
为负,并且y
不是整数,则pow(x, y)
未定义,并引发ValueError
.不像内置的
**
运算符,math.pow()
将其两个参数转换为类型float
. 使用**
或内置pow()
用于计算精确整数幂的函数。
三角函数
- math.atan2(y, x)
返回
atan(y / x)
以弧度表示。结果介于-pi
和pi
. 平面中从原点到点的向量(x, y)
使此角度与正x轴成直角。要点atan2()
这两个输入的符号都是已知的,所以它可以计算出角度的正确象限。例如,atan(1)
和atan2(1, 1)
都是pi/4
,但是atan2(-1, -1)
是-3*pi/4
.
- math.dist(p, q)
返回两点之间的欧氏距离 p 和 q ,每一个作为坐标序列(或可迭代)给出。这两点的尺寸必须相同。
大致相当于:
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
3.8 新版功能.
角度转换
双曲函数
Hyperbolic functions 是基于双曲线而不是圆的三角函数的类似物。
特殊功能
- math.erf(x)
返回 error function 在 x .
这个
erf()
函数可用于计算传统的统计函数,如 cumulative standard normal distribution ::def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0
3.2 新版功能.
- math.erfc(x)
返回互补误差函数 x . 这个 complementary error function 定义为
1.0 - erf(x)
. 它用于 x 其中一个减法将导致 loss of significance 。3.2 新版功能.
- math.gamma(x)
返回 Gamma function 在 x .
3.2 新版功能.
常量
- math.tau
数学常数 τ =6.283185…,达到可用精度。tau是一个等于2的圆常数π 圆的周长与半径之比。要了解更多关于tau的信息,请查看vi hart的视频 Pi is (still) Wrong 开始庆祝 Tau day 吃两倍的馅饼!
3.6 新版功能.
CPython implementation detail: 这个 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的行为仍然是未知的。典型的行为是把所有的NaNs都当作安静的人对待。
参见
- 模块
cmath
其中许多函数的复数版本。