Przykład konwersji liczby dziesiętnej do postaci binarnej 32-bitowej (short real), zgodnej z normą IEEE754: 1. Liczba L = 30.55
2. Konwersja 10→2 części całkowitej: 3010 = 111102.
30 : 2 =
15 reszty 0
15 : 2 =
7
reszty 1
7 : 2 =
3
reszty 1
3 : 2 =
1
reszty 1
1 : 2 =
0
reszty 1
3. Konwersja 10→2 części ułamkowej: 0.5510 = 0.1000110011001100112
Uwaga: na potrzeby zadania zakładam zachowanie dokładności do 0.00110 czyli co najmniej dziesięć cyfr dwójkowych. Naprawdę na mantysę w formacie 32-bitowym ZMP przeznaczamy 23 bity, ale być może uzyskamy jeszcze kilka bitów mantysy na etapie normalizacji z przekształcania części całkowitej.
0.55 * 2 = 1.10
0.10 * 2 = 0.20
0.20 * 2 = 0.40
0.40 * 2 = 0.80
0.80 * 2 = 1.60
0.60 * 2 = 1.20
0.20 * 2 = 0.40
0.40 * 2 = 0.80
0.80 * 2 = 1.60
0.60 * 2 = 1.20
0.20
*
2
=
0.40
4. Podsumowując rezultaty z punktów 2 i 3, otrzymujemy 30.5510 = 11110.1000(1100)2
Znak (1b) Wykładnik (8b) Mantysa (23b) 31 30 ... 23
22 ... 0
Należy teraz wytworzyć wartości poszczególnych pól formatu: Znak = 0 bo liczba L jest dodatnia Wykładnik i mantysa zostaną obliczone po normalizacji.
5. Normalizacja ( 1 ≤ Ln < 2 ) 11110.10001100(1100)2 * 20 = 1.1110 1000 1100 1100 ... 2 * 24
Wykładnik rzeczywisty liczby exp = 4.
Wykładnik spolaryzowany exp spol = 4 + 127 = 131.
Kod dwójkowy wykładnika spolaryzowanego to 100000112 (128+2+1).
6. Mantysaznormalizowana mn to
mn = 1.1110 1000 1100 1100 ...
Usuwamy domyślną jedynkę ( 1.xxx ), tworząc mantysę maszynową m m = 1110 1000 1100 1100 1100 110
7. Rezultat konwersji:
L = 30.5510 =
0 10000011 1110 1000 1100 1100 1100 110
Czyli korzystając z zapisu szesnastkowego:
L = 30.5510 = 0100 0001 1111 0100 0110 0110 0110 0110 2 ZMP =
= 41F4 5555H ZMP
8. Po konwersji 2→10 otrzymujemy
P = 01000001111101000110011001100110 2 =
3.05499992370605E+0001 = 30.5499992370605 ≠ 30.55
2
Przykład konwersji liczby binarnej 32-bitowej (short real), zgodnej z normą IEEE754 do postaci dziesiętnej: 1. R = 001111111010000000000000000000002
2. Rozbicie liczby R na poszczególne pola
0 01111111 01000000000000000000000
Znak = 0
Wykładnik spolaryzowany expspol = 011111112 =
64+32+16+8+4+2+1=127.
A wobec tego wykładnik rzeczywisty liczby exp = expspol – 127 =
127 – 127 = 0.
Mantysa maszynowa ( bez ukrytej jedynki)
m = 010000000000000000000002
Po odtworzeniu ukrytej jedynki otrzymujemy mantysę znormalizowaną:
mn = 1010000000000000000000002
3. Co pozwala na odtworzenie wartości liczby po konwersji dwójkowo-dziesiętnej:
L = (-1)Znak * m * 2 exp = 1 * 1.010 * 20 = 1.0102 = 1.2510
3