Pythonが平方根を計算する方法を調べたいので、の定義を見つけようとしましたが、math.sqrt()
どこにも見つかりません。_math.c
、、、および他の場所を調べましmathmodule.c
た。
PythonがCの数学関数を使用していることは知っていますが、これらはPythonディストリビューションのどこかにありますか、それとも他の場所のコードにリンクされていますか?MacOSXを使用しています。
アルゴリズムはどこにありmath.sqrt()
ますか?
実装によって異なります。CPythonは、標準Cライブラリの数学関数を使用しています。Jythonは、Javaの数学メソッドを使用している可能性があります。等々。
実際、Pythonは数学関数の実際の実装とは何の関係もありません。これらは、今日のコンピューターで浮動小数点数を表すためにほぼ排他的に使用されているIEEE754に関連しています。
とにかく、CPythonの観点から言えば、そのmath
モジュールはC関数の単なる薄いラッパーです(ページ下部のプルーフリンク)。C関数は、標準Cライブラリの一部として実装されています。通常、OSディストリビューションに含まれており、ソースなしでバイナリ形式で配布される可能性があります。また、多くのマイクロプロセッサにはこれらの操作の一部に特化した命令があり、コンパイラはCライブラリの実装にジャンプするのではなく、それらを利用する可能性があることにも注意してください。
システムの標準Cライブラリで使用されている正確なアルゴリズムをお伝えすることはできません。可能なアルゴリズムのいくつかをここで説明します。
OS Xの特定のケースでは、数学関数はlibSystem.dylib
にありますが、残念ながらオープンソースではありません(Appleのオープンソースサイトで利用できるのはスタブコードだけです)。ただし、興味がある場合は分解できます。現在のシステムでは、たとえば
otool -tvV /usr/lib/system/libsystem_m.dylib
一部のモジュールはPythonではなくCで記述されているため、.pyファイルを見つけることができません。これらのリストについては、以下を使用できます。
import sys
print sys.builtin_module_names
Cで書かれているので、ソースコードで見つける必要があります。ソースがすでにある場合は、modulesディレクトリにあります。
コードを簡単にgrepすると、次のようになります。
http://svn.python.org/view/python/trunk/Modules/cmathmodule.c?revision=76978&view=markup
Pythonで使用されている正確なアルゴリズムがどこにあるかはわかりませんが、これがお役に立てば幸いです。Pythonで平方根を計算する最も簡単な方法は、**(パワー)演算子を使用することです。インデックスでどれだけの作業を行ったかはわかりませんが、平方根は何かを半分の累乗にすることと同じです。したがって、それが真実である場合は、次を使用できます。
print x**0.5
これにより、xの代わりに入力した数値の平方根が出力されます。もちろん、Python 3を使用している場合は、次のように記述する必要があります。
print(x**0.5)
これは、数値の平方根を計算するアルゴリズムを作成する最も簡単な方法です。これは、次のような関数で実装できます。
sqrt(x):
return x**0.5
立方根などの他の根の場合、次のような関数を使用できます。
root(x, root):
return x**root
また、ルート番号を関数に渡す場合は、インデックスの番号を10進数で使用します。次に例を示します。
2:0.5
3:0.33333333(繰り返し)
4:0.25
5:0.2
パターンをご覧いただければ幸いです。また、これがお役に立てば幸いです。:)