Wykład 2: Liczby rzeczywiste (stało i zmiennoprzecinkowe) Koprocesor budowa podstawowe operacje
Liczby rzeczywiste stałoprzecinkowe Zapis 8.8 oznacza 8 bitów części całkowitej (w tym bit znaku) i 8 bitów części ułamkowej Tabela 1a. Wartości (wagi) bitów w zapisie binarnym liczb rzeczywistych stałoprzecinkowych ( słowo 16 bitowe, zapis 8.8 ) - zakres: -128.00000000 ... +127.99609375
Liczby rzeczywiste stałoprzecinkowe Przykład 1 (zapis 8.8) Nr 7654 3210 1234 5678 liczba 0001 0010 1010 0001b reprezentuje wartość 1*24 + 1*21 + 1*2-1 + 1*2-3 + 1*2-8 = 16 + 2 + 1/2 + 1/8 + 1/256 18.62890625
Liczby rzeczywiste stałoprzecinkowe Zapis 1.15 oznacza 0 bitów części całkowitej (1 bit znaku) i 15 bitów części ułamkowej Tabela 1b. Wartości (wagi) bitów w zapisie binarnym liczb rzeczywistych stałoprzecinkowych (słowo 16 bitowe, zapis 1.15 ) - zakres: -1.0000000000 ...+0.999969482421875
Liczby rzeczywiste stałoprzecinkowe Przykład 2 (zapis 1.15) Nr Z123 4567 89... liczba 0001 0010 1010 0001b reprezentuje wartość 1*2-3 + 1*2-6 + 1*2-8 + 1*2-10 + 1*2-15 = 1/8 + 1/64 + 1/256 + 1/1024 + 1/32768 0.145538330078125
Liczby rzeczywiste stałoprzecinkowe Rozdzielczość zapisu stałoprzecinkowego 1.15 1/215 = 1/( 32 768 ) = 0.000030517578125 Rozdzielczość zapisu stałoprzecinkowego 1.23 1/223 = 1/( 8 388 608 )= = 0.00000011920928955078125 Rozdzielczość zapisu stałoprzecinkowego 1.31 1/231 = 1/( 2 147 483 648 )= = 0.0000000004656612873077392578125 Rozdzielczość zapisu stałoprzecinkowego 1.7 1/27 = 1/128 = = 0.0078125 (-1..+1)
Liczby rzeczywiste zmiennoprzecinkowe Co oznacza zapis? 3.0517578125e-5 = 3.0517578125*10-5 3.0517578125/100000 0.000030517578125
Liczby rzeczywiste zmiennoprzecinkowe Zapis zmiennoprzecinkowy: single (32 bity) 31 30...23 22...0 znak wykładnik mantysa wartość = (-1)znak * mantysa * 2 wykładnik wartość = (-1)znak * 1.xxxxx * 2 wykładnik znak = 0/1 mantysa = 1.0...1.99999988079071044921875 wykładnik = 0...255 (-126..+127: offset=127)
Liczby rzeczywiste zmiennoprzecinkowe Przykład 1: liczba rzeczywista 1.0 = 1. 0 * 20 znak = 0 , wykładnik = 0 , mantysa = 1.0 | | 0 011 1111 1 | 000 0000 0000 0000 0000 0000 = 0|011 1111 1|000 0000 0000 0000 0000 0000 = 3F80 0000h
Liczby rzeczywiste zmiennoprzecinkowe Przykład 2: liczba rzeczywista 178.125 = 1011 0010 . 001 = 1. 0110 0100 01 * 27 znak = 0 , wykładnik= +7, mantysa = (1).0110 0100 01 (=127+7=134) | | 0 1000 0110 | 0110 0100 0100 0000 0000 0000 = 0100 0011 0011 0010 0010 0000 0000 0000b = 43 32 20 00h
Liczby rzeczywiste zmiennoprzecinkowe - zestawienie: Rys. 1
Liczby rzeczywiste zmiennoprzecinkowe - zestawienie: Rozdzielczość i zakres: single (32 bity): rozdzielczość: ~7 cyfr znaczących zakres: 2–126 ... 2127 ~= 10-38 ... 1038 double (64 bity): ~16 cyfr znaczących zakres: 2–1022 ... 21023 ~= 10-308 ... 10308 extended (80 bitów): ~19 cyfr znaczących zakres: 2–16382 ... 216383 ~= 10-4932 ... 104933
Liczby rzeczywiste zmiennoprzecinkowe - wartości specjalne: quiet NaNs (QNaNs) signaling NaNs (SNaNs)
Budowa koprocesora Rys.2 Rejestry koprocesora
Budowa koprocesora Rys.3 Stos rejestrów koprocesora FLD value1
Operacje na stosie koprocesora FINCSTP FDECSTP FFREE ST(1) FXCH ST(2) FINIT
Koprocesor - podstawowe działania wynik = (5.6* 2.4) + (3.8*10.3) FLD value1 // a value1=5.6 FMUL value2 // b value2=2.4 FLD value3 FMUL value4 // c value3=3.8 FADD ST,ST(1) //d value4=10.3 FST wynik // wynik=52.58 lub FSTP wynik Rys.4 Przykład operacji na koprocesorze
Pozostałe rozkazy Rys.5 Zdefiniowane stałe koprocesora Rys.6 Instrukcje trygonometryczne koprocesora
Budowa koprocesora Rys.7 Słowo stanu koprocesora (FPU Status Word) C0 == Carry Flag C3 == Zero Flag (C0,C3 – ustawiane po instrukcjach testujących lub porównujących, np. FTST)
Budowa koprocesora Rys.8 Słowo kontroli koprocesora (FPU Control Word)