Hier eine kleine Info zu Gleitpunktzahlen; aufgrund meines Studiums bin ich da gerade voll im Stoff
![](/ubbthreads/images/graemlins/wink.gif)
:
Der Typ float ist ungenau bei sehr großen und bei sehr kleinen Werten. Er ist geeignet, wenn ein Bruchteil benötigt wird, aber kein größerer Präzisionsgrad gefordert ist. Der Typ double ermöglicht Zahldarstellungen, die gegenüber dem Typ float die doppelte Genauigkeit besitzen. In der Regel wird der Typ double verwendet.
float: −3.4*10-38 bis +3.4*10+38 (ergibt ungefähr 6 bis 7 signifikante Dezimalziffern Genauigkeit), belegt 4 Bytes
double: −1.7*10-308 bis +1.7*10+308 (ergibt ungefähr 15 signifikante Dezimalziffern Genauigkeit), belegt 8 Bytes
Wie bei ganzen Zahlen, so kann auch bei Gleitpunkt-Zahlen nur eine endliche Ziffernzahl gespeichert werden. Eine Gleitpunkt-Zahl besitzt allgemein folgende Form:
a = ±m * b±e (z.B. 16.875 * 10-1)
m wird als Mantissenteil (auch Bruch genannt), b als Basis und e als Exponent bezeichnet. Diese Form wird Gleitpunkt-Darstellung (floating point) oder halblogarithmische Darstellung genannt. Die Bezeichnung Gleitpunkt kommt daher, dass durch die Wahl des Exponenten die Lage des Punktes bzw. Kommas festgelegt wird und durch Änderung des Exponenten verschoben werden kann.
Durch die begrenzte Stellenzahl für den Mantissenteil gehen Stellen verloren, d.h. an Stelle der exakten Werte wird mit Näherungswerten gerechnet. Da nur mit Näherungswerten gerechnet wird, folgt natürlich, dass es sich bei den Ergebnissen auch nur um Näherungswerte handeln kann. Die Abschätzung der Fehler, die sich aus den Operationen mit Zahlen ergeben, ist in den meisten Fällen sehr schwierig. Die meisten Computersysteme wandeln Dezimalzahlen in das Zweiersystem um. Auch einfach erscheinende Zahlen wie 0.1 werden dabei gerundet und deshalb ungenau. Ohne Rundungsfehler wird aber z.B. 0.125 als 2-3 dargestellt.
Durch die begrenzte Stellenanzahl für eine Gleitpunktzahl in einem Computersystem - insbesondere beim Mantissenteil - sind die Addition von Zahlen sehr unterschiedlicher Größe und die Subtraktion von dicht benachbarten Zahlen (Auslöschung) zu vermeiden. Wegen der Überlaufgefahr soll keine Division durch Werte in der Nähe von Null vorgenommen werden. Abfragen auf Gleichheit (==) von zwei Gleitpunktzahlen sind verboten. Stattdessen ist auf einen tolerierbaren Differenzbetrag e abzufragen (abs(x - y) < e).
Erst mit liteC (oder jetzt in Verbindung mit einer DLL) ist es möglich, durch die Typisierung von Variablen die Genauigkeit bei mathematischen Operationen zu erhöhen. Zur Zeit kann man in CScript das nur durch eine ausgewählte Reihenfolge der Operationen erzielen.