Re: Stellen anzeigen ohne Rundung
Verfasst: 01.05.2010 16:54
In PureBasic gibt es keine "Dezimalzahlen" als solches, wo die genauigkeit genau die anzahl der stellen entspricht.
Hier gibs Fließkomma zahlen. Die haben halt einen andenen aufbau, kannst du dir selber anlesen unter Wiki.
Diese ungenauigkeit ist aber eigentlich verschwindend gering, du siehst sie halt nur deutlich weil da so viele 9en kommen.
Im Speicher steht halt nicht zB 0.18 drin, sonden ein Bit-Sammlung, die diese zahl repräsentieren.
Dabei kann jedoch 0.18 nicht zusammengestellt werden sonden eben nur:
Aber das ist "das gleiche".
Schon in der Schule wurde bewiesen das die 0. 9er Periode genau 1 ist.
Auch die 0.82 kann nicht so gespeichert werden, sonden dort ist es etwas mehr:
rein rechnerisch würde dort nun 1.00000000000000005 rauskommen, da jedoch die zahl um eine Potenz gestiegen ist, die stellen also "geflossen sind" kommt nun wieder 1.0 raus!
Du brauchst dir also keine gedanken machen wenn du mit scheinbar ungenauen werten rechnest.
Denn selbst wenn du 10 Tausend mal nur mit 0.17999999999999999 addierst, und dein Verstand dir sagt das muss am ende auch weniger als 1800 rauskommen, ist das quatsch, im gegenteil, in diesem fall kommt sogar scheinbar mehr raus:
1800.0000000001492
Es kannen also immer nur mit einer bestimmte Anzahl von Stellen gerechnet werden.
Hat man sehr hohe Zahlen, kann man auch nur weiter hohe Zahlen dazu addieren.
Hat mehr sehr kleine Zahlen, kann man auch nur weiter kleine Zahlen addieren:
Die +1 "juckt" in garnicht.
UNd die kleine Zahl verschwindet :
Hier gibs Fließkomma zahlen. Die haben halt einen andenen aufbau, kannst du dir selber anlesen unter Wiki.
Diese ungenauigkeit ist aber eigentlich verschwindend gering, du siehst sie halt nur deutlich weil da so viele 9en kommen.
Im Speicher steht halt nicht zB 0.18 drin, sonden ein Bit-Sammlung, die diese zahl repräsentieren.
Dabei kann jedoch 0.18 nicht zusammengestellt werden sonden eben nur:
Code: Alles auswählen
a.d = 0.18
Debug a
Schon in der Schule wurde bewiesen das die 0. 9er Periode genau 1 ist.
Auch die 0.82 kann nicht so gespeichert werden, sonden dort ist es etwas mehr:
Code: Alles auswählen
b.d = 0.82
Debug b
Du brauchst dir also keine gedanken machen wenn du mit scheinbar ungenauen werten rechnest.
Denn selbst wenn du 10 Tausend mal nur mit 0.17999999999999999 addierst, und dein Verstand dir sagt das muss am ende auch weniger als 1800 rauskommen, ist das quatsch, im gegenteil, in diesem fall kommt sogar scheinbar mehr raus:
1800.0000000001492
Code: Alles auswählen
a.d = 0.18
Debug a
d.d = 0
For n = 1 To 10000
d + a
Next
Debug d
Hat man sehr hohe Zahlen, kann man auch nur weiter hohe Zahlen dazu addieren.
Hat mehr sehr kleine Zahlen, kann man auch nur weiter kleine Zahlen addieren:
Code: Alles auswählen
a.d = 10000000000000000
Debug a
d.d = a + 1
Debug d
UNd die kleine Zahl verschwindet :
Code: Alles auswählen
a.d = 0.0000000000000001
Debug a
d.d = a + 1
Debug d