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 Typ int , also wird die Berechnung in int 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.


Anmelden zum Antworten