9.2. math — 数学函数 — Python 文档
9.2. 数学 — 数学函数
该模块始终可用。 它提供对 C 标准定义的数学函数的访问。
这些函数不能用于复数; 如果您需要支持复数,请使用 cmath 模块中的同名函数。 区分支持复数和不支持复数的函数是因为大多数用户不想学习理解复数所需的太多数学知识。 接收异常而不是复数结果允许更早地检测用作参数的意外复数,以便程序员可以首先确定它是如何以及为什么生成的。
该模块提供以下功能。 除非另有明确说明,所有返回值都是浮点数。
9.2.1. 数论和表示函数
- math.ceil(x)
- 以浮点数形式返回 x 的上限,大于或等于 x 的最小整数值。
- math.copysign(x, y)
返回 x,符号为 y。 在支持有符号零的平台上,
copysign(1.0, -0.0)
返回 -1.0。2.6 版中的新功能。
- math.fabs(x)
- 返回 x 的绝对值。
- math.factorial(x)
返回 x 阶乘。 如果 x 不是整数或为负数,则提高
ValueError
。2.6 版中的新功能。
- math.floor(x)
- 将 x 的下限作为浮点数返回,小于或等于 x 的最大整数值。
- math.fmod(x, y)
- 返回
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
在处理整数时是首选。
- math.frexp(x)
- 返回 x 的尾数和指数作为
(m, e)
对。 m 是一个浮点数,而 e 是一个整数,使得x == m * 2**e
正好。 如果 x 为零,则返回(0.0, 0)
,否则返回0.5 <= abs(m) < 1
。 这用于以可移植的方式“挑选”浮点数的内部表示。
- math.fsum(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 食谱以获取准确的浮点求和 。
2.6 版中的新功能。
- math.isinf(x)
检查浮点数 x 是正无穷大还是负无穷大。
2.6 版中的新功能。
- math.isnan(x)
检查浮点数 x 是否是 NaN(不是数字)。 有关 NaN 的更多信息,请参阅 IEEE 754 标准。
2.6 版中的新功能。
- math.ldexp(x, i)
- 返回
x * (2**i)
。 这本质上是函数 frexp() 的反函数。
- math.modf(x)
- 返回 x 的小数部分和整数部分。 两个结果都带有 x 的符号并且是浮点数。
请注意,frexp() 和 modf() 与它们的 C 等效项具有不同的调用/返回模式:它们采用单个参数并返回一对值,而不是返回它们的第二个通过“输出参数”返回值(Python 中没有这样的东西)。
对于 ceil()、floor() 和 modf() 函数,请注意 all 足够大的浮点数大小是精确的整数。 Python 浮点数通常不超过 53 位精度(与平台 C 双精度型相同),在这种情况下,任何带有 abs(x) >= 2**52
的浮点数 x 都必须没有小数位。
9.2.2. 幂函数和对数函数
- math.exp(x)
- 返回
e**x
。
- math.expm1(x)
返回
e**x - 1
。 对于小浮点数 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
2.7 版中的新功能。
- math.log(x[, base])
使用一个参数,返回 x 的自然对数(以 e 为底)。
使用两个参数,返回 x 到给定 base 的对数,计算为
log(x)/log(base)
。2.3 版更改:添加了 base 参数。
- math.log1p(x)
返回 1+x 的自然对数(以 e 为底)。 结果的计算方式对于接近零的 x 是准确的。
2.6 版中的新功能。
- math.log10(x)
- 返回 x 的以 10 为底的对数。 这通常比
log(x, 10)
更准确。
- 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() 函数计算精确的整数幂。在 2.6 版更改:
1**nan
和nan**0
的结果未定义。
- math.sqrt(x)
- 返回 x 的平方根。
9.2.3. 三角函数
- math.acos(x)
- 以弧度为单位返回 x 的反余弦值。
- math.asin(x)
- 以弧度为单位返回 x 的反正弦。
- math.atan(x)
- 以弧度为单位返回 x 的反正切值。
- 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.cos(x)
- 返回 x 弧度的余弦。
- math.hypot(x, y)
- 返回欧几里得范数,
sqrt(x*x + y*y)
。 这是从原点到点(x, y)
的向量长度。
- math.sin(x)
- 返回 x 弧度的正弦值。
- math.tan(x)
- 返回 x 弧度的切线。
9.2.4. 角度转换
- math.degrees(x)
- 将角度 x 从弧度转换为度数。
- math.radians(x)
- 将角度 x 从度数转换为弧度。
9.2.5. 双曲函数
- math.acosh(x)
返回 x 的反双曲余弦。
2.6 版中的新功能。
- math.asinh(x)
返回 x 的反双曲正弦值。
2.6 版中的新功能。
- math.atanh(x)
返回 x 的反双曲正切值。
2.6 版中的新功能。
- math.cosh(x)
- 返回 x 的双曲余弦。
- math.sinh(x)
- 返回 x 的双曲正弦值。
- math.tanh(x)
- 返回 x 的双曲正切值。
9.2.6. 特殊功能
- math.erf(x)
返回 x 处的误差函数。
2.7 版中的新功能。
- math.erfc(x)
返回 x 处的互补误差函数。
2.7 版中的新功能。
- math.gamma(x)
返回 x 处的 Gamma 函数。
2.7 版中的新功能。
- math.lgamma(x)
返回 Gamma 函数在 x 处绝对值的自然对数。
2.7 版中的新功能。
9.2.7. 常数
- math.pi
- 数学常数 π = 3.141592…,达到可用精度。
- math.e
- 数学常数 e = 2.718281…,达到可用精度。