float seltsame Ungenauigkeit Fehler in c [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Ist Gleitkomma-Mathematik kaputt? 28 answers

today passierte mir etwas Seltsames, als ich versuchte, die Ausgabe dieses Codes zu kompilieren und auszuführen, was ich nicht erwartet hatte. Hier ist der Code, der einfach Floating-Werte zu einem Array von Float hinzufügt und es dann ausgibt. Der einfache Code:

int main(){
    float r[10];
    int z;
    int i=34;
    for(z=0;z<10;z++){
        i=z*z*z;
        r[z]=i;
        r[z]=r[z]+0.634;
        printf("%f\n",r[z]);
    }
}

die Ausgabe

0.634000
1.634000
8.634000
27.634001
64.634003
125.634003
216.634003
343.634003
512.633972
729.633972

note, dass von den 27 Zahlen nach der .634 erscheint, die nicht da sein sollten. Weiß jemand, warum das passiert ist? Es ist ein Ereignis, das durch Gleitkommanäherung verursacht wird? ..

P.S Ich habe ein Linux-Debian-System, 64-Bit

Danke an alle

Antworten auf die Frage(8)

Ihre Antwort auf die Frage