Eine Single-Float-Zahl (32 Bit groß) setzt sich so zusammen:
- 1 Bit Vorzeichen
- 8 Bit Exponent
- 23 Bit Mantisse
und eine Double-Float-Zahl (64 Bit groß) so:
- 1 Bit Vorzeichen
- 11 Bit Exponent
- 52 Bit Mantisse
Da normalisierte Zahlen verwendet werden (das 1.Bit der Mantisse ist immer 1 und wird nicht mit angegeben sondern "hinterher" automatisch eingefügt) stehen somit 24 bzw. 53 Bit für die Mantisse zur Verfügung.
Also Single = 2^24 = 16777216 und Double = 2^53 = 9007199254740992. Nachfolger dieser Zahlen können nicht mehr genau aufgelöst werden:
Code: Alles auswählen
;Single
Debug "Single :"
For I = 0 To 14
S.f = 16777210 + I ;16777217 kann nicht mehr als Nachfolger berechnet werden, hier fangen die Fehler an
Debug S
Next
Debug "-----------------------"
;Double
Debug "Double :"
For I = 0 To 14
D.d = 9007199254740985 + I ;9007199254740993 kann nicht mehr als Nachfolger berechnet werden, hier fangen die Fehler an
Debug D
Next
Somit wird als Genauigkeit angegeben: Single = 7 und Double = 15 Stellen. Bei Angabe von 16 für Double darf der Wert nicht größer sein als der Wert oben (also Vorsicht !). Man sieht auch Angaben für Single von 7.2 (oder 7.1667 usw.) Stellen, wobei man aber den Hintergrund kennen muss. Selbiges gilt für Double (15.9 usw).
Gruß
Helle