G
Gast2
Gast
Moin,
da immer gerne float direkt mit float verglichen wird, mal ein kleines im Kopf nachrechenbares Beispiel
es wird in der tat "komisch - passt nicht" ausgegeben. Erst nachdem getestet wurde ob oben in der Nähe von unten ist wird "endlich" ausgegeben. Das Problem besteht darin das eine CPU nicht mit analogen Dingen umgehen kann, es wird alles digitalisiert. Und bei der Digitalisierung von 0.2 entsteht ein periodischer Bruch der sich nur 0.2 annähert aber 0.2 nie erreicht (es wird 0.19~). Die 0.4 ist ebenfalls ein periodischer Bruch (ist 0.39~).
Der Rest ist eigentlich einfach. Einmal 60 durch 100 dividieren, wird 0.6. Davon 0.4 abziehen macht 0.2. Allerdings zieht die CPU nicht 0.4 sondern 0.39 ab, macht noch ganze 0.21. Die 0.2 wird intern auf 0.19 gerunden und 0.21 ist nicht 0.19.
Eine ausführlichere Erklärung findet man im Wiki IEEE 754 ? Wikipedia
hand, mogel
da immer gerne float direkt mit float verglichen wird, mal ein kleines im Kopf nachrechenbares Beispiel
Java:
public static void main(String[] args) {
float oben = 60.0f;
float unten = 0.2f;
oben = oben / 100.0f;0
oben = oben - 0.4f;
if (oben == unten) {
System.out.println("oben und unten sind gleich");
} else {
System.out.println("komisch - passt nicht");
}
if ((oben > unten - 0.0001f) && (oben < unten + 0.0001f)) {
System.out.println("endlich");
}
}
es wird in der tat "komisch - passt nicht" ausgegeben. Erst nachdem getestet wurde ob oben in der Nähe von unten ist wird "endlich" ausgegeben. Das Problem besteht darin das eine CPU nicht mit analogen Dingen umgehen kann, es wird alles digitalisiert. Und bei der Digitalisierung von 0.2 entsteht ein periodischer Bruch der sich nur 0.2 annähert aber 0.2 nie erreicht (es wird 0.19~). Die 0.4 ist ebenfalls ein periodischer Bruch (ist 0.39~).
Der Rest ist eigentlich einfach. Einmal 60 durch 100 dividieren, wird 0.6. Davon 0.4 abziehen macht 0.2. Allerdings zieht die CPU nicht 0.4 sondern 0.39 ab, macht noch ganze 0.21. Die 0.2 wird intern auf 0.19 gerunden und 0.21 ist nicht 0.19.
Eine ausführlichere Erklärung findet man im Wiki IEEE 754 ? Wikipedia
hand, mogel
Zuletzt bearbeitet von einem Moderator: