IEEE 754 Konvertierung -> Rundungsregeln?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

IEEE 754 Konvertierung → Rundungsregeln?
Hi,

Ich hab heute mal versucht (nach dem Schema von Wikipedia) eine Gleitkommazahl (14,3) nach IEEE 754 (32 Bit) umzuwandeln.

So bin ich vorgegangen:

14/2 = 7 Rest 0
7/2 = 3 Rest 1
3/2 = 1 Rest 1
1/2 = 0 Rest 1

14 = 1110

0,3*2 = 0,6 - 0
0,6*2 = 1,2 - 1
0,2*2 = 0,4 - 0
0,4*2 = 0,8 - 0
0,8*2 = 1,6 - 1
0,6*2 = 1,2 - 1
0,2*2 = 0,4 - 0
0,4*2 = 0,8 - 0
0,8*2 = 1,6 - 1
0,6*2 = 1,2 - 1
....

0,01001100110011.....

BIAS = 01111111

1110,01001100110011..... * 2 ^ (01111111 - 01111111) =
111,001001100110011..... * 2 ^ (10000000 - 01111111) =
11,1001001100110011..... * 2 ^ (10000001 - 01111111) =
1,11001001100110011..... * 2 ^ (10000010 - 01111111) =

Vorzeichenbit -> 0 da positive Zahl

Ergebnis:
0 10000010 11001001100110011001100
V       E                       M

Verglichen habe ich es mit http://www.h-schmidt.net/FloatConverter/IEEE754de.html

Ergebnis:
0 10000010 11001001100110011001101
V       E                       M

Dort ist allerdings das LSB 1 und nicht 0 wie bei mir. Ich hab jetzt die Skripte und das Internet ein bisschen durchforstet, komme aber auf kein brauchbares Ergebnis…

Gefunden habe ich grs-Methoden die aber nur im Zusammenhang mit Arithmetischen-Operationen erwähnt werden.
Beispiele:

http://www.auto.tuwien.ac.at/~schi/LVAs/GdIUE/GdI-UE2-3.pdf
http://userpages.uni-koblenz.de/~frey/gdra/02%20Binäre%20Arithmetik%20(VL08).pdf

Nun die Frage: Wie rundet man beim konvertieren von Gleitkommazahlen richtig?


nach ieee754 standard nach wikipedia: ( http://de.wikipedia.org/wiki/IEEE_754#Rundungen )

Bei binären Rundungen muss zur nächstgelegenen darstellbaren Zahl gerundet werden. Wenn diese nicht eindeutig definiert ist (genau in der Mitte zwischen zwei darstellbaren Zahlen), wird so gerundet, dass das niederwertigste Bit der Mantisse 0 wird.


Sorry, aber ich steh mit dieser Aussage grad voll auf dem Schlauch :confused:

Ich verstehe gerade nicht, wie ich weiß ob eine Zahl darstellbar ist. Genauso verstehe ich nicht, wie ich weiß ob eine Zahl eindeutig definiert ist…


als kommazahl im binärsystem kann man jeden bruch mit endlich vielen ziffern darstellen, wo der nenner eine zweierpotenz ist. (1/2, 7/8, 0.6875, …)

wenn man eine kommazahl aus dem dezimalsystem umwandeln möchte, hat man ja zehnerpotenzen, also 2er und 5er. sobald eine 5 im nenner ist (z.b. 0.6 = 3/5)
würde die binärdarstellung periodisch. dann ist sie aber eindeutig entweder näher an eine existierenden zahl drüber oder an einer drunter dran.

will man aber z.b. 9/8 = 2#1.001 mit 2 bit langer mantisse darstellen, ist das genau in der mitte zwischen 1.00 und 1.01

1 Like

Danke dir! Daraus folgere ich jetzt folgende Regel:

Folge der Mantisse ab dem 24ten Bit.

0.....
=> Abrunden

10......0
=> LSB auf 0 bringen

Rest
=> Aufrunden

Stimmt das so? In meinem Fall eben aufrunden, da die Folge 110011001100… gewesen wäre, right?


ja (wobei ich glaube, dass das mit dem lsb auf 0 bringen in der klausur wurscht ist / nicht drankommt, kommt zumindest imho nirgends in den folien vor)