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
Du arbeitest ja auch im dezimalsystem, der rechner nicht.
0.3 z.b. ist 0x3FD3333333333333
1.85 ist 0xFD99999999999A
1.6 ist 0xF999999999999A
0.025 ist 0x9999999999999A
d.h. alles zahlen, die in binärer form periodisch werden, d.h. unedlich viele bits bräuchten. Kriegen sie nicht -> rundungsfehler!
mr.escape