Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Waga: |
2n-1/(-2n-1)
|
2n-2 |
... |
22 |
21 |
20 |
Cyfra: |
bn-1
|
bn-2
|
... |
b2
|
b1
|
b0
|
Pozycja: |
n-1 |
n-2 |
... |
2 |
1 |
0 |
Wagi pozycji są równe potędze podstawy 2 o wykładniku równym numerowi pozycji (w U2 najstarsza waga jest ujemna, co zaznaczono tutaj na czerwono). Numery pozycji kończą się na 0, jednak tworzą one malejący ciąg liczb całkowitych. Jeśli będziemy ten ciąg kontynuować poza 0, to otrzymamy numery ujemne:
Waga: |
2n-1/(-2n-1)
|
2n-2 |
... |
22 |
21 |
20 |
2-1 |
2-2 |
2-3 |
... |
Cyfra: |
bn-1
|
bn-2
|
... |
b2
|
b1
|
b0
|
b-1
|
b-2
|
b-3
|
... |
Pozycja: |
n-1 |
n-2 |
... |
2 |
1 |
0 |
-1 |
-2 |
-3 |
... |
Potęga 2 o wykładniku ujemnym jest ułamkiem:
Otrzymamy w ten sposób ułamkową liczbę NBS/U2. Zasada obliczania wartości jest taka sama jak poprzednio: dodajemy do siebie wagi pozycji, na których stoi cyfra 1.
Na przykład mamy liczbę U2, która ma 4 cyfry całkowite i cztery ułamkowe. Znaleźć wartość liczby: 1100,1001U2
Zapisujemy ponad cyframi wagi ich pozycji:
-23 |
22 |
21 |
20 |
|
2-1 |
2-2 |
2-3 |
2-4 |
-8
|
4 |
2 |
1 |
|
1/2 |
1/4 |
1/8 |
1/16 |
1 |
1 |
0 |
0 |
, |
1 |
0 |
0 |
1 |
3 |
2 |
1 |
0 |
|
-1 |
-2 |
-3 |
-4 |
Sumujemy wagi pozycji z cyfrą 1:
-8 + 4 + 1/2 + 1/16 = -8 + 4 + 8/16 + 1/16 = -8 + 49/16 = -37/16 = -3,4375
Jak widzisz, liczby stałoprzecinkowe są po prostu rozwinięciem liczb całkowitych przez dodanie pozycji o wagach ułamkowych.
Więcej na ten temat znajdziesz w obszernym artykule o kodowaniu liczb.
Prędkość
światła wynosi w próżni
W ciągu sekundy światło pokonuje
W ciągu minuty światło pokonuje
W ciągu godziny światło pokonuje
W ciągu dnia światło pokonuje
W ciągu roku światło pokonuje
Jak widzisz, posługiwanie się tak dużymi liczbami jest kłopotliwe, dlatego naukowcy zapisują duże/małe liczby w tzw. notacji naukowej:
23 841 040 790 903 616 000 000 ≈ 2,38 × 1022
Przyjrzyjmy się tej notacji. Liczba składa się z trzech części:
Liczbę o takiej postaci nazywamy liczbą zmiennoprzecinkową (ang. floating-point number). Powodem tej nazwy jest to, iż pozycja przecinka w mantysie może być dowolna:
2,38×1022 = 23,8×1021 = 0,0238×1024
Liczby zmiennoprzecinkowe pozwalają zapisywać wartości całkowite oraz niecałkowite:
19,55 = 1,955 × 101 = 1955 × 10-2
Mantysa jest liczbą stałoprzecinkową, cecha (wykładnik) jest liczbą całkowitą. Wartość liczby fp (zmiennoprzecinkowej) obliczamy zawsze wg wzoru:
LFP = m × pc LFP – wartość liczby fp m – mantysa p – podstawa systemu c – cecha |
Zwróć uwagę, iż wzór jest niezależny od systemu liczbowego, w którym pracujemy. Jeśli za podstawę p przyjmiemy 2, otrzymamy dwójkową liczbę zmiennoprzecinkową. Aby zakodować ją za pomocą bitów, musimy określić format jej składników. Na potrzeby tego rozdziału stwórzmy "szkolny" system zmiennoprzecinkowy. Umówmy się, że kod bitowy liczby fp będzie złożony z 8 bitów. Bity te podzielimy na dwie grupy: mantysę i cechę (podstawa wynosi 2, jest znana, więc nie ma potrzeby umieszczania jej w kodzie liczby):
cecha | mantysa | ||||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Cecha będzie reprezentowana przez 4 najstarsze bity
Mantysa będzie zawarta w czterech najmłodszych bitach
cecha | mantysa | ||||||
-8 | 4 | 2 | 1 | -1 | 1/2 | 1/4 | 1/8 |
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
Znając te wagi możemy obliczać wartość liczby fp.
Wyznaczamy cechę i mantysę:
c = 0011U2 = 2 + 1 = 3
m = 0,111U2 = 1/2 + 1/4 + 1/8 = 7/8 LFP = m × pc LFP = 7/8 × 23 LFP =7/8 × 8 LFP = 7 00110111FP = 7(10)
Wynik jest liczbą całkowitą.
Obliczyć wartość kodu
c = 1001U2 = -8 + 1 = -7
m = 1,111U2 = -1 + 7/8 = -1/8 LFP = m × pc LFP = -1/8 × 2-7 LFP = -1/8 × 1/128 LFP = -1/1024 = -0,0009765625(10)
Wynik jest liczbą ułamkową.
Cecha wpływa na zakres liczb reprezentowanych przez liczbę fp. Mantysa wpływa na precyzję liczby fp.
Jak przeliczyć daną wartość dziesiętną na naszą liczbę fp? Nie będę podawał tu algorytmu, bo w postaci ogólnej jest zbyt skomplikowany, pokażę jedynie, jak to zrobić na prostym przykładzie. Załóżmy, iż chcemy znaleźć postać fp liczby 12(10):
Najpierw tworzymy liczbę U2 z trzema miejscami po przecinku:
12(10) = 01100,000U2
Dla takiej liczby cecha wynosi 0000U2 (dlaczego?). Teraz musimy przesuwać w prawo bity mantysy, aż zajmą właściwe miejsce (zaznaczone tu na czerwono). Każde przesunięcie w prawo bitów mantysy wymaga zwiększenia o 1 cechy, aby liczba fp zachowała tę samą wartość:
cecha | mantysa | operacja |
0000 |
01100,000
|
START |
0001 |
00110,000
|
m-->>, c + 1 |
0010 |
00011,000
|
m-->>, c + 1 |
0011 |
00001,100
|
m-->>, c + 1 |
0100 |
00000,110
|
m-->>, c + 1 |
Po czterech przesunięciach w prawo, bity mantysy znalazły się na właściwym
miejscu. Mantysa ma postać 0,110. Cecha ma postać 0100. Łączymy cechę z mantysą
i otrzymujemy liczbę fp o wartości
Teraz spróbujmy w ten sam sposób zakodować liczbę 9(10):
9(10) = 01001,000(U2)
cecha | mantysa | operacja |
0000 |
01001,000
|
START |
0001 |
00100,100
|
m-->>, c + 1 |
0010 |
00010,010
|
m-->>, c + 1 |
0011 |
00001,001
|
m-->>, c + 1 |
0100 |
00000,100
|
m-->>, c + 1 |
Zauważ, iż po czwartym przesunięciu bitów mantysy, straciliśmy najmłodszy bit 1, ponieważ nie ma go jak zapisać w bitach ułamkowych mantysy. Nastąpiła utrata precyzji. Otrzymaliśmy liczbę:
c = 0100U2 = 4(10)
m = 0,100U2 = 1/2
LFP = 1/2 × 24 = 1/2 × 16 = 8
Zapamiętaj to zdarzenie - liczby fp nie są dokładne tak jak liczby całkowite. Liczba da się przedstawić dokładnie, jeśli można ją w całości umieścić w mantysie po przesunięciu bitowym, jeśli nie, otrzymamy wartość przybliżoną. Ilość bitów mantysy wpływa na dokładność, czyli na precyzję liczby fp. Liczby fp używane w komputerze są kodowane na 32 (precyzja 7 cyfr znaczących) lub na 64 bitach (precyzja 15 cyfr znaczących). Dokładniej omówimy to przy programowaniu.
Więcej informacji na ten temat znajdziesz w tym artykule.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.