math —数学関数—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/math
移動先:案内検索

math —数学関数


このモジュールは、C標準で定義されている数学関数へのアクセスを提供します。

これらの関数は、複素数では使用できません。 複素数のサポートが必要な場合は、 cmath モジュールの同じ名前の関数を使用してください。 ほとんどのユーザーは複素数を理解するために必要なほど多くの数学を学びたくないので、複素数をサポートする関数とサポートしない関数は区別されます。 複素数の結果の代わりに例外を受け取ると、パラメーターとして使用される予期しない複素数を早期に検出できるため、プログラマーは最初にそれが生成された方法と理由を判別できます。

このモジュールでは、次の機能が提供されます。 特に明記されていない限り、すべての戻り値は浮動小数点数です。

数論および表現関数

math.ceil(x)
x の上限を返します。これは x 以上の最小の整数です。 x がfloatでない場合は、x.__ceil__()に委任します。これにより、 Integral 値が返されます。
math.comb(n, k)

n アイテムから k アイテムを選択する方法の数を繰り返しや順序なしで返します。

k <= nの場合はn! / (k! * (n - k)!)と評価され、k > nの場合はゼロと評価されます。

(1 + x) ** nの多項式展開のk項の係数に相当するため、二項係数とも呼ばれます。

いずれかの引数が整数でない場合、 TypeError を発生させます。 いずれかの引数が負の場合、 ValueError を発生させます。

バージョン3.8の新機能。

math.copysign(x, y)
x の大きさ(絶対値)で、 y の符号を持つfloatを返します。 符号付きゼロをサポートするプラットフォームでは、copysign(1.0, -0.0)-1.0 を返します。
math.fabs(x)
x の絶対値を返します。
math.factorial(x)
x 階乗を整数として返します。 x が整数でないか負の場合、 ValueError を発生させます。
math.floor(x)
x のフロアを返します。これは x 以下の最大の整数です。 x がfloatでない場合は、x.__floor__()に委任します。これにより、 Integral 値が返されます。
math.fmod(x, y)
プラットフォームCライブラリで定義されているように、fmod(x, y)を返します。 Python式x % yは同じ結果を返さない場合があることに注意してください。 C標準の目的は、fmod(x, y)が、ある整数 n に対してx - n*yと正確に(数学的に;無限の精度で)等しくなり、結果がと同じ符号を持つようにすることです。 x およびabs(y)未満の大きさ。 Pythonのx % 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 は浮動小数点数であり、 ex == 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ライブラリが拡張精度の加算を使用し、中間合計を2倍に丸めて、最下位ビットでオフになる場合があります。

詳細な説明と2つの代替アプローチについては、 ASPNクックブックのレシピで正確な浮動小数点の合計を参照してください。

math.gcd(a, b)

整数 ab の最大公約数を返します。 a または b のいずれかがゼロ以外の場合、gcd(a, b)の値は、 abの両方を分割する最大の正の整数です。gcd(0, 0)0を返します。

バージョン3.5の新機能。

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

ab の値が近い場合はTrueを返し、そうでない場合はFalseを返します。

2つの値が近いと見なされるかどうかは、指定された絶対公差と相対公差に従って決定されます。

rel_tol は相対許容誤差です。これは、 a の大きい方の絶対値に対する ab の最大許容差です。 b 。 たとえば、許容値を5%に設定するには、rel_tol=0.05を渡します。 デフォルトの許容値は1e-09です。これにより、2つの値が約9桁以内で同じになることが保証されます。 rel_tol はゼロより大きくなければなりません。

abs_tol は最小絶対許容誤差であり、ゼロに近い比較に役立ちます。 abs_tol は少なくともゼロでなければなりません。

エラーが発生しない場合、結果はabs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)になります。

NaNinf、および-infのIEEE754特殊値は、IEEE規則に従って処理されます。 具体的には、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.isqrt(n)

非負の整数 n の整数平方根を返します。 これは、 n の正確な平方根、または a ²≤ n となる最大の整数 a のフロアです。

一部のアプリケーションでは、 na ²、つまり正確な平方根の上限となるような最小の整数 a を使用する方が便利な場合があります。 n のルート。 正の n の場合、これはa = 1 + isqrt(n - 1)を使用して計算できます。

バージョン3.8の新機能。

math.ldexp(x, i)
x * (2**i)を返します。 これは本質的に関数 frexp()の逆です。
math.modf(x)
x の小数部と整数部を返します。 どちらの結果も x の符号が付いており、浮動小数点数です。
math.perm(n, k=None)

n アイテムから k アイテムを選択する方法の数を繰り返しなしで順番に返します。

k <= nの場合はn! / (n - k)!と評価され、k > nの場合はゼロと評価されます。

k が指定されていないか、Noneの場合、 k はデフォルトで n になり、関数はn!を返します。

いずれかの引数が整数でない場合、 TypeError を発生させます。 いずれかの引数が負の場合、 ValueError を発生させます。

バージョン3.8の新機能。

math.prod(iterable, *, start=1)

入力 iterable のすべての要素の積を計算します。 製品のデフォルトの start 値は1です。

iterableが空の場合、開始値を返します。 この関数は、特に数値での使用を目的としており、数値以外の型を拒否する場合があります。

バージョン3.8の新機能。

math.remainder(x, y)

y に関して x のIEEE754スタイルの余りを返します。 有限 x と有限非ゼロ y の場合、これは差x - n*yです。ここで、nの正確な値に最も近い整数です。 X161X] 。 x / yが2つの連続する整数のちょうど中間にある場合、最も近い偶数整数が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)は[非NaN x のX131X] ValueError 。 剰余演算の結果がゼロの場合、そのゼロは x と同じ符号になります。

