プログラムでコサインの法則を使用していますが、コードの遅い点のようです。これは私が持っているコード行です:
Ans = Math.Sqrt(A ^ 2 + B ^ 2 - 2 * A * B * Math.Cos(C - D))
A から D は、呼び出されるたびに変化する double 変数です。この関数の実行には約 2000 ティックかかるようです。(CD) が十分に小さい場合、cos(CD) = 1 - ((CD)^2)/2 を使用できる小角近似を使用して調べました。残念ながら、これは元のコードよりも全体的に遅いことが判明しました。計算を単純化するために使用できるあらゆる種類の関係を見てきましたが、A と C は複雑な方法で関係しており、B と D は同じ方法で関係しています。A と B の間に、または C と D の間に関係はありません。 .
(CD) のすべての値に対してルックアップ関数を使用することを考えましたが、現在の精度は少なくとも有効数字 6 桁であり、それが入力データの精度であるため、そのレベルを維持したいと考えています。つまり、これはつまりルックアップには約 100 万の値があり、これは関数の 1 つのセクションにすぎません。4 つの値 (A、B、C、D) をすべて検索することを考えましたが、それを実装する方法がわかりません。
また、既にこのアプリケーションをマルチスレッド化し、GPGPU の使用を試みました (GPGPU は、GPU メモリの読み込みと読み込みに時間がかかるため、遅くなりました)。
それで、私の質問は、この機能をどのように高速化するかです。
ありがとうございます!