Mailinglisten-Archive |
Aloha, ich hoffe mal, daß mich niemand steinigt..... das ist die erste Mail an eine Mailingliste mit Lotus Notes (zwangsweise :-( >Marco Döhring wrote: >>"Es ist ziemlich normal, dass einfache Dezimalzahlen wie 0.1 oder 0.7 nicht in ihre internen >>binären Entsprechungen konvertiert werden können, ohne einen kleinen Teil ihrer Genauigkeit >>zu verlieren. Das kann zu verwirrenden Ergebnissen führen. So wird floor((0.1 + 0.7) * 10) >>normalerweise 7 statt des erwarteten Wertes 8 zurück geben (als Ergebnis der internen >>Entsprechung von 7.9999999999.... [...]" >Das erklärt das Phänomen. Und wie die Antwort von Sebastian Tobias >bereits erklärt ist das in (fast ?) allen Programmiersprachen zu finden. >Jedoch würde ich einen Wert wie -0.001 oder ähnliches erwarten. Warum? (Übliche) Computer kennen nur binäre Zahlen. Um damit Ganze Zahlen darstellen zu können, wird z.B. eine 10 zu 1 x 2^3 (8) 0 x 2^2 (4) 1 x 2^1 (2) 0 x 2^0 (1) Also binär 1010. Soweit ist das noch recht einfach und genau. Die Nachkommastellen werden jedoch als Brüche berechnet. Z.b. bei 0,75: 1 x 2^-1 (1/2) 1 x 2^-2 (1/4) Also wäre z.B. 10,75 so etwas in der Form: 1010,11 Wie man leicht sieht, sind nachkommastellen, die sich nicht aus den Werten 0,5; 0,25; 0,125; .... zusammensetzen lassen, schon gar nicht mehr genau darstellbar, sondern müssen ge- rundet werden. Auch wenn sie im Dezimalsystem leicht dar- stellbar sind (wie z.B. 0,1) Viele Grüße, Mathias -- ** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de ** Informationen: http://www.phpbar.de http://lists.phpbar.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive