私は、プログラミングクラスのイントロでの割り当てからバビロニア平方根アルゴリズムを使用して遊んでいます。 プログラムはうまく動作し、かなり正確な答えを出します。私の質問は何か不思議なことから起きている(推測しながら!=結果) 私はwhile文を使って2つの言葉をチェックし、それらが同じになるとすぐにループを壊します。しかし、スタート・ナンバーとして50を入力すると、1回ではなく2回同じ番号がループの前に3回チェックされます。これは、倍数のデータ型が表示されないため、バックグラウンドでより多くの数値がクランチされているためですか?私は倍数が小数点以下15桁まで上がることができることを知っています。誰かが明確化を必要とするならば、私は理解できる方法でこれを言いたいと思う。 PS-誰かが私のコードクリーナーを手助けするためのヒントを持っているなら、私に教えてください、私はコードをできるだけ読みやすいように書式設定する方法を学ぼうとしています。C++のデータ型とその表現方法
#include <iostream>
using namespace std;
int main()
{
double input, // Users number
guess = 2, // First guess, always 2 at beginning
result, // altered guess, becomes guess 1 when repeated
r; // input divided by guess
int steps = 1, // keeps track of step number, for debugging
loop = 1; // controls continue loop
string error_1 = " Warning: input is negative, please pick a new one";
while (loop == 1)
{
cout << "--Babylonian Square Root Algorithm--" << endl;
cout << "Type a positive number to find its square root: ";
cin >> input;
if (input >= 0)
{
while (guess != result) // test here for within 1%
{
r = input/guess;
result = (guess + r)/2;
// DEBUG
cout << "-------" << endl;
cout << " Step # " << steps << endl;
cout << "-------" << endl;
cout << " R) " << r << endl;
cout << " Guess) " << guess << endl;
cout << " Result) " << result << endl;
steps++;
guess = result;
result = (guess + r)/2;
cout << result << " is the approximate square root of " << input << endl;
//DEBUG
cout << " Steps required: " << steps - 1 << endl;
}
else
{
cout << error_1 << endl;
}
cout << "Continue? (Yes = 1, No = 0)" << endl;
guess = 2;
result = 0;
steps = 1;
cin >> loop;
cout << "------------------------------------------------------" << endl;
}
return 0;
}
}
最初の問題は、それが初期化される前に、あなたは 'result'を使用することであると推測&結果のデータ型を変更します。それは*未定義の動作*です。もう一つの問題は、@ NathanOliverのコメントにリンクされている問題です。 –
@ Jaochim Pileborg私は二重変数がどこにあるのか結果を初期化したと思いますか? – Taharix
また、リンクのおかげで、私は可能性の重複のためにこれを見分ける方法を知らなかった – Taharix