3

math.exp()Pythonで関数を実装する方法を知りたいです。Python ソース コードのどこでmath.exp()定義されていますか?

4

1 に答える 1

13

これは少しトリッキーです。

このmathモジュールは、C モジュールで実装されていますmathmodule.c。そのファイルの最後には、expによって実装されるように定義されmath_expた特定の Python ライブラリ構造があります。

static PyMethodDef math_methods[] = {
    # ...
    {"exp",             math_exp,       METH_O,         math_exp_doc},

しかし、それ自体はマクロmath_expを介して実際に定義されており、ラッパー関数を使用してC ライブラリ関数を呼び出し、エラー処理と型変換を行います。FUNC1math_1exp

FUNC1(exp, exp, 1,
     "exp(x)\n\nReturn e raised to the power of x.")

ただし、C 関数の実装自体は完全にプラットフォームに依存しており、最新のハードウェアでは通常、ハードウェアで処理されます。Python でこれを実装するための出発点を見つけるには、関数のソフトウェア バージョンに目を向ける必要があります。

実装をそのような出発点として使用できますfdlibm。おそらく、expそのライブラリから C での関数実装へのリンクを次に示します。

または、代わりにこの実装を参照できます。

于 2013-03-10T12:48:09.907 に答える