Auf Thema antworten

Ja.



Logischerweise, ja.



Wie schon gesagt wurde: gar nicht. Der Witz an der Sache ist, dass der binäre Näherungswert für 0,1 (double precision) tatsächlich dezimal 0.1000000000000000055511151231257827021181583404541015625 ist, die meisten dieser Dezimalstellen jedoch redundant sind: Da bei double höchstens 53 Binärstellen (als "Eins Komma" und dann 52 Binärstellen gespeichert) berücksichtigt werden, können nur höchstens 53 * log(2)/log(10), also rund 15,9546 Dezimalstellen gespeichert werden. Wenn du also gerade mal nachzählst, wirst du sehen, dass die ersten 16 dezimalen Nachkommastellen nicht mehr hergeben als die erste Nachkommastelle. Deswegen ist die Näherung für 0,1 zufälligerweise gerade mit 0,1 hinreichend genau als Dezimalzahl dargestellt.


Bei der Rückrechnung muss man etwas aufpassen: Da bei der Binär-Dezimal-Umrechnung sowohl beim Vor- als auch beim Nachkommateil etwas "Verschnitt" auftritt, muss man bei Zahlen, die einen Vorkommateil und einen Nachkommateil ungleich Null haben, mit bis zu 17 Dezimalstellen (z.B. 9 Vorkommastellen und 8 Nachkommastellen) rechnen.


Mehr zu Gleitkommazahlen z.B. in den FAQs (http://www.java-forum.org/allgemeines/122323-ungenauigkeit-double-float-gleitkommazahlen-alternativen.html) und hier: What Every Computer Scientist Should Know About Floating-Point Arithmetic


Ark



Oben