- ベストアンサー
二分法のC++プログラム
- C++プログラムで二分法を実装する方法について
- 二分法による値の計算結果が異常な値になる場合の問題解決方法について
- コード内のcos関数の挙動による異常結果の解釈について
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
cin >> x1; で 変数x1が受け取ることを期待しているのは『数値』ですよ 『cos(pi/2)』などの文字列を与えてもx1は『数値』を受け取りません cos(pi/2) で 『1』をx1が期待していると期待通りの結果は望めませんよ 以下のようにして 入力されたものがどのようになっているのか確認してみましょう #include<iostream> #include<cmath> using namespace std; int main(){ double x1, x2, c; // 変数の初期化 x1 = x2 = -9.8e-8; cout <<"x1:"; cin >> x1; cout <<"x2:"; cin >> x2; // 入力結果 cout << "入力結果 ... x1:" << x1 << " x2:" << x2 << "\n"; while(x2-x1 > 0.00001){ c=(x1+x2)/2; if(cos(x1/2)*cos(c/2)>=0) x1 = c; else x2 = c; } cout << "x=" << x1 <<endl; return 0; } といった具合で ・・・
その他の回答 (3)
- ninoue
- ベストアンサー率52% (1288/2437)
Tacosanさんの指摘されていることに尽きると思います。 簡単なプログラムが自分の思った通りには実行されない場合、 まずデバッガでステップ実行し、関係する変数値、関数値、どのパスを通っているのかを確認する、 或いはプリント文を追加し各変数値、関数値、通っているパス等を確認する 以上をやることはプログラマとしての常識のはずです。 また関数としては何を考えているのですか、確認してください。 これまでの他の人のヒントも考慮すれば解決出来るはずです。 分かってしまえば簡単な事ですから、後は人に頼らず自分で解いてください。 そうしないといつまでも力が付かないと思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
いや, だから, なんで「x1, x2 の値が期待通りになっているかどうか確かめよう」と思わないのかがとっても不思議なんだけど. あなたはその入力でどのような値になることを期待しているのですか? そして, その「期待した値」が入っていることは確認できているのですか?
- Tacosan
- ベストアンサー率23% (3656/15482)
なんで「まず x1, x2 の値を確かめよう」と思わないのか.
補足
#include<iostream> #include<cmath> using namespace std; int main(){ double x1, x2, c; cout <<"x1:"; cin >> x1; cout <<"x2:"; cin >> x2; while(x2-x1 > 0.00001){ c=(x1+x2)/2; if(cos(x1/2)*cos(c/2)>=0) x1 = c; else x2 = c; } cout << "x=" << x1 <<endl; return 0; } 少し間違えてましたが直しても同じでした