より高速な実装、またはによって提供される関数の適切な近似を探していcmath
ます。
次の機能を高速化する必要があります
pow(x,y)
exp(z*pow(x,y))
ここでz<0
。 x
(-1.0,1.0)からであり、(0.0、5.0)からy
です
ここにいくつかの概算があります:
上記のpowの近似が十分でない場合でも、マシンとコンパイラによっては、指数関数に置き換えることができます。これはより高速な場合があります。
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
もう1つのトリックは、数式の一部のパラメーターが頻繁に変更されない場合です。したがって、たとえばxとyがほぼ一定である場合は、x ^ yを事前に計算して、これを再利用できます。
xとyの可能な値は何ですか?それらが妥当な範囲内にある場合は、いくつかのルックアップテーブルを作成すると役立つ場合があります。
JackW.Crenshawの著書「MathToolkitforReal-TimeProgramming」のルーチンをお勧めします。
これまでの説明からは明らかではない他のより高いレベルの最適化の可能性があるかもしれないので、これらの関数をどのように呼び出しているかを示すためにコードの一部を投稿することもできます。