Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class Test {
public static void main(String[] args) {
double x = 1.0;
int y = 100;
for(int i=0; i<100; i++) {
y -= 1;
x = (double)y/100;
System.out.println(x);
}
}
}
Fließkommazahlen sind manchmal auch genau. 1/2, 1/4 oder 57/65536 lassen sich ganz genau speichern, und werden beim Aufsummieren auch nie solche Fehler bringen.
Und die Ungenauigkeiten liegen weder an der Programmiersprache, noch an der Hardware, sondern einfach an der Mathematik und der Tatsache, dass wir für das Speichern von Zahlen nicht beliebig viel Platz verwenden können. Stell dir vor, die Zahlen wären im normalen Zehnersystem gespeichert, und mit 10 Nachkommastellen. Nun rechnen wir 1/3 + 2/3, aber statt 1 erhalten wir:
Genau das passiert im Rechner, nur im Zweier-System (Binär- oder Dualsystem). 0.1 ist dort nicht exakt darstellbar, genauso wie 1/3 im Zehnersystem nicht exakt darstellbar ist. Rechnen wir es einfach aus:
Und dui Ungenauigkeiten liegen weder an der Programmiersprache, noch an der Hardware, sondern einfach an der Mathematik und der Tatsache, dass wir für das Speichern von Zahlen nicht beliebig viel Platz verwenden können.
Das würde ich gerne sehen, ich kenne nur eine Methode, Kommazahlen als Binärzahlen darzustellen (sieht man einmal von Feinheiten wie Exponentialschreibweise u.s.w. ab).
Natürlich sind andere Codierungen mit 0 und 1 möglich (z.B. Fibonacci-Codierung oder Gray-Code), aber sowas meinst du sicher nicht, oder?