Natürlich passen die Werte nicht, denn Dein Ausleser rechnet jedes Byte in eine Zahl um und das geht so eben nicht
Für die Float zahl sind die ganzen 32Bit für die Eine Zahl zuständig wobei eines für das Vorzeichen ist und die anderen für die zahl sowie die Position des Kommas.
bin für so was jetzt nciht so der Rechner, wikipedia schreibt folgendes zur 32Bit float zahl:
Berechnung einer IEEE single precision Gleitkommazahl (32-Bit-Gleitkommazahl)
Hier werden die genauen Rechenschritte vorgestellt, um einen
Dezimalbruch in eine binäre Gleitkommazahl vom
Typ Single nach IEEE 754 umzuwandeln. Dazu müssen nacheinander die drei Werte (
Vorzeichen v {\displaystyle v}
https://wikimedia.org/api/rest_v1/media/math/render/svg/e07b00e7fc0847fbd16391c778d65bc25c452597 (1 bit),
Mantisse m {\displaystyle m}
https://wikimedia.org/api/rest_v1/media/math/render/svg/0a07d98bb302f3856cbabc47b2b9016692e3f7bc und Exponent e {\displaystyle e}
https://wikimedia.org/api/rest_v1/media/math/render/svg/cd253103f0876afc68ebead27a5aa9867d927467) berechnet werden, aus denen sich die Zahl x {\displaystyle x}
https://wikimedia.org/api/rest_v1/media/math/render/svg/87f9e315fd7e2ba406057a97300593c4802b53e4 zusammensetzt:
x = ( − 1 ) v ⋅ m ⋅ 2 e {\displaystyle x=(-1)^{v}\cdot m\cdot 2^{e}}
https://wikimedia.org/api/rest_v1/media/math/render/svg/c8308cc8e5d86d3fb0ee4c81906ed94b287d64a1
Vorzeichen
Je nachdem, ob die Zahl positiv oder negativ ist, ist v {\displaystyle v}
https://wikimedia.org/api/rest_v1/media/math/render/svg/e07b00e7fc0847fbd16391c778d65bc25c452597 0 oder 1: ( − 1 ) 0 = 1 {\displaystyle (-1)^{0}=1}
https://wikimedia.org/api/rest_v1/media/math/render/svg/723000d5cf5074d316ecfe0f8613a43f95581813 oder ( − 1 ) 1 = − 1 {\displaystyle (-1)^{1}=-1}
https://wikimedia.org/api/rest_v1/media/math/render/svg/bd08ddafb88d0dfddcab07d4e3fc9d18925db6ce
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 = ⌊ log 2 ( | x | ) ⌋ {\displaystyle e=\left\lfloor \log _{2}(|x|)\right\rfloor }
https://wikimedia.org/api/rest_v1/media/math/render/svg/2fedc5c08b8b001109ef6ee1b03ba20c713d0406
Wenn hierbei ein Wert für den Exponenten herauskommt, der kleiner −126 oder größer 127 ist, kann die Zahl mit diesem Datentyp nicht gespeichert werden. Stattdessen 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 sogenannte „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 = ( | x | 2 e − 1 ) ⋅ 2 23 {\displaystyle m=\left({\frac {|x|}{2^{e}}}-1\right)\cdot 2^{23}}
https://wikimedia.org/api/rest_v1/media/math/render/svg/2891ebb64022418d49139f4341a09fa452d6ddb8
Zahlenbeispiel mit der Zahl 11,25
Zahl = +11,25
Vorzeichen = + → 0binär
Exponent = ⌊ log 2 ( 11 , 25 ) ⌋ = ⌊ 3 , 49 ⌋ = 3 {\displaystyle {\text{Exponent}}=\left\lfloor \log _{2}(11{,}25)\right\rfloor =\left\lfloor 3{,}49\right\rfloor =3}
https://wikimedia.org/api/rest_v1/media/math/render/svg/90e234dc595f4a0e13ef2b5797f8985bd2149e5c → 3 + 127 = 130 → 10000010binär
Mantisse = ( 11 , 25 2 3 − 1 ) ⋅ 2 23 = ( 1,406 25 − 1 ) ⋅ 2 23 = 3407872 {\displaystyle {\text{Mantisse}}=\left({\frac {11{,}25}{2^{3}}}-1\right)\cdot 2^{23}=(1{,}40625-1)\cdot 2^{23}=3407872}
https://wikimedia.org/api/rest_v1/media/math/render/svg/c5a50e7dbb06ad9143144922f92951f3ad6d6df8 → 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 dies mit folgender Formel recht schnell erledigen:
Z = ( − 1 ) V Z ⋅ ( 1 , 0 + M / 2 23 ) ⋅ 2 E − 127 {\displaystyle Z=(-1)^{VZ}\cdot (1{,}0+M/2^{23})\cdot 2^{E-127}}
https://wikimedia.org/api/rest_v1/media/math/render/svg/2b2959e7d2d81d6fcbfc892f1c3ab931388ce82d
Hier mal der Link zu einem Umrechner:
IEEE-754 Konverter für Fließkommazahlen
dazu mußt du deine zwei Zahlen aus den Bytes 19026 und 19027 aber erst in eine Binärzahl umwandeln und dann aneinander reihen.