Code: Alles auswählen
a.s="100.14"
Debug ValF(a) ;100.13999938964844
Code: Alles auswählen
a.s="100.14"
Debug ValF(a) ;100.13999938964844
Aha... okay, intressant - dass wusste ich bis jetzt noch nicht.stbi hat geschrieben:nimm double statt float, dann kommt der Rundungsfehler nicht mehr
@kaeru: ACK, aber dass Float schon 2 Stellen hinterm Komma solche Ungenauigkeit haben soll, kann ich mir nicht vorstellenKaeru Gaman hat geschrieben:weil ValF() nunmal in eine Float umwandelt.
und eine Float ist von ihrer genauigkeit her begrenzt.
sobi hat geschrieben:...Sprich, ich rechne alles in Cent, anstatt in Euro?
genau.Zaphod hat geschrieben:Ja
Spezielle Informationen über Fließkommazahlen (Floats und Doubles)
Eine Fließkomma-Zahl (auch Gleitkomma-Zahl, englisch: Floating Point Number) wird in einer Art und Weise gespeichert, die den Binär-Punkt (trennt "Ganzzahlteil" vom "Kommateil") innerhalb der Zahl "gleiten" lässt, wodurch das Speichern sehr großer aber auch sehr kleiner Zahlen (mit vielen Nachkommastellen) möglich wird. Wie auch immer, Sie können nicht sehr große Zahlen mit gleichzeitig sehr hoher Genauigkeit (sozusagen große und kleine Zahlen zur selben Zeit) speichern.
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!
Dies gilt für alle Fließkomma-Zahlen, nicht nur die in PureBasic.
Wie der Name schon sagt, haben Doubles eine doppelte Genauigkeit (64 Bit) gegenüber der einfachen Genauigkeit von Floats (32 Bit). Wenn Sie also genauere Ergebnisse mit Fließkommazahlen erwarten, verwenden Sie Doubles anstelle von Floats.
Weitere Informationen über den 'IEEE 754' Standard erhalten Sie auf Wikipedia.