[Anfängerfrage] Leibnizreihe float/int



  • Hallo zusammen,

    ich habe erst kürzlich mit dem Programmieren angefangen und bin auf etwas gestoßen, was ich mir so nicht erklären kann: In meinem Code(siehe unten), der die Leibniz Reihe abhängig von der Anzahl der zu addierenden Brüche berechnen soll, musste ich die Variable "y" als float definieren damit ein sinnvolles Ergebnis ausgegeben wird. Habe ich "y" als int definiert, kommt unabhängig davon was ich für "n" eingebe immer 1 raus.

    Meine Frage: Woran liegt das? Ich habe doch "y" lediglich als ganzzahligen Nenner eines Bruches eingesetzt, müsste dafür nicht auch int ausreichen? "y" wird ja in dem Sinne an keiner Stelle zu einer nicht natürlichen Zahl.

    PS: Ich hoffe das ist hier das richtige sub-forum 😇

    #include <iostream>
    using namespace std;
    
    int main()
    {float e=1;
    int x=1;
    int n;
    float y=1;
    int z;
    
    cout << "Bitte geben sie die Zahl der in der \n Leibniz Reihe zu addierenden \n Brüche an: \n";
    cin >> n;
    
    
        for(x; x<n; x++)
             {
            y=y+2;
            z=x;
            z = z%2;
            if (z==0)
                    {e=e+1/y;}
            else
                    {e=e-1/y;}
    
            }
    float pi;
    pi = e*4;
    cout << '\n';
    cout << e;
    cout << '\n';
    cout << pi;
    return 0;
    }
    
    


  • das liegt daran, dass du "1/y" rechnest (zeile 21 bzw. 23) und daher eine integer-division durchgeführt wird, die entweder 1 oder 0 (eher 0, sofern y != 1) ergibt.

    edit: achja lösung des problems: "1.0/y" rechnen.😉



  • @soph_yet sagte in [Anfängerfrage] Leibnizreihe float/int:

    e=e+1/y;

    Wenn bei einer Division nur Ganzzahlen beteiligt sind, wird eine Ganzahldivision durchgeführt.

    Bei dir wäre das 1/y.

    Erst danach wird das für die Addition mit e in ein float umgewandelt.

    Wenn du 1.0/y schreibst, ist das 1.0 ein double und es geht wie gewünscht.



  • Nimm besser double statt float



  • Vielen Dank für die schnellen Antworten!

    Ich hatte vergessen zu erwähnen, dass der Code in der geposteten Form funktioniert, die Frage war nur, wieso es mit y als int nicht funktioniert hat.

    @DirkB sagte in [Anfängerfrage] Leibnizreihe float/int:

    @soph_yet sagte in [Anfängerfrage] Leibnizreihe float/int:

    e=e+1/y;

    Wenn bei einer Division nur Ganzzahlen beteiligt sind, wird eine Ganzahldivision durchgeführt.

    Bei dir wäre das 1/y.

    Erst danach wird das für die Addition mit e in ein float umgewandelt.

    Wenn du 1.0/y schreibst, ist das 1.0 ein double und es geht wie gewünscht.

    Das heißt also, bei Divisionen die eine gebrochene Zahl ergeben, müssen Zähler und Nenner auch immer als float angegeben werden?



  • @soph_yet sagte in [Anfängerfrage] Leibnizreihe float/int:

    Ich hatte vergessen zu erwähnen, dass der Code in der geposteten Form funktioniert,

    Weil y ein Fließkommatyp ist.

    die Frage war nur, wieso es mit y als int nicht funktioniert hat.

    Darauf bezog sich die Antwort.

    Das heißt also, bei Divisionen die eine gebrochene Zahl ergeben, müssen Zähler und Nenner auch immer als float angegeben werden?

    Nein.
    Einer reicht als Fließkommatyp aus.



  • Alles klar, ich denke ich hab es verstanden. Vielen Dank!


Anmelden zum Antworten