Ausgabe von long long
-
Hallo,
Ich wollte eigentlich etwas einfaches zu diesem Problem Testen, jedoch ist die Ausgabe nicht das erwartete Ergebnis.Ich wollte nur den Zeitunterschied wissen was bei der Schleife und bei den Konstanten Funktionen gebracht wird.
#define MAX_NATRUAL_NUM 1100 int main (void) { int j=0,l=0; long long i=0,k=0,zahl=0; int sumOfSquare=0; int squareOfSum=0; //berechung while(j<=MAX_NATRUAL_NUM) { // //i+=j; // 1+2+3+4+...+n k+=j*j; // 1*1+2*2+3*3+4*4+...n*n j++; } //ersetzt i+=j; in schleife i = (MAX_NATRUAL_NUM*MAX_NATRUAL_NUM+MAX_NATRUAL_NUM)/2; sumOfSquare = k; squareOfSum = i*i; // sollte k+=j*j; ersetztn zahl = (MAX_NATRUAL_NUM*(MAX_NATRUAL_NUM+1)*(2*MAX_NATRUAL_NUM+1))/6; // Ausgabe ab ca. MAX_NATRUAL_NUM = 1100 kaputte Ausgabe printf("zahl = %lld\n",zahl); // Ausgabe passt !! printf("k = %lld\n",k); // rest erst mal egal !! system("Pause"); return EXIT_SUCCESS; }
kann mir jemand sagen was ich da Falsch mache?
Danke schon mal für die Hilfe!!Gruß
reisman
-
Alle beteiligten Operanden in dem Ausdruck
(MAX_NATRUAL_NUM*(MAX_NATRUAL_NUM+1)*(2*MAX_NATRUAL_NUM+1))/6
sind vom Typint
, also wird die Berechnung inint
durchgeführt. Du scheinst allerdings einen größeren Wertebereich zu benötigen, so dass es dabei zu Überläufen kommt. Vielleicht solltest du einfach#define MAX_NATURAL_NUM 1100LL
schreiben.
-
OMG
einfacher gehts auch nicht ^^ !!
Danke für die Hilfe
-
Außerdem sollte "squareOfSum" auch 64-Bit Integer sein. Einfach auf die Warnungen vom Compiler achten.