# 9.2. `math` — 数学函数

本模块始终是可用的。它提供对由 C 标准定义的数学函数访问。

这些函数不能用于复数；如果您需要支持复数，从 `cmath` 使用相同的函数。对复数支持与否的区别取决于此模块的大多数使用者不想学习像理解复数这么深层的数学理论。接收到异常而不是复杂的结果允许意外复杂的数字作为参数使用的早期检测，以便程序员可以确定如何以及为什么它生成放在第一位。

本模块提供以下功能。除明确说明，否则，所有返回值都是浮点型。

## 9.2.1.数理论和表示函数

`math.``ceil`(x)

  Return the ceiling of x, 大于等于 x 的最小整数.如果 x 不是浮点型，委托 `x.__ceil__()` 方法，将会返回 `Integral` （整型）值。

`math.``copysign`(x, y)

  返回x的绝对值大小和y的符号。On platforms that support signed zeros, `copysign(1.0, -0.0)` returns -1.0.

`math.``fabs`(x)

  返回x的绝对值。

`math.``factorial`(x)

  返回x的阶乘。如果x不是整数或者是负数，返回错误`ValueError`。

`math.``floor`(x)

  Return the floor of x, 小于等于 x的最大整数.如果 x 不是浮点型，委托 `x.__floor__()` 方法，将会返回 `Integral` （整型）值。

`math.``fmod`(x, y)

  返回由平台C库定义的`fmod（x， y）`。请注意，Python表达式`x ％ y`可能不会返回相同的结果。The intent of the C standard is that `fmod(x, y)` be exactly (mathematically; to infinite precision) equal to `x - n*y` for some integer n such that the result has the same sign as x and magnitude less than `abs(y)`. Python的`x ％ y`返回具有y符号的结果，可能不能精确计算float参数。例如，`fmod（-1e-100， 1e100）`是`-1e-100`，但是结果Python的`-1e-100 ％ 1e100`是`1e100-1e-100`不能精确地表示为float，并且舍入到令人惊讶的`1e100`。因此，使用浮动时，通常优先使用函数`fmod()`，而Python的`x ％ t6>`在使用整数时是首选。

`math.``frexp`(x)

  将x的尾数和指数作为对`(m, e)`返回。m是浮点，并且e是使得`x == / t5> * 2 ** e`。If x is zero, returns `(0.0, 0)`, otherwise `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食谱的准确浮点和。

`math.``gcd`(a, b)

  返回整数a和b的最大公约数。如果a或b为非零，则`gcd（a， b） / t2>是分割a和b的最大正整数。 `gcd（0， 0）`返回`0`。`

  版本3.5中的新功能。

`math.``isclose`(a, b, *, rel_tol=1e-09, abs_tol=0.0)

  如果a和b的值彼此接近，则返回`True`, 反之则`False`

  根据给定的绝对和相对容限确定两个值是否接近。

  rel_tol是相对容限 - 它是a和b之间的最大允许差值，相对于/ t3>或b。例如，要将公差设置为5％，请传递`rel_tol=0.05`。默认容差为`1e-09`，它确保两个值在大约9个十进制数字内相同。rel_tol必须大于零。

  abs_tol是最小绝对公差 - 对于接近零的比较有用。abs_tol必须至少为零。

  如果没有错误发生，则结果将是：`abs（ab） max（rel_tol t4> max（abs（a）， abs（b））， abs_tol）`。

  将根据IEEE规则处理特殊值`NaN`，`inf`和`-inf`。具体地，不认为`NaN`接近任何其他值，包括`NaN`。`inf`和`-inf`只被认为接近自己。

  版本3.5中的新功能。

  请参见

  PEP 485 - 测试近似相等的函数

`math.``isfinite`(x)

  如果x既不是无穷大也不是NaN，则返回`True`，否则返回`False`。（注意`0.0` 是被认为是有限的。）

  版本3.2中的新功能。

`math.``isinf`(x)

  如果x是正或负无穷大，则返回`True`，否则返回`False`。

`math.``isnan`(x)

  如果x是NaN（不是数字），则返回`True`，否则返回`False`。

`math.``ldexp`(x, i)

  返回`x * （2 ** i）`。这基本上是函数`frexp()`的逆。

`math.``modf`(x)

  返回x的小数和整数部分。这两个结果携带的x标志，也是浮点型。

`math.``trunc`(x)

  将`Real`值x返回到`Integral`（通常为整数）。代表`x.__trunc__()`。

注意，`frexp()`和`modf()`有与它们的C语言不同的调用/返回模式：它们接受一个参数并返回一对值，它们的第二个返回值通过一个'输出参数'（在Python中没有这样的事情）。

对于`ceil()`，`floor()`和`modf()`函数，请注意all足够大的数值是精确的整数。Python浮点通常不会超过53位的精度（与平台C double类型相同），在这种情况下，任何float x与`abs（x） ＆gt； = 2 ** 52`必然没有小数位。

## 9.2.2.幂函数和对数函数

`math.``exp` （ x ）

  返回 `e**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

  版本3.2中的新功能。

