- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:べき乗の計算が遅い理由)
べき乗の計算が遅い理由とアルゴリズムの違い
このQ&Aのポイント
- べき乗の計算速度について調査しました。VBAを使用した際に、x ^ 2とx * xで計算結果は同じですが、x * xの方が6倍ほど速くなることが分かりました。
- アルゴリズムの違いにより、x ^ 2とx * xの計算速度には差があります。具体的なアルゴリズムについても調査しました。
- べき乗の計算速度を上げるためのコツや他のプログラミング言語での適用についても探求しました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
昔からBASICは整数演算に比べて関数演算が遅いのが普通です。 関数演算は処理が複雑なものが多く、時間がかかるのに対して、整数演算は単純だからでしょう。 関数演算の場合は機械語では、確か、スタックにローカルバッファを作り、引数をスタック上に積み上げてから、関数の演算処理系を呼び出すという方法を使っているはずですし、関数の演算はサブルーチンの呼び出しがリカーシブ(再帰的)になっていたりなど、時間がかかる複雑な計算をおこなっている例が多いので、処理が遅くなります。 X=X*Xという公式は、機械語では1命令でも実行出来ますが、X=X^2という公式では、Xという変数をべき乗する数だけ演算を繰り返す処理系を使う必要があるので、処理が遅くなるはずです。 BASICを高速化するには、関数を出来るだけ使わずに整数演算に置き換えて計算させると速くなります。BASICの高速化に関しては以下のリンクを参照してみてください。
その他の回答 (2)
- m-take0220
- ベストアンサー率60% (477/782)
回答No.3
この現象は、別の開発言語でも起こります。 C/C++で掛け算を使用した場合とべき乗の関数powerを使用した場合の速度を比較したことがあります。 おそらく、べき乗の計算には級数展開が使用されているので、掛け算の数倍の計算が必要になるはずです。
- notnot
- ベストアンサー率47% (4900/10358)
回答No.1
y = i ^ 2 * j ^ 2 は、内部的に、 y = Exp(Log(i) * 2) * Exp(Log(j) * 2) を計算している物と思います。 直接後者を書くより、前者から後者に変換する処理が入るのでさらに遅いようです。