Zapis staopozyyjny W oblizeniah zahodzi zasami potrzeba posenia si lizbami posiadajymi z amkow. Wród takih lizb wyróniamy takie, które posiadaj skozon ilo miejs po przeinku lub rozwinieie okresowe (lizby wymierne) oraz takie, które posiadaj rozwiniia nieskozone nieokresowe (lizby niewymierne). W przypadku takih lizb komputer musi ywa przybli, a ih dokadno zaley od iloi miejs po przeinku. Zapisuj lizb rzezywist, piszemy np. tak: 90,625. Kilka yfr tworzy normaln z akowit lizby, dalej wystpuje przeinek ( w programowaniu kropka ), za po nim kolejne yfry, które tworz z uamkow. W kodzie binarnym lizb t zapisujemy jako 0000,0. Inny przykad pokazuje lizb 6 bitow:, 255 255 255 255,99609375 28 64 Gdyby zapisywa lizby w taki sam sposób, byoby moliwe bezporednie przehowywanie ih w pamii komputera. Pewna ilo bitów byaby uznawana za yfry dwójkowe przed przeinkiem, a pozostae bity za yfry po przeinku. Taki kod z umieszzonym na stae przeinkiem to kod staoprzeinkowy albo staopozyyjny. Kod ten ma jednak wiele wad: 32 may zakres lizb moliwyh do zakodowania maa dokadno (preyzja) zi uamkowej trudny do oszaowania bd oblize. Z tyh powodów zapis staopozyyjny nie jest uywany dla lizb rzezywistyh. Zapis zmiennopozyyjny 6 4 2 W wielu dziedzinah lizby zapisuje si w notaji naukowej jest lizba akowit. Na przykad: 245,236 =,245236 0 3 ; 0,00236 = 2,36 0-3. m, gdzie ;0 L 0 m za W takim zapisie mamy dwie lizby: m lizba znormalizowana i, która mówi o ile miejs naley przesun przeinek. Sposób ten jest zsto uywany do zapisu lizb bardzo duyh
lub bardzo mayh. Np. zamiast 690 000 000 000 mona napisa króej 6,9 0 0,000 000 000 000 034 piszemy 3,4 0 -. lub zamiast Z powodu zmiany poenia przeinka, kod ten nazywamy kodem zmiennoprzeinkowym lub zmiennopozyyjnym i oznazamy FP2. Metoda ta znalaza równie zastosowanie w informatye i jest uywana do zapisu lizb rzezywistyh w wersji binarnej. Wzór bdzie podobny do poprzedniego: L m 2 z. Parametr m (mantysa) i (eha) maj takie samo znazenie jak wzeniej, za z oznaza bit znaku (0 zyli + lub zyli - ). Kodowanie w FP2 Do lizby zapisanej w kodzie FP2 zawsze trzeba poda, ile bitów zajtyh jest przez mantys, a ile przez eh. Oto budowa przykadowego 6-bitowego kodu FP2: znak Ceha mantysa bit 5 4 3 2 0 9 8 7 6 5 4 3 2 0 wag a z -6 8 4 2 2-2 -2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-0 Jako przykad zapisz lizb 984,045 w kodzie FP2 o budowie przedstawionej w powyszej tabele. W tym elu wykonujemy nastpuje kroki: Ustalamy znak. Lizba jest dodatnia, wi z= 0; Gdyby bya ujemna, wartoi bitu byoby, dalej rozpatrywalibymy ju lizb przeiwn zyli pozbawion tego minusa (dodatni). Zapisujemy t lizb w normalnym systemie binarnym. Jako doelow lizb bitów mantysy przyjmujemy o jeden wiej, ni moe przehowa. 984 : 2 0 0,045 2 0 992 : 2 0 0,083 2 0 496 : 2 0 0,66 2 0 248 : 2 0 0,332 2 0 24 : 2 0 0,664 2 62 : 2 0 0,328 2 0 3 : 2 0,656 2
5 : 2 0,32 2 0 7 : 2 0,624 2 3 : 2 0,248 2 0 : 2 0,496 2 0 Przy zamianie zi uamkowej ostatni bit zosta zaokrglony do. Po oblizeniah nasza lizba ma posta: 984,045 000000,0000000. Dokonujemy normalizaji zyli przesuwamy przeinek tak, aby przed przeinkiem znajdowaa si tylko jedna niezerowa yfra. Otrzymujemy:,0000000000000 Jedyn moliw niezerow yfr w systemie dwójkowym jest. Skoro przed przeinkiem zawsze stoi pojedynza jedynka, moemy zapamita, e ona tam jest i oszzdzi jednego bitu nie zapisuj jej. Ostateznie mantys utworz kolejne yfry spisane od przeinka dotd, dokd zmieszz si w przyjtej dugoi mantysy (u nas 0 bitów). Gdybymy mili mniej yfr, ni jest potrzebne, mantys uzupenia si zerami z prawej strony. Czyli mantysa ma warto m = 000000 Teraz mona zaj si my si eh. Poniewa przeinek przesunlimy o 0 miejs w lewo, wi jako eh trzeba bdzie zapisa lizb 0 w kodzie U2, który w naszym przykadzie bdzie skada si z piiu bitów. Trzeba odróni ujemn warto ehy od ujemnej wartoi mantysy. Tutaj obydwie te lizby s dodatnie, ale równie dobrze mogyby by ujemne. Ujemna mantysa oznaza, e kodowana lizba jest ujemna. Ujemna eha oznaza, e podzas normalizowania przesuwamy przeinek w prawo. W naszym wypadku eha wyglda tak: (0) 0 = (000) U2. znak Ceha Mantysa bit 5 4 3 2 0 9 8 7 6 5 4 3 2 0 waga z -6 8 4 2 2-2 -2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-0 lizba 0 0 0 0 0 0 0 0 0 0 Jak wida, mantys zapisuje si w postai lizby naturalnej i osobnego bitu znaku, a eh za pomo kodu uzupenie U2. Co wiej, na shemaie budowy
kodu FP2 wida, e znak mantysy jest od samej mantysy oddzielony eh. Mamy ju wszystkie zi lizby. Zapisujemy j w tabele: Nasza lizba ma posta: 984,045 = (0 000 000000) FP2 Dekodowanie Jako przykad rozkodujemy otrzyman lizb. Pamitaj, o znazeniu kadej grupy bitów, rozpatrujemy poszzególne elementy: z = 0, a wi mamy: (-) 0 ; m = 000000, zyli mamy: 2 - + 2-2 + 2-3 + 2-4 ; = (000) U2 = 0, a wi mamy 2 0 ; Zgodnie ze wzorem L m 2 z, otrzymujemy L=(-) 0 (2 0 +2 - +2-2 +2-3 +2-4 ) 2 0. Pogrubiony skadnik 2 0 odpowiada jedyne przed przeinkiem, któr zapamitalimy i nie zapisalimy w zakodowanej lizbie, oszzdzaj jeden bit. Po wymnoeniu zawartoi nawiasu przez 2 0 i pominiiu lizby (-) 0 = otrzymujemy: L = 2 0 + 2 9 + 2 8 + 2 7 + 2 6 = 024 + 52 + + 28 + 64 = 984. Otrzymany wynik nie jest identyzny jest z lizb 984,045, która mielimy na poztku. d w oblizeniah powsta podzas zaokrglenia przy zamianie zi uamkowej na kod binarny. Preyzja lizby zaley te od iloi znaków przeznazonyh na mantys, a zakres lizby od iloi znaków przeznazonyh na eh. Dlatego, aby kodowanie byo bardziej preyzyjne do zapisu lizb zmiennopozyyjnyh uywane s kody 32, 64, nawet 80-bitowe. Lizby 32-bitowe oferuj zakres od,5 0-25 do 3,4 0 38 po stronie dodatniej i podobny zakres po stronie ujemnej. W jzykah C++ i Java lizby o tym zakresie maj nazw float, w Delphi single, za w starszyh wersjah Pasala real. Lizby te s okrelane jako lizby o pojedynzej preyzji. Lizby 64-bitowe, zarówno po stronie ujemnej, jak i dodatniej posiadaj zakres od 5,0 0-324 do,7 0 308. S nazywane s jako lizby o podwójnej preyzji i w wikszoi jzyków (C++, Java, Delphi) okrelane nazwa double. Lizby 80-bitowe nazywane s long double (C++) lub exetendend (Delphi). Maj one zakres wartoi dodatnih i ujemnyh od 3,4 0-4932 do, 0 4932. Standard kodu FP2 przewiduje dodatkowo wartoi spejalne:
Maksymalna warto ehy przy zerowej wartoi mantysy daje w zalenoi od bitu znaku mantysy warto zwan INF lub +INF (oznazaj odpowiednio - i +). Maksymalna warto ehy przy jakiejkolwiek niezerowej wartoi mantysy to tzw. NaN ( Not a Number), zyli warto, która nie jest poprawn lizb.