2011-01-13 19 views
3

私はちょうどsine、cosine、sqrtのような関数がcmathの中でどのように実装されているのだろうかと思っています。私はcmathにmath.hが含まれていることを知っています。math.hにはたくさんのものがありますが、これらの関数の背後にある実際の "数学"はどこにありますか?cmath内部の内装

編集:私は、数学関数に関連した有形のソースコードがあるかどうか、または私が行くつもりの最も低いヘッダーであるかどうかにもっと興味があります。

答えて

3

これらの操作の計算は、少なくともx86アーキテクチャではCコードではほとんど行われていません。それはチップ上で行われます。 integration of the 8087 math co-processor into the 486以来、x86ファミリには、正弦、余弦、平方根などの命令がチップ上に用意されています。 This pageに素敵なまとめがあります。

編集:

ちょうどHow does C compute sin() and other math functions?で重複の可能性を発見し、How do Trigonometric functions work?

+0

オンチップの実装では、同じ数式が使用されます。質問はCPUやFPUで行われているのではなく、計算の背後にある「数学」を求めます。 –

+0

私は、ポスターが「実際の数学はどこですか」と書いたときに「実際の数学は何ですか? – EmeryBerger

+0

質問には数学という言葉が引用符で囲まれています。とにかく...それは問題ではありません...それは非常に重要な問題ではなく、Daveが答えやコメントのいずれかから回答を得た場合、目的は提供されます –

0

ことが<cmath><math.h>のかどうか、それらのほとんどは、機能はおそらく唯一のヘッダで宣言されているテイラー級数 http://en.wikipedia.org/wiki/Taylor_series

+1

私は、少なくともオンチップの実装ではそうではないと思います。 – EmeryBerger

+0

これはソフトウェアやハードウェアによって行われるかどうかではなく、これがどのように計算されるかです。オンチップ実装では、同じ数式が使用されます。 CPUやFPUで実行されているかどうかではなく、計算の背後にある "数学"を質問します –

+1

不正です。 http://stackoverflow.com/questions/2284860/how-does-c-compute-sin-and-other-math-functionsに関するコメント、特にCORDICについてのコメントを参照してください。要するに、補間。 – EmeryBerger

1

を使用して行われます。実装は通常、実際の計算に落ち着く前に、あらゆる種類の奇妙なものに対処しなければならないライブラリ関数にあります。良い数学ライブラリを実装する際のいくつかの問題については、Plaugerの若干日付が書かれていますが、まだ興味深い本の'The Standard C Library'を参照してください。

1

私は以前と同じことに興味を持ち、最後にこれらの数学関数のCリファレンス実装を発見しました。これは、コードの単純さと豊富で完全なコメントのためだけでなく、素晴らしいことです。
これらのアルゴリズムは、よく知られているネットワークライブラリnetlibからパッケージ "Freely Distributable Math Library"(fdlibm)として入手できます。
最初にe_sqrt.cを読んでください。それがあなたが求めていたものです。

関連する問題