5

range 内の float 値の平方根と立方根の 2 つのルックアップ テーブルを作成する最良の方法はどれか疑問に思っています[0.0, 1.0)

私はすでにコードのプロファイリングを行い、これがパフォーマンスの非常に強力なボトルネックであることを確認しました (それぞれ数万分の 1 の値について計算する必要があるため)。次に、ルックアップ テーブルのことを思い出し、パフォーマンスの向上に役立つと考えました。

私の値は小さな範囲にあるので、範囲を次のステップで分割することを考えていました0.0025(それで十分であることを願っています)。

ルックアップ テーブルを簡単に設定できますが、特定のフロート (どのステップでも離散化されない) の正しい値を効率的に取得する方法が必要です。この問題に対する提案やよく知られたアプローチはありますか?

特定するために、私はモバイルプラットフォームで作業しています。

前もって感謝します

4

4 に答える 4

4

(1.0-0.0)/0.0025 = 400 ステップあります

400x1 の行列を作成し、正方形/立方体に必要な浮動小数点数に 400 を掛けてアクセスするだけです。

たとえば、0.0075 の二乗を調べたい場合。0.0075 に 400 を掛けて、マトリックスのインデックスである 3 を取得します。

于 2012-04-18T18:28:26.693 に答える
1
double table_sqrt(double v)
{
    return table[(unsigned int)(v / 0.0025)];
}
于 2012-04-18T18:27:30.540 に答える
0

10 個の異なるストライプに分割するだけでよい場合は、ストライプ間のしきい値に対応する入力を見つけ、展開された二分探索を使用してそれらの 9 つの値に対してテストします。または、しきい値テストが完了する前に追加の計算が必要なため、検索された値が最終結果ではありません。

于 2012-04-18T18:52:28.943 に答える
0

結果が整数値になるため、必要な精度で値を乗算し、ハッシュテーブルを使用できます。

たとえば、 のようなものに浮動小数点キー値を使用するのではなく、0.002小数点以下 3 桁または 4 桁の精度を指定して、 のキー値をまたはに0.002等しくします。次に、スロットのハッシュ テーブル キーに格納されている平方根と立方根の結果の浮動小数点値をすばやく検索できます。20020002000

スロット間の非離散範囲からも値を取得したい場合は、ハッシュテーブルではなく配列またはツリーを使用して、ルート間を補間することで「中間」値を生成できるようにすることができます隣接する 2 つのキー値スロットに格納されます。

于 2012-04-18T18:26:36.997 に答える