Herakles
Profifragensteller
Moin!
Wenn ich eine float-variable inkrementiere, geschieht das ab einem bestimmten Punkt nicht sauber. Das Beweisprogramm ist denkbar einfach:
Der Output gibt ab einem gewissen Punkt ein nicht erwartetes Ergebnis:
Noch viel lustiger wird es, wenn man die Schleife beträchlich länger laufen lässt:
Dass sich mit sowas nicht arbeiten lässt, dürfte einleuchten. Woher kommt dieser Fehler und wie kann man ihn umgehen oder beheben? Ist das ein bekanntes Phänomen?
[edit]
Wenn ich als Varibalentyp einen "double" nehme, funktioniert's...
[/edit]
Grüße
Herakles
Wenn ich eine float-variable inkrementiere, geschieht das ab einem bestimmten Punkt nicht sauber. Das Beweisprogramm ist denkbar einfach:
Code:
#include <stdio.h>
int main(void) {
float j;
for(j=0; j<2; j+=0.01) {
printf("%f\n",j);
}
exit(0);
}
Der Output gibt ab einem gewissen Punkt ein nicht erwartetes Ergebnis:
Code:
(...)
0.790000
0.800000
0.810000
0.820000
0.830000
0.839999
0.849999
0.859999
0.869999
0.879999
(...)
Noch viel lustiger wird es, wenn man die Schleife beträchlich länger laufen lässt:
Code:
(...)
1169.609863
1169.619873
1169.629883
1169.639893
(...)
Dass sich mit sowas nicht arbeiten lässt, dürfte einleuchten. Woher kommt dieser Fehler und wie kann man ihn umgehen oder beheben? Ist das ein bekanntes Phänomen?
[edit]
Wenn ich als Varibalentyp einen "double" nehme, funktioniert's...
[/edit]
Grüße
Herakles