Summe von 1/4 bis 1/1048576



  • Hallo !

    Kann leider nich weiter. Habe schon über 3 Stunden versucht und und auf Google gibts auch nichts.

    Die aufgabe lauten:

    Summe der Brüche 1/2 + 1/4 + 1/8 + 1/16 + .... + 1/1048576
    Hier muss mit float gearbeitet werden!
    - Summe der ersten 10000 Glieder der Gleichung
    4 * (1/1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...)

    Hinweis für die letzte Aufgabe:
    Aufteilen der Werte in 2 Summen:
    4 * (1/1 + 1/5 + 1/9 + ...)
    4 * ( - 1/3 - 1/7 - 1/11 - ...)

    Das sind meine bemühungen bis jetzt:

    #include <stdio.h>
    
    int main()
    {
        int x ;
        float summe ;
    
         for( x=1 ; x<=100 ; x = x*2 )
            {
                printf("%d "   , x);
            }
    
    	printf("\n");
    	printf("\n");
        printf("--------------------------------------------------------\n");
        printf("\n");
    
         for( summe=1/2 ; summe<=1/1048576 ; summe = summe + 1/2 )
            {
                printf("%f % "   , y);
            }
    
        printf("\n");
    	printf("\n");
        printf("--------------------------------------------------------\n");
        printf("\n");
    
    	getchar();
        return 0;
    }
    

    Das zwite hab ich keine ahnung wie ich es anfangen soll.

    Danke für eure Hilfe

    Ps.: Super Forum werde es Empfehlen 😉



  • for( summe=1/2 ; summe<=1/1048576 ; summe = summe + 1/2 )
    
    1. 1/2 ist größer als 1/4 ist größer als ... ist größer als 1/1048576.

    2. Um von 1/2 auf 1/4 auf 1/8 zu kommen, kannst du nicht 1/2 addieren. Du musst eine andere Operation wählen.

    3. Du brauchst zwei Variablen. Eine für die einzelnen Brüche 1/2, 1/4 etc. und eine für die Summe.

    4. Bei solchen Brüchen immer den Typ der Zahl mit angeben. Denn 1/2 == 0, da es sich um ints handelt. int durch int ergibt wieder int, d. h. die Nachkommastellen von 1/2 = 0.5 werden einfach abgeschnitten und man erhält 0. Richtig wäre 1.0f/2.0f.


  • Mod

    for( summe=1/2 ; summe<=1/1048576 ; summe = summe + 1/2 )
    

    Na, was ist denn 0.5 + 0.5? Bestimmt nicht 0.25. Du meinst bestimmt was anderes als +.

    Außerdem musst du die Werte natürlich nicht nur ausgeben, sondern auch zusammenzählen.

    Für die zweite Reihe gehst du prinzipiell genauso ran. Da ist es etwas schwieriger das Muster zu erkennen. Tipp: Zähl einfach eine Variable in Zweierschritten und teil dann entsprechend.

    Und etwas, dass du falsch gemacht hast: Du verwendest an vielen Stellen Integerdivision (division ohne Rest), meinst aber sicherlich Fließkommadivision. 1/2 ist in C++ gleich 0. Mindestens eine der beiden Zahlen muss von einem Fließkommatyp sein, zum Beispiel indem du 1./2 schreibst. Das ist dann tatsächlich 0.5. Wenn in der Rechnung nur Integervariablen auftauchen, so musst du diese erst in entsprechende Fließkommatypen umwandeln.



  • es schadet auch nicht, schon mal gehört zu haben, dass man bei gleitkommazahlen(wie float bzw. double sind) zu erst die kleinen werte addieren sollte und am ende die großen...
    wieso das so ist, kannst du auf wikipedia oder der fachliteratur deiner wahl nachlesen (paar anhaltspunkte: genauigkeit, abschneiden von stellen)

    bb



  • Danke auch habe es hingekriegt

    Nochmals Danke



  • unskilled schrieb:

    es schadet auch nicht, schon mal gehört zu haben, dass man bei gleitkommazahlen(wie float bzw. double sind) zu erst die kleinen werte addieren sollte und am ende die großen...
    wieso das so ist, kannst du auf wikipedia oder der fachliteratur deiner wahl nachlesen (paar anhaltspunkte: genauigkeit, abschneiden von stellen)

    bb

    Hmm. Hier würde ich wahrscheinlich gar keine floats nehmen, sondern das mit 2 Integern lösen. Respektive mit einem, wenn sich der Zähler nicht verändert.



  • achja

    einfach mal so als tip

    die summe von 2-x x=i -> ∞
    ergibt 2*2-i

    warum?

    1/4 + 1/8 + 1/16 ...
    + 1/4 + 1/8 + 1/16 ...
    = 1/2 + 1/4 + 1/8 + 1/16 ...
    - (1/4 + 1/8 + 1/16 ...)
    = 1/2



  • Er betrachtet aber eine endliche geometrische Reihe. Genauso könnte man sagen, dass er bei der zweiten Aufgabe Pi ausgeben soll, aber das ist nicht im Sinne der Aufgabe.


Anmelden zum Antworten