Wegen herbivore's berechtigtem Einwand (Ursache sind die Rundungsfehler) würde ich mir einen anderen Algorithmus überlegen.
Schau dir doch mal genauer an, wie Gleitkommazahlen nach IEEE 754 berechnet werden.
Beispiel für single Zahlen:
10111101100000000000000000000000
Vorzeichen ist Negativ (da Bit 31 = 1)
Exzess e = 0b01111011 = 123
der Fractionanteil ist 0
die Zahl ist also:
z = -1,0 * 2^(e-127)
= -1,0 * 2^((123)-127)
= -1,0 * 2^(-4)
= -0,0625
es ist leicht zu erkennen, dass -0,0625 = -1/16 ist. Wie kommt man also auf den Bruch?
Dazu musst du dir die Rechnung binär anschauen:
z = -1 * 0b1 * 2^(-4)
= -1 *0b0,1 2^(-3)
= -1 *0b0,01 2^(-2)
= -1 *0b0,001 2^(-1)
= -1 *0b0,0001 2^(0)
aus dem Nachkommaanteil berechnest du den Bruch: 0*1/2 + 0*1/4 + 0*1/8 +1*1/16 + 0* 1/32 + 0* 1/64 + ... = 1/16
anderes Beispiel:
0 10000100 00101100000000000000000 ist also 75/2 = 37,5
Vz: positiv
e = 132
f = 00101100000000000000000
Ergebnis = 0b1,00101100000000000000000 * 2^(132-127)
= 0b1,001011 * 2^(5)
= 0b100101,1
0b100101 = 37
Nachkommastellen: 1 * 1/2
also 37+1/2 = 75/2