int::max will nicht
-
Hier der Code und die Frage.
#include <iostream> #include <limits> using namespace std; int main(int argc, char* argv[]) { int maxint = numeric_limits<int>::max(); // Integer max in Int-Typ // Folgende Rechnung zeigt nur Nullen in einer Endlosschleife // Setze ich eine Zahl ein, zb. 2000000000 (Zwei Milliarden) kommen die // richtigen Ergebnisse und die Schleife terminiert /* --> Warum nicht mit maxint? <-- */ for (int rechnung = 1, mp = 1; rechnung < maxint; ++mp) { rechnung *= mp; cout << rechnung << endl; } return 0; }
-
Bei Zahl einsetzen meine ich natürlich die Bedingung in der Schleife. 2 Milliarden anstatt maxint, die ja mit Integer-Maximum initialisiert ist.
long Typ bringt selben Effekt.rechnung < maxint;
GCC + Code Blocks Stable (8.02)
-
Was meinst Du denn, was die größte darstellbare Integerzahl +1 liefert?
-
Dann setz mal was primzahliges ein

Dein Problem ist ein klassischer Overflow. Du wirst es nie erreichen, dass das Ergebnis deiner Rechnung exakt maxint wird, das ist die einzige Möglichkeit dass die Schleife abbricht.
Ich erhalte im übrigen nicht lauter 0-en:./main 1 2 6 24 120 720 5040 40320 362880 3628800 39916800 479001600 1932053504 1278945280 2004310016 2004189184 -288522240 -898433024 109641728 -2102132736 -1195114496 -522715136 862453760 -775946240 2076180480 -1853882368 1484783616 -1375731712 -1241513984 1409286144 738197504 -2147483648 -2147483648 0 0 0 0 0 0 0 0 0 0 0 0 0Am Anfang gibt es also schon noch Ergebnisse.
-
Das war ein krasser Denkfehler von mir, ich wusste das es einen Overflow gibt aber ich habe falsch gedacht.
Ich prüfe nun auf > 0 und die Schleife terminiert.Danke an alle.