`math.``log`(x[, base])

  具有一个参数，返回的x （以e） 的自然对数。

  有两个参数，将x的对数返回给定的基本，计算为`log(x)/log(base)`。

`math.``log1p`(x)

  返回1 + x （底数e） 的自然对数。其结果被计算在某种程度上是准确，可用于x接近于零。

`math.``log2`(x)

  返回x的基2对数。这通常比`log（x， 2）`更准确。

  版本3.3中的新功能。

  请参见

  `int.bit_length()`返回表示二进制整数所需的位数，不包括符号和前导零。

`math.``log10`(x)

  返回x的对数。这通常比`log（x， 10）`更准确。

`math.``pow`(x, y)

  返回`x`的`y`次幂。特殊情况下遵循附件 C99 标准的 ' F' 可能的范围内。具体地，`pow（1.0， x）`和`pow（x，` 始终返回`1.0`，即使`x`为零或NaN。If both `x` and `y` are finite, `x` is negative, and `y` is not an integer then `pow(x, y)` is undefined, and raises `ValueError`.

  与内建`**`操作符不同，`math.pow()`将其参数转换为`float`。使用`**`或内建`pow()`函数计算精确的整数幂。

`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的反双曲余弦值。

`math.``asinh`(x)

  返回x的反双曲正弦值。

`math.``atanh`(x)

  返回x的反双曲正切值。

`math.``cosh`(x)

  返回x的双曲余弦值。

`math.``sinh`(x)

  返回x的双曲正弦值。

`math.``tanh`(x)

  返回x的双曲正切值。

## 9.2.6.特殊的函数

`math.``erf`(x)

  在x返回错误函数。

  `erf()`函数可用于计算传统的统计函数，例如累积标准正态分布：

      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的余误差函数。定义为`1.0 - erf（x）`。它用于x的大值，其中从一个减去将导致重要性损失。

  版本3.2中的新功能。

`math.``gamma`(x)

  返回 x 的 Gamma function （伽马函数）。

  3.2版本新增。

`math.``lgamma`(x)

  返回伽玛函数在x的绝对值的自然对数。

  版本3.2中的新功能。

## 9.2.7.常量

`math.``pi`

  数学常量 π = 3.141592......，到现有的精度。

`math.``e`

  数学常数 e = 2.718281......，到现有的精度。

`math.``inf`

  浮点正无穷大。（对于负无穷大，请使用`-math.inf`。）相当于`float('inf')`的输出。

  版本3.5中的新功能。

`math.``nan`

  浮点数“不是数字”（NaN）值。等效于`float('nan')`的输出。

  版本3.5中的新功能。

CPython实现详细信息： `math`模块主要由围绕平台C math库函数的thin包装器组成。在特殊情况下的行为遵循附件 F 的 C99 标准在适当情况下。当前实现将针对`sqrt(-1.0)`或`log(0.0)`的无效操作引发`ValueError`（其中C99附件F建议发送无效操作（例如，`exp(1000.0)`），或者对于溢出的结果`OverflowError` 除非一个或多个输入参数是NaN，否则NaN不会从上述任何函数返回；在这种情况下，大多数函数将返回NaN，但是（再次遵循C99附件F），该规则有一些例外，例如`pow（float（'nan'）， 0.0）`或`hypot（float（'nan'）， float（'inf'））`。

请注意 Python 还可以不遗余力的区分从安静的 Nan，信号 Nan 信号 Nan 的行为仍未指定。典型行为是对待所有 Nan，好像他们是安静。

请参见

模块`cmath`
  上述函数的复数版本。