複数指数化の実装
答えて
これはどれくらい速くなければなりませんか?アルゴリズムのサイズにもよりますが、パワー関数はあまりボトルネックであってはいけません。
次のような単純な関数を記述します。
Vector VectorPower(Vector vec1, Vector vec2)
{
assert(vec1.length() == vec2.length());
Vector vecAns(vec1.length());
for(unsigned int i = 0; i < vec1.length(); i++)
{
vecAns[i] = pow(vec1[i], vec2[i]);
}
return vecAns;
}
時間のほとんどは、これはあなたのアプリケーションのために十分に効率的になります。平方根やその他の超越関数を実装していた場合は、最適化を検討することになります。
また、一部のプロセッサは任意の積分力に最適化されていますが、GPUは確かにあります(これはGraphics関連の投稿でなければあまり役に立ちませんが、そのようなタグは付けられていません)。
希望これは、あなたの質問に答える:)
'if'文は多くの点で悪いです:)何らかの間違った条件(おそらくサイズが意味する)をチェックするだけでなく、スローするのではなくリターンしようとし、関数にvoid以外のリターン型があるときは何も返そうとしません。とにかくそれを削除することを考えてください、これはちょうどサンプルコードです。 – unkulunkulu
私はvec1.length()!= vec2.length()、感謝:)アサーションに変更しました:) –
@Shaktal:アサーションでもセミコロンが必要です。 – TonyK
あなたが(それはあなたの性能要件を満たしていることを確認していない)tommathを試みたことがありますか?その多精度整数arithライブラリ!
以下は、データが浮動小数点であることを前提としています。多倍精度整数を使用する場合は、要件を指定してください。
きれいな数字の方法は、もちろんログを最初に取ることです。確かに、結果が有限であっても、部分積は容易にアンダーフロー/オーバーフローする可能性があります。
慣用対応するC++プログラムは次のとおりです。
#include <cmath>
#include <functional>
#include <numeric>
double f(double x, double y)
{
return y * std::log(x);
}
template <typename I, typename J>
double multi_exponentiation(I a0, I an, J b0)
{
return std::exp(std::inner_product(a0, an, b0, 0., std::plus<double>(), f));
}
// Example program
int main()
{
std::vector<double> a, b;
...
double e = multi_exponentiation(a.begin(), a.end(), b.begin());
}
inner_product
を使用する代わりに、ループを書いて、自分では、パフォーマンスが問題であることを知っているたら、あなたはparallel_inner_product
とinner_product
アルゴリズムを置き換えることができるという利点を有しますアルゴリズムを使用する(または自分で書き込む)。
- 1. 指数木の実装
- 2. リアプノフ指数のPython実装
- 3. Androidの複数の実装
- 4. SSEを使用した指数関数の最速実装
- 5. 複数のDLLで別々のクラス実装を実装する
- 6. Web2py - 複数のオプションのチェックボックスの実装
- 7. PHPでの複数のマップの実装
- 8. 複数のファイルでのクラスの実装
- 9. 複数のインターフェイス実装との混乱
- 10. 複数のインターフェイスとオブジェクトインスタンスの実装.Net
- 11. 複数のプラットフォームの実装を扱う
- 12. 複数のUITableViewCell型の実装
- 13. 複数のシュガーORMデータベースの実装
- 14. Structuremap - 複数のインターフェイスの実装
- 15. 複数のランナーのjunit実装
- 16. Autofac - 複数の実装を使用
- 17. Castle Windsor - インターフェイスの複数実装
- 18. ビットマップゲームオブジェクトの複数インスタンスを実装する
- 19. WCFサービス - 複数契約の実装
- 20. 複数選択チェックボックスの実装
- 21. 城ウィンザー3.0、サービスと複数の実装
- 22. 複数精度の基本関数の実装
- 23. Doxygen:複数の実装を持つ単一のAPIを文書化する
- 24. cvc4の実数の対数/指数
- 25. コンクリートクラスの複数のインスタンスと抽象クラスの複数の実装の比較
- 26. ServiceBusTransientErrorDetectionStrategyの指数再試行ポリシーの実装
- 27. 複数の事実を持つルールの実装
- 28. データマットの指数指数指数指数
- 29. 複数のパイプラインを実装してCでコマンドを実行
- 30. この指数アルゴリズムのBig-O複雑さの単純化
これは悪いようではありません。可能であれば、グラフィックベースの場合は、GPU経由でもすばやく実行できます。 –
データの種類を指定してください:浮動小数点数または大きな整数。どちらの場合も、prod(a_i^b_i)を計算する方法は非常に異なります。 –