Modulo mit double



  • Hallo zusammen,

    trotz Internetrecherche konnte ich folgendes (kleines)Problem nicht lösen:

    Ich habe einen Loop mit einer Laufvariable double i und möchte aller 10 Schritte mit meiner Laufvariable arbeiten.

    #include <fstream>
    #include <sstream>
    #include <cmath>
    using namespace std;
    
    int main(){
    
        double i = 0.0;
    
        while(i <= 3.0){
    
            if ( fmod (i, 0.5) == 0.0 ){
    
                cout <<  i << "\n" ;
            }        
            i = i + 0.05;
        }
    }
    

    Als Ergebnis bekomme ich jedoch nur 0.
    Wieso ist das Ergebnis nicht 0, 0.5, 1.0, 1.5, 2.0, 2,5, 3.0 ?

    Ich würde mich über einen Hinweis sehr freuen.



  • Falsches Unterforum: Deine Frage gehört in den C++ Bereich.



  • Du gehst ja auch in den Ausgabeteil nur, wenn fmod(i, 0.5) den Wert 0 zurück gibt?

    Das ist der Fall bei i = 0.0; Die Genauigkeit von Double lässt in dem Sinne zu wünschen übrig. Ich tippe mal darauf, dass es schon bei der Addition von i mit 0,05 passiert dass der Wert ungenau wird. Denn passe ich den Wert auf 0,5 an funktioniert es sauber.



  • Ja, hab´s.
    Hast recht gehabt, es lag an den Nachkommastellen. Ich musste den Wert nur auf zwei Kommastellen runden. Danke!


Anmelden zum Antworten