
現在C++であるクラスのインスタンスaのN乗根を求める関数を作成中なのですが、どうしても実行時間が長くなってしまいます。
現在ニュートン法に則って
X(m+1)=((N-1)(Xm)^N+a)/(N*(Xm)^(N-1))
という漸化式を回して変化量が一定値以下になったら終了という関数なのですが、
値によっては累乗計算のところで時間を大幅にロスしてしまうようです。
原因としては累乗計算が同じ数をN回掛けるという単純な仕組みなため、
Nが大きすぎるとループがなかなか終わらないということがわかっています。
もしご存知であれば
1.極力累乗計算を使わないN乗根の求め方
2.計算量の少ない累乗計算の仕方
のどちらかを教えていただけないでしょうか?
なお、クラスを使っている関係上powなどの既存の関数は使えません。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
ああ, そういうことですね.... じゃあ, (非負整数乗に限定して) べき乗を高速化する方法で:
普通は 2乗と乗算を組合せる方法を使うと思います. 「ロシア乗算」などと言われる方法のべき乗版です.
例えば
double pow2(double x, unsigned int n)
{
double ans = 1;
while (n) {
if (n % 2) {
ans *= x;
}
x *= x;
n >>= 1;
}
return ans;
}
でしょうか. 全ての n に対して最適ということではない (n = 15 だと「3乗してから 5乗」の方が速い) のですが, たかだか log n 回の 2乗と同じくたかだか log n 回の乗算からなり, ほぼ最適です.
確認しました
お陰様でほぼ問題のないレベルの速さにすることができました
やはりオーダーがnからlognになると格段に速さが違います
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 a乗根の中にb乗根がありそのまた中にc乗根があるような計算をと呼ぶのでしょうか 4 2022/06/24 09:00
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- 数学 虚数単位:i、この4乗根を求める解答したものの疑問です。 1 2022/10/25 00:43
- 化学 化学のエンタルピ変化を求め方について ある例題では各物質のモール数を換算して計算することもあり、ある 1 2022/06/20 23:22
- Excel(エクセル) ExcelのCOUNTIF関数について COUNTIF関数を使って1の目の累積回数を計算したいのです 3 2023/06/13 22:41
- 数学 『最後の自然数はどんな数か』 3 2023/06/26 20:38
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 数学 8 x^3 - 6 x + 1 3 2022/11/22 16:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入射角反射角
-
65536は2の何乗なのでしょうか?
-
VBAの高速化に関しての質問
-
べき乗の計算が遅い理由
-
C++ で預金計算
-
C言語の関数を分かりやすく説...
-
モジュラス103の計算とは何でし...
-
勤怠管理表を作成しています、...
-
VBAで関数をつくる
-
コマンドプロンプト内で右揃え...
-
VB4でリサージュ図形の面積測定
-
JAVAのプログランミング
-
交通流シミュレータ
-
駅間の距離を求め運賃計算するJ...
-
分数計算で分母と分子を維持す...
-
DLL(VC++で作った)で稼動中の...
-
VBAでベッセル関数を使う方法
-
変化させるセルが変化しない
-
PHPとJavaでSHA256の結果を同じ...
-
パソコン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報