9

より高速な実装、またはによって提供される関数の適切な近似を探していcmathます。

次の機能を高速化する必要があります

  1. pow(x,y)
  2. exp(z*pow(x,y))

ここでz<0x(-1.0,1.0)からであり、(0.0、5.0)からyです

4

3 に答える 3

7

ここにいくつかの概算があります:

上記のpowの近似が十分でない場合でも、マシンとコンパイラによっては、指数関数に置き換えることができます。これはより高速な場合があります。

  1. x^y = e^(y*ln(x))
  2. そして結果:e^(z * x^y) = e^(z * e^(y*ln(x)))

もう1つのトリックは、数式の一部のパラメーターが頻繁に変更されない場合です。したがって、たとえばxとyがほぼ一定である場合は、x ^ yを事前に計算して、これを再利用できます。

于 2010-03-25T12:02:39.263 に答える
4

xとyの可能な値は何ですか?それらが妥当な範囲内にある場合は、いくつかのルックアップテーブルを作成すると役立つ場合があります。

于 2010-02-27T11:40:10.830 に答える
1

JackW.Crenshawの著書「MathToolkitforReal-TimeProgramming」のルーチンをお勧めします。

これまでの説明からは明らかではない他のより高いレベルの最適化の可能性があるかもしれないので、これらの関数をどのように呼び出しているかを示すためにコードの一部を投稿することもできます。

于 2010-02-27T14:04:37.667 に答える