Ich habe mit dem babylonischen Quadratwurzel-Algorithmus aus einer Zuweisung in meinem Intro zu Programmierklasse gespielt. Das Programm funktioniert gut und gibt ziemlich genaue Antworten. Meine Frage ergibt sich aus etwas seltsames passiert in der Zeile (während rate! = Ergebnis) Ich schrieb, dass während der Anweisung, um die beiden Begriffe zu überprüfen, und sobald sie identisch sind, brechen Sie die Schleife. Wenn Sie jedoch beispielsweise 50 als Startnummer eingeben, überprüft die Schleife zwei identische Zahlen dreimal, bevor sie ausbricht, statt einmal. Liegt das daran, dass mehr Zahlen im Hintergrund geknackt werden, dass der doppelte Datentyp nicht angezeigt werden kann? Ich weiß Double kann bis zu 15 Dezimalstellen gehen. Ich hoffe, ich formuliere das auf eine verständliche Art und Weise, wenn jemand Klärung braucht, frag einfach. PS- Wenn jemand Tipps hat, um meinen Code sauberer zu machen, lassen Sie es mich bitte wissen, ich versuche zu lernen, wie ich meinen Code so lesbar wie möglich formatiere.C++ - Datentypen und wie sie dargestellt werden
#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;
}
}
Das erste Problem zu „schweben“ ist, dass Sie 'result' verwenden, bevor es initialisiert wird. Das ist * undefiniertes Verhalten *. Das andere Problem ist das, das im Kommentar von @NathanOliver verlinkt ist. –
@ Jaochim Pileborg Ich glaube, ich habe das Ergebnis initialisiert, wo meine Doppelvariablen sind, oder? – Taharix
Auch danke für den Link, ich wusste nicht, wie man dies für ein mögliches Duplikat zu suchen – Taharix