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!