IEEE-754
Transkrypt
IEEE-754
Systemy komputerowe Standardowa reprezentacja liczb rzeczywistych komputerowych algorytm liczbie odpowiedniej kombinacji bitów - kodu dwójkowego liczby. systemów komputerowych, obliczenia !" #i $%%%-754. Jest to komputerowy & ' zmiennoprzecinkowych. 1. Liczby zmiennoprzecinkowe ! ' ( x = (-1)s • Mx • 2p # s #' " Mx ) * p & & + ' ograniczeniom: p mu #' " [L,U] Ne przeznaczonych na zapisanie & #' Mx ' Nf (lub Nf+1" stosowany jest tzw. „bit ukryty”) zarezerwowanych dla mantysy. " & # " ' , ) '" * - & ' $ " & mantysa Mx . Mx do postaci, dla & #'( 1 > Mx 0,1; jednak, w standardzie IEEE-/01" to znormalizowany format mantysy, w którym 2 > Mx 1 czyli Mx = 1,fffff (symbol f # &* 2 ' " powstaje problem - ' " ' 3 ' #' ' ) & # 4 5* 6 " # &" # 4"44545554 1 ' 7 " & 4"445 4"444 2 $%%%-/01 ' Podsumujmy: W standardzie IEEE-/01 rzeczywistych zapisanych jako: x = (-1)s • 1,ffff...ff • 2p & ) 8 9*: #' & 3 " ,atu, liczby bitów. ; , & & 2. Zasady znormalizowanej reprezentacji zmiennoprzecinkowej + &" IEEE-754, format zapisu liczb e rzeczywistych: seeeeeef ffffffff ) 4<* " s" Ne ) <* & e i na koniec Nf bitów (w tym przyk& =* & # mantysy. To, z jakiego zakresu liczby - & ) * - ' & . #' &# ) , * - $%%% & ,( )7> * )<1 *" jego zdaniem - &# '" niektórzy producenci komputerów doszli do odmiennych wniosków i & , & & #' & 89 & 544 )bias), czyli 2 2(Ne-1) - 1 & W wyniku tak dobranej polaryzacji kod od # & #' & )444* 6 # " liczb zdenormalizowanych oraz symboli, którym # )#' 8 9 * ; # & & # ?# '" & & 6 standardem IEEE-/01 ' zapisane jako: x = (-1)s • 1,ffff...ff ; • 2(e-bias) & t równy polaryzacji: U = bias )# 54444 & @ 44445* a dolny limit L = -(bias-1) ) & 45545 e = 00...001) ?# , & # & ,A4 2 " #' & ( 2-(Nf+1) " ' ( 1,111...111 # • 2 U. 2U+1. #' & ( 1,000...000 • 2 L. '" L zero. 3 3. 32.bitowa, zgodna z IEEE-754, reprezentacja zmiennoprzecinkowa Dla 32-bitowej reprezentacji zmiennoprzecinkowej (pojedyncza precyzja) zgodnie ze standardem IEEE-/01 format: seeeeeee efffffff ffffffff ffffffff. 2 & Ne = 8 bitów a Nf = 23 bity przeznaczono na & #' & ) # *: )bias) wynosi 01111111 " 4>/ ; & " ' # ), „nie liczby”), # & & zakresu [-126,127]. 2 >1 )# * " & ( 2-24 = 5,96... • 10-8 . " ' formacie to: 1,11111111111111111111111 • 2127 = 3,402823... • 1038. " ' ( 1,00000000000000000000000 • 2-126 = 1,175494... • 10-38. ! Po sprowadzeniu do postaci zmiennoprzecinkowej i konwersji mantysy na " # 1,1011•22. Znak jest +. $%$ & $' & !!!!!! () * ++ ," + ! 010000001101100....0 = 0100 0000 1101 1000 00...00 = 40D80000 (hex) 4 Liczba -!$ # 1,10011001... •2-3. Znak -. # ! - ," + # !! – 11 = 01111100. !! ( .++/ ) 10111110010011001....100 = 1011 1110 0100 1100 .... 1100 0 ! ! ! !! !! ! & 123CCCCD (hex). 2 & # , 7>- # , <1- " kombinacje bitów & " && & & & # ?# & 00000000 lub 11111111 " # jest wykorzystywana do zakodowania zera: 00000000 00000000 00000000 00000000 = 0,0 = 00000000 (hex) #" #' - nawet, # & i zerami to zostaje jeszcze “ukryta” jedynka. B AC- #'( 01111111 10000000 00000000 00000000 = + = 7F800000 (hex) 11111111 10000000 00000000 00000000 = - = FF800000 (hex) # ' elenia przez zero lub - ) & 7"1•1038* przedstawienia w tym formacie. & NaN (Not-a-Number czyli „nie liczb9* # & arytmetycznych: 0 11111111 0111111 1111111111111111 = NaNS = 7FBFFFFF (hex) 0 11111111 1000000 0000000000000000 = NaNQ = 7FC00000 (hex) 5 NaNS przerwaniem. W przypadku NaNQ ! " #$ NaN " %& ' 5. 64-bitowa, zgodna z IEEE-754, reprezentacja zmiennoprzecinkowa Zgodnie ze standardem " IEEE-754 64-bitowa " reprezentacja ! format: seeeeeee eeeeffff ffffffff....ffffffff. ( % Ne = 11 bitów, a Nf ) *+ %" !$, mantysy. ( "!" exponent % polaryzacja 01111111111 ) .'+/ ! 0 " , ! $ , NaN) dwie " % "$, % ! 1-1022,1023]. ( " */ " " 2"3 % ! +-53 = 1,11... • 10-16 . 4 .5 6 ! 7! " " 6"8 1,11111111....11111111111 • 21023 = 1,797693... • 10308. Najmniejsza dodatnia liczba: 1,00000000....00000000000 • 2-1022 = 2,225074... • 10-308. 6. Arytmetyka zmiennoprzecinkowa Omówimy teraz zasady wykonywania na liczbach zmiennoprzecinkowych - %& " DODAWANIE #9" % ! " %," , precyzja): 0,25 = 00111110 10000000 00000000 00000000 100 = 01000010 11001000 00000000 00000000 0 , " 8 6 ( " " , % % : " $ % ! " 0 , ! " . ", % . ( "! % !, 4$ , "! ! " 6 " %$ $" % %! wynik. - - !!! " !# " # -!!!!!! --------00001000 (8) miejsc. !!!!!! " antysy) " # 0 01111110 1 " ! # " $ % # !!!!!!! ! " ) ! ! " & # !!! ! " ' # "( $ % !# 0 10000101 1,10010000000000000000000 + 0 10000101 0,00000001000000000000000 --------------------------------------0 10000101 1,10010001000000000000000 (100) (.25) # " % " poza „ukryciem” jedynki. Wynik: 0 10000101 10010001000000000000000 0100 0010 1100 1000 1000 0000 0000 0000 = 42C88000 (hex). ODEJMOWANIE ( , " 7! " , " " % 7 ", 7 ;74<=7>= 0 " , " " , " , % #9" % 6" 66668 0 10000100 01 + ! !!!! !! ") * ) ( , , # ----------------- : 1,0100 " - % # + !!! -----00000 00000 10100 10100 10100 ---------1000110000 !!! : 7 "!, " % ! bias , " $, polaryzacji. ?" % 8 10000100 + 00111100 ---------11000000 4"" !8 11000000 - 01111111 ---------- !! ! " # "# otrzymamy: 1 01000001 10,00110000 4. Normalizujemy wynik: 1 01000001 10,00110000 , . 1 01000010 1,000110000 " $ % /, # . 1010000100001 seeeeeeeeffff 8 DZIELENIE ( " % , " ", NADMIAR I NIEDOMIAR # " " " , % ! " @$ " " "" &$ Niedomiar w reprezentacji zmienn ! "% "% , " >" % " miejsce wtedy, kiedy w trakcie normalizacji mantysy pole bitowe % ! ane. W takim przypadku standardowo wynik jest kodowany jak zero. 9