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))/6sind vom Typint, also wird die Berechnung inintdurchgefü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 1100LLschreiben.
-
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.