y が定数で x が有効な数値であることが保証されている x^ya を膨大な回数計算する必要がある場合があります。
これは、さまざまなチェックと評価を実行する Pow(double x, double y) よりも効率的に行うにはどうすればよいでしょうか?
y 変換を事前に計算しようとしています。
編集
どちらも実数です。x = 0 ... 4,000,000,000。
y が定数で x が有効な数値であることが保証されている x^ya を膨大な回数計算する必要がある場合があります。
これは、さまざまなチェックと評価を実行する Pow(double x, double y) よりも効率的に行うにはどうすればよいでしょうか?
y 変換を事前に計算しようとしています。
編集
どちらも実数です。x = 0 ... 4,000,000,000。
この等式を覚えておいてください:
x^y = exp(y * ln(x))
したがって、スキップしてとPow
を使用できます。exp
ln
それはいけません。y は定数ですが、x は変数なのでどうしようもありません。私はそれについて心配しません。pow() メソッドは非常に最適化されています。
あなたができる唯一のことは、多くの異なるxの値を事前に計算し、それらが非常に大きくなる可能性がない限り、それらを辞書に保存することです.
ベクトル操作をサポートしていないか、少なくとも適切な並列注釈がないため、ベクトル操作を使用するようにコードを最適化するのに苦労しているため、Java には高速な方法はありません。
おそらく、ネイティブ ライブラリを使用して JNI で呼び出す必要があります。
を知っていればy
、それをより小さな数の乗算に分解し、ベキ乗を計算できるかもしれません。たとえば、y = 6
あなたができるなら
y = 2 * 3
power = pow( pow(x, 3), 2)
ただし、速くなるかどうかはわかりません。