Berechnung einer Reihe



  • Kann sein, dass scanf den Wert nich richtig eingelesen hat. (Habs gerade bei mir getestet) Bei mir funktionierte es, als ich statt

    scanf ("%i", &n);
    
    scanf ("%LL", &n);
    

    geschrieben hab.

    long long hat mein Compiler nicht akzeptiert, ich hatte stattdessen __int64 verwendet. Aber das dürfte eigentlich das gleiche sein.

    MfG, Jochen



  • HEHE ja ok das habe ich vergessen zu ändern,
    aber das Programm braucht immer noch ewig.

    Wie lange hat es bei dir gebraucht um einen
    das Endergebnis auszugeben?



  • Gar nicht lange. Gibst du eigentlich in jedem Schleifendurchlauf etwas aus? Ausgaben sind immer eine zeitaufwändige Sache. Die if-Abfragen hab ich bei meinem Testprogramm auch rausgeschmissen. Die Berechnung dauerte weniger als 1 sekunde bei n = 550000. Und So überragend ist mein PC auch nicht. Ist ein Durchschnitts-Aldi-PC mit Core 2 Duo @2.6 GHz. (Schon gut 2 Jahre alt).

    MfG, Jochen



  • OK dann stimmt da bei mir mal wieder etwas nicht.

    Ich gebe derzeit nur die 3 IF abfragen aus und sonnst nichts.
    Passt dein Ergebnis denn auch zu der Reihe also Ergebnis 1,233700 oder
    hast du etwas anderes raus bekommen.

    Aber mein Programm läuft derzeit ohne ein ende habe es ca 10mins laufen lassen
    dann abgebrochen wenn ich es etwas überarbeite und aus dem long long z.b.
    ein
    unsigned long int mache kommt ein falsches ergebniss raus.

    Und beim Long Long kommt er keider zu keinem Ende



  • Nimm mal __int64. (oder so ähnlich, kann auch _int64 sein), ist glaube ich auch ein wenig Compileranhängig. So hab ich das bei mir gemacht. Hier mal das Programm, Wie es bei mir aussieht:

    #include <stdio.h>
    
    void main ()
    {
        __int64 n;
        __int64 m;
        __int64 x;
        double s,z;
        printf("Bitte geben sie ihre n ein!\n");
        scanf("%LL",&n);
        s=0;
        for(m= 0; m <= n; m++)
        {   
            z=1;
            x=(2*m+1)*(2*m+1);
            s+=z/x;
        }
    
        printf("Das Ergebnis lautet: %f\n",s);
    }
    

    Das Ergebnis für n=550000 ist bei mir 1.233700



  • Ja da kann ich doch nur Danke
    sagen so läuft das Programm und gibt
    das richtige Ergebniss


  • Mod

    Jochen S. schrieb:

    Nimm mal __int64. (oder so ähnlich, kann auch _int64 sein), ist glaube ich auch ein wenig Compileranhängig.

    Wozu wenig compilerabhängig, wenn es auch compilerunabhängig geht? C99 sollte doch mittlerweile verbreitet sein. Oder anders gesagt: In der stdint.h werden die Datentypen int64_t und uint64_t (und noch eine Menge andere) definiert.



  • Oh, naja, hab das gerade nicht gewusst.
    Ist long long eigentlich kein standard? Mein Compiler hat das nicht akzeptiert.
    (Ist der Borland C++ Compiler 5.5). Oder liegt das daran, dass das ein C++ Compiler ist?



  • Mein Compiler hat long long zwar akzeptier aber das programm hat dann must gebaut ich nutze
    Microsoft Visual C++

    Hmm jetzt habe ich versucht das mit dem int64 in mein Programm einzubauen mit den if abfragen und siehe da es geht wieder nicht .



  • OK alles zurück habe sie grade per hand neu eigefügt ohne copy und paste und jetzt läuft es



  • So jetzt habe ich eine weitere frage, wir sollen dem Programm einen relativen Fehler einbringen/vorgeben.
    und zwar den kehrwert der zahl n somit 1/n
    Aber ich habe leider keine Ahnung was damit gemeint ist



  • Ich kann nur eine Vermutung äußern:

    Eventuell sollt ihr Prüfen, wie groß der relative Fehler ist und schauen, ob dieser größer/kleiner als der Kehrwert ist. Den relativen Fehler berechnest du, indem du das Ergebnis durch den Idealwert (hier 1.2337) teilst.

    Hier ein wenig verauschaulicht:

    int_64t n;
    double ergebnis;
    //...
    
    double kehrwert = 1.0/(double)n; // Kehrwert berechnen:
    
    printf("Kehrwert: %f",kehrwert);
    
    double ideal = 1.2337;
    
    double relfehler = ergebnis/ideal;
    
    printf("Relativer Fehler: %f",relfehler);
    
    // Relativen Fehler mit Kehrwert vergleichen
    

    So könnte das gemeint sein. Sicher weiss ich das aber auch nicht.

    MfG, Jochen



  • Ich danke trotzdem für die Hilfe ich werde das ganze heute fertig machen
    und dann morgen mal nachfragen


Anmelden zum Antworten