Moin,
ich hab hier folgende simple Funktion:
uchar calc_vid(double vt) {
printf("%.03f\\n", vt);
return(((1.85 - vt) / 0.025));
}
Wenn ich diese nun mit 1.600 fuettere (wobei rechnerisch 1.85-1.6 = 0.25, 0.25/0.025 = 10 rauskommen muesste), spuckt sie nur 9 aus.
Wo ist mein (Denk)fehler?
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
Dezimalzahlen können im internen format (auch als double) nicht immer genau abgebildet werden. Bei vorliegender berechnung kommt nun wohl durch rundungsfehler sowas wie 9.9999999999 raus, was auf uchar gerundet eben 9 ergibt. Einfach noch ein "+0.5" hinter die 0.025 setzen und gut.
return(((1.85 - vt) / 0.025 + 0.5));
mr.escape