Warum bleibt das Hinzufügen von 0,1 mehrfach verlustfrei?
Ich kenne das0.1
Dezimalzahl kann nicht exakt mit einer endlichen Binärzahl dargestellt werden Erläuterun), sodouble n = 0.1
wird etwas an Präzision verlieren und wird nicht genau @ se0.1
. Auf der anderen Seite0.5
kann genau dargestellt werden, weil es @ i0.5 = 1/2 = 0.1b
.
Habe gesagt, dass es verständlich ist, dass das Hinzufügen von0.1
drei Ma wird nicht genau @ geb0.3
so wird der folgende Code gedrucktfalse
:
double sum = 0, d = 0.1;
for (int i = 0; i < 3; i++)
sum += d;
System.out.println(sum == 0.3); // Prints false, OK
Aber wie kommt es dann, dass das Hinzufügen von0.1
fünf Ma wird genau @ geb0.5
? Der folgende Code gibt @ atrue
:
double sum = 0, d = 0.1;
for (int i = 0; i < 5; i++)
sum += d;
System.out.println(sum == 0.5); // Prints true, WHY?
Wenn0.1
kann nicht genau dargestellt werden, wie kommt es, dass es genau @ gibt, wenn man es 5 mal addier0.5
was kann genau dargestellt werden?