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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage