値の正弦と余弦の両方を一緒に計算したい(たとえば、回転行列を作成したい)。もちろん、のように次々に別々に計算することもできますa = cos(x); b = sin(x);
が、両方の値が必要な場合により速い方法があるかどうか疑問に思います。
編集: これまでの答えを要約するには:
Vladは、
FSINCOS
両方を計算するasmコマンドがある(FSIN
一人での呼び出しとほぼ同時に)と述べたChiが気づいたように、この最適化はコンパイラーによって既に行われていることがあります(最適化フラグを使用する場合)。
カフェは機能していること、を指摘
sincos
してはsincosf
、おそらく利用可能であり、ちょうど含めることによって直接呼び出すことができますmath.h
ルックアップテーブルを使用する tanasciusのアプローチについては、議論の余地があります。(ただし、私のコンピューターとベンチマークシナリオでは
sincos
、32ビット浮動小数点の場合とほぼ同じ精度の場合よりも3倍速く実行されます。)Joel Goodwinは、非常に優れた精度の非常に高速な近似手法の興味深いアプローチにリンクしています(私にとって、これはテーブルルックアップよりもさらに高速です)
sinx ~ x-x^3/6
してcosx~1-x^2/4
近似値として、あなたは正確さよりも、もっとスピードを気にしている場合。正確さを重視する場合は、どちらのシリーズでも用語を追加できます(en.wikipedia.org/wiki/Taylor_seriesスクロールしてテイラーシリーズをトリガーします)。これは、微分可能な時間である必要な関数を概算する一般的な方法ですn
。したがって、sinとcosが属しているいくつかのより大きな関数がある場合、sin、cosを独立して近似するのではなく、近似すると、速度が大幅に向上します。
x
x_0
x_0
x_0
0