For-Schleifen Problem



  • Mein Problem ist, ich weis nicht wie ich es hinbekomme,dass er bis zum letzten wert ausgibt. In diesem fall die Null.

    [/code]
    float D=57.60;

    for(D;D>0;){
    printf("%.2f",D);
    D=D-3.40;
    }



  • mit ">= 0" würde auch bei der 0 was ausgegeben werden, aber das funktioniert so wahrscheinlich nicht, da dir die Rechenungenauigkeit die Ausgabe versaut



  • was ist denn der letzte wert? müsste doch irgendwas um 3 sein.

    so oder so solltest du wahrscheinlich wissen, dass zahlen wie 57,6 und 3,4 nicht exakt als float oder double in deinem rechner binär dargestellt werden können. Und fast jede Rechenoperation kommt auch wieder mit einem kleinen Rundungefehler daher, da float und double ja nur eine begrenze zahl an signifikanten Bits speichern. Wichtig. Muss man wissen.


  • Mod

    Hier mal dein Code vernünftig formatiert:

    float D=57.60;
    
    for(D;D>0;){
        printf("%.2f",D);
        D=D-3.40;
    }
    

    Problem hier ist, dass der float (und double) in der üblichen Implementierung auf einer binären Repräsentation beruhen. Daher sind weder 57.6 noch 3.4 exakt darstellbar, da sie einen Faktor 1/5 enthalten. Tatsächlich ist der nächstbeste Wert für 57.6 etwas kleiner als 57.6 und der nächstbeste Wert für 3.4 ein kleines bisschen größer (siehe: http://www.binaryconvert.com/). Dadurch kommt man nicht genau bei 0 an, sondern bei einem etwas kleinerem Wert.



  • ok schön dank an alle .Gut dann wird ich den wert nochmal einzeln ausgeben müssen.


  • Mod

    kscherz schrieb:

    ok schön dank an alle .Gut dann wird ich den wert nochmal einzeln ausgeben müssen.

    Das ist sicher nicht die saubere Lösung. Hast du nicht verstanden, was das Problem ist? Kein einziger deiner berechneten Werte hat den Wert, den du erwartest. Du merkst es bloß nicht, weil die Ziffernzahl bei deiner Ausgabe nicht groß genug eingestellt ist. Das ist ein fundamentales Problem in deinem Programm, nicht etwas, das man durch das Frickeln einer Handkorrektur an das schon inkorrekte Programm behebt.


Anmelden zum Antworten