[Handbuch] Allgemeine Themen, Typen und Operatoren
Verfasst: 12.09.2010 20:34
Das hier ist meiner Meinung nach etwas ungünstig ausgedrück.
Grober Vorschlag:
Eine weitere Einschränkung von Fließkomma-Zahlen ist, dass sie stets im Binärmodus arbeiten, weshalb sie nur die Zahlen exakt speichern können, welche mittels Multiplikation oder Division mit 2 ermittelt werden können. Dies ist insbesondere wichtig zu wissen, wenn Sie versuchen, eine Fließkommazahl in einer visuell lesbaren Form darzustellen (oder mit ihr Rechenoperationen auszuführen) - das Speichern von Zahlen wie 0.5 oder 0.125 ist einfach, da sie Divisionen von 2 sind. Das Speichern von Zahlen wie 0.11 ist schwieriger, diese wird möglicherweise als Zahl 0.10999999 gespeichert. Sie können versuchen, nur eine begrenzte Anzahl an (Nachkomma-) Stellen darzustellen, seien Sie aber nicht überrascht, wenn die Darstellung der Zahl anders aussieht, als Sie dies erwarten!
Grober Vorschlag:
Man könnte hier noch ein Beispiel für die Umwandlung einbauen, indem man manuell einmal 0.2 mal in binär umwandelt und das mal mit .4 versucht.Eine weitere Einschränkung von Fließkomma-Zahlen ist, das sie mit der Basis 2 arbeiten. Deshalb kann es Vorkommen kann, das manche Zahlen aus den 10er-System - welches wir normal verwenden - nicht richtig dargestellt werden können. Bsp. kann man die Zahl 0,4 nicht korrekt darstellen. Dies ist allerdings keine Einschränkung von PureBasic sondern ein Generelles Problem. Versuchen sie einfach mal die Rechnung 1/3 in 10er-System darzustellen - es wird nicht klappen. Bei einen Zahlenbasis von 3 wäre es einfach: 0,1.
In Zehner-System werden Stellen mit 10^x bestimmt werden. 10^2=100, 10^1=10, 10^0=1, 10^-1=0.1, 10^-2=0.01.
Beim 2-System ist es folgerichtig: 2^2=4, 2^1=2, 2^0=1, 2^-1=0.5, 2^-2=0.25 usw.
und eben mit .25, .125 etc. wird man nie .4 oder .11 darstellen können.
Der Compiler wird zwar 0.4 ausgeben, dieser Wert entsteht aufgrund von Rundungen!
Ein sehr einfaches Beispiel für die Problematik wäre das hier:ergibt: -0.28999999999996362Code: Alles auswählen
Debug 1000.11-1000.4
Wie gesagt: Es PB bzw. der Computer verrechnet sich nicht, es sind Umrechnungsfehler, die hier sehr böse zuschlagen.
Fließkommazahlen sollten daher immer als Schätzwert angesehen werden. Solltet ihr mal Berechnungen in Währungen haben, die absolut richtig sein müssen, rechnet immer in der kleinsten einheit. Bei unserer Währung wäre es dann Cent. Bei der Ausgabe kann man dann einfach mit Strings arbeiten. Das Ergebnis in einen String umwandeln und anschließend die letzen beiden Zeichen für die Cent-Angabe benutzen.
Eine andere Sache ist bspw. wenn ihr bspw. abfragen wollt, ob ein Ergebnis Null ergibt, sollte man eventuell nicht genau mitüberprüfen, sondern eventuell so:Code: Alles auswählen
if a.f=0oder entsprechende Grenzen.Code: Alles auswählen
if a.f<0.5 and a.f>-0.5