Du weist schon das ein single ein floatingpoint datentyp ist?
Wikipedia:
Zitat:
Berechnung einer IEEE single precision Gleitkommazahl (32-Bit-Gleitkommazahl) [Bearbeiten]
Hier werden die genauen Rechenschritte vorgestellt, um eine Dezimalzahl in eine binäre Gleitkommazahl vom Typ Single nach IEEE 754 umzuwandeln. Dazu müssen nacheinander die drei Werte (Vorzeichen v (1 bit), Mantisse m und Exponent e) berechnet werden, aus denen sich die Zahl x zusammensetzt:
x = (-1)^v \cdot m \cdot 2^e
Vorzeichen
Je nachdem, ob die Zahl positiv oder negativ ist, ist das Vorzeichen v +1 oder −1. Ein positives Vorzeichen wird mit einem Vorzeichenbit 0 gespeichert, negative Zahlen werden durch eine 1 im Vorzeichenbit gekennzeichnet.
Alle weiteren Berechnungen erfolgen mit dem Betrag der Zahl.
Exponent
Als nächstes wird der Exponent gespeichert. Beim IEEE single-Datentyp sind dafür 8 Bit vorgesehen. Der Exponent muss so gewählt werden, dass die Mantisse einen Wert zwischen 1 und 2 erhält:
e = \left \lfloor \log_2(|x|) \right \rfloor
Wenn hierbei ein Wert für den Exponenten heraus kommt, der kleiner −126 oder größer 127 ist, kann die Zahl mit diesem Datentyp nicht gespeichert werden. Statt dessen wird die Zahl als 0 (Null) oder als „unendlich“ abgespeichert.
Der Wert für den Exponenten wird jedoch nicht direkt gespeichert, sondern um einen Bias-Wert erhöht, um negative Werte zu vermeiden. Bei IEEE single ist der Bias-Wert 127. Somit werden die Exponentenwerte −126…+127 als so genannte „Charakteristik“ zwischen 1…254 gespeichert. Die Werte 0 und 255 als Charakteristik sind reserviert für die speziellen Zahlenwerte „Null“, „Unendlich“ und „NaN“.
Mantisse
Die Mantisse wird nun in den verbleibenden 23 Bit abgespeichert:
m = \left( \frac{|x|}{2^e} - 1 \right) \cdot 2^{23}
Zahlenbeispiel mit der Zahl 11,25
Zahl = +11,25
Vorzeichen = + -> 0binär
\mathrm{Exponent} = \left \lfloor \log_2(11{,}25) \right \rfloor = \left \lfloor 3{,}49 \right \rfloor = 3 --> 3 + 127 = 130 -> 10000010binär
\mathrm{Mantisse} = \left( \frac{11{,}25}{2^3} - 1 \right) \cdot 2^{23} = (1{,}40625 - 1) \cdot 2^{23} = 3407872 -> 01101000000000000000000binär
Damit ergibt sich folgende Gleitkommazahl einfacher Genauigkeit:
0 10000010 01101000000000000000000
Umkehrung
Will man aus einer Gleitkommazahl im Maschinenwort (32 Bit) eine Dezimalzahl errechnen so kann man dieses mit folgender Formel recht schnell erledigen:
Z=(-1)^{VZ}\cdot(1{,}0+M/2^{23})\cdot 2^{E - 127}