IEEE 754バイナリ浮動小数点を使用するプラットフォームでは、この操作の結果は常に正確に表現できます。丸め誤差は発生しません。

バージョン3.7の新機能。

math.trunc(x)
RealxIntegral (通常は整数)に切り捨てて返します。 x .__ trunc __()に委任します。

frexp()modf()は、同等のCとは異なる呼び出し/戻りパターンを持っていることに注意してください。これらは、2番目の引数を返すのではなく、単一の引数を取り、値のペアを返します。 '出力パラメータ'を介して値を返します(Pythonにはそのようなものはありません)。

ceil()floor()、および modf()関数の場合、 all 浮動小数点数が十分に大きいことに注意してください。大きさは正確な整数です。 Pythonフロートは通常53ビット以下の精度(プラットフォームCダブルタイプと同じ)を持ちます。この場合、フロート xabs(x) >= 2**52は必ずしも小数ビットを持ちません。


パワー関数と対数関数

math.exp(x)
ex の累乗で返します。ここで、 e = 2.718281…は自然対数の底です。 これは通常、math.e ** xまたはpow(math.e, x)よりも正確です。
math.expm1(x)

e の累乗 x から1を引いた値を返します。 ここで、 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の新機能。

math.log(x[, base])

1つの引数を使用して、 x の自然対数を返します(ベース e に)。

2つの引数を使用して、 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()は、符号と先行ゼロを除いて、整数を2進数で表すために必要なビット数を返します。

math.log10(x)
x の10を底とする対数を返します。 これは通常、log(x, 10)よりも正確です。
math.pow(x, y)

xyの累乗に戻します。 例外的なケースは、可能な限りC99標準の付録「F」に従います。 特に、pow(1.0, x)pow(x, 0.0)は、xがゼロまたはNaNの場合でも、常に1.0を返します。 xyの両方が有限であり、xが負であり、yが整数でない場合、pow(x, y)は未定義であり、発生します。 ValueError

組み込みの**演算子とは異なり、 math.pow()は両方の引数をタイプ float に変換します。 **または組み込みの pow()関数を使用して、正確な整数の累乗を計算します。

math.sqrt(x)
x の平方根を返します。


三角関数

math.acos(x)
x のアークコサインをラジアンで返します。
math.asin(x)
x のアークサインをラジアンで返します。
math.atan(x)
x のアークタンジェントをラジアンで返します。
math.atan2(y, x)
atan(y / x)をラジアンで返します。 結果は-pipiの間にあります。 原点から点(x, y)までの平面内のベクトルは、正のX軸とこの角度をなします。 atan2()のポイントは、両方の入力の符号がわかっているため、角度の正しい象限を計算できることです。 たとえば、atan(1)atan2(1, 1)はどちらもpi/4ですが、atan2(-1, -1)-3*pi/4です。
math.cos(x)
x ラジアンの余弦を返します。
math.dist(p, q)

2点 pq の間のユークリッド距離を返します。それぞれ、座標のシーケンス(または反復可能)として指定されます。 2つのポイントは同じ寸法である必要があります。

ほぼ同等:

sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))

バージョン3.8の新機能。

math.hypot(*coordinates)

ユークリッドノルムsqrt(sum(x**2 for x in coordinates))を返します。 これは、原点から座標で指定された点までのベクトルの長さです。

2次元の点(x, y)の場合、これは、ピタゴラスの定理sqrt(x*x + y*y)を使用して直角三角形の斜辺を計算することと同じです。

バージョン3.8で変更: n次元ポイントのサポートが追加されました。 以前は、2次元の場合のみがサポートされていました。

math.sin(x)
x ラジアンの正弦を返します。
math.tan(x)
x ラジアンの接線を返します。


角度変換

math.degrees(x)
角度 x をラジアンから度に変換します。
math.radians(x)
角度 x を度からラジアンに変換します。


双曲線関数

双曲線関数は、円ではなく双曲線に基づく三角関数の類似体です。

math.acosh(x)
x の逆双曲線コサインを返します。
math.asinh(x)
x の逆双曲線正弦を返します。
math.atanh(x)
x の逆双曲線正接を返します。
math.cosh(x)
x の双曲線コサインを返します。
math.sinh(x)
x の双曲線正弦を返します。
math.tanh(x)
x の双曲線正接を返します。


特殊機能

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 の大きな値に使用され、1から減算すると桁落ちが発生します。

バージョン3.2の新機能。

math.gamma(x)

ガンマ関数x に返します。

バージョン3.2の新機能。

math.lgamma(x)

x でのガンマ関数の絶対値の自然対数を返します。

バージョン3.2の新機能。


定数

math.pi
数学定数π = 3.141592…、利用可能な精度。
math.e
数学定数 e = 2.718281…、利用可能な精度。
math.tau

数学定数τ = 6.283185…、利用可能な精度。 タウは、2 πに等しい円定数であり、円の円周と半径の比率です。 タウの詳細については、ViHartのビデオ Pi is(still)Wrong をチェックし、2倍のパイを食べて Tau day を祝いましょう!

バージョン3.6の新機能。

math.inf

浮動小数点の正の無限大。 (負の無限大の場合は、-math.infを使用します。)float('inf')の出力に相当します。

バージョン3.5の新機能。

math.nan

浮動小数点の「数値ではない」(NaN)値。 float('nan')の出力に相当します。

バージョン3.5の新機能。

も参照してください

モジュール cmath
これらの関数の多くの複素数バージョン。