Y値は同じですが、X値が異なる一連のポイントを処理しています。Xを1つ増やしてポイントを確認します。たとえば、Y = 50で、Xは-30から30までの整数です。私のアルゴリズムの一部には、各ポイントから原点までの距離を見つけて、さらに処理を行うことが含まれます。
プロファイリング後、距離計算でのsqrt呼び出しにかなりの時間がかかっていることがわかりました。距離を計算する反復的な方法はありますか?
言い換えると:
効率的に計算したい: r[n] = sqrt(x[n]*x[n] + y*y))
。前の反復からの情報を保存できます。各反復はxをインクリメントすることによって変化するため、x[n] = x[n-1] + 1
。sqrtまたはtrig関数は、各スキャンラインの先頭を除いて遅すぎるため、使用できません。
十分に良好で(0.1%未満の誤差)、導入された誤差が滑らかである限り(事前に計算された近似の表にビニングすることはできません)、近似を使用できます。
追加情報:xとyは常に-150から150までの整数です
明日、いくつかのアイデアを試して、どれが最も速いかに基づいて最良の答えをマークします。
結果
私はいくつかのタイミングをしました
- 距離式:16ミリ秒/反復
- ピートの相互作用ソリューション:8ミリ秒/反復
- wrang-wrang事前計算ソリューション:8ms/反復
私は両方の答えが好きなので、テストが2つの間で決定することを望んでいました。使用するメモリが少ないので、Pete'sを使用します。