Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

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
I LO w Tarnowie

Dwójkowy system stałoprzecinkowy

SPIS TREŚCI
Podrozdziały

Wartość dwójkowej liczby stałoprzecinkowej

Metodę obliczania wartości liczb stałoprzecinkowych opisaliśmy dokładnie w jednym z wcześniejszych rozdziałów. Po przecinku wagi pozycji są kolejnymi ujemnymi potęgami podstawy, zatem:

Zapamiętaj:

Wartość dziesiętna stałoprzecinkowej liczby binarnej

gdzie:

b - bit, cyfra dwójkowa 0 lub 1
n - liczba bitów całkowitych
m - liczba bitów ułamkowych

Przykład:

Obliczyć wartość stałoprzecinkowej liczby dwójkowej 110101,111011(2).

Sposób pierwszy

Obliczamy wartość części całkowitej sumując wagi pozycji zawierających cyfrę 1:

Identycznie obliczamy wartość części ułamkowej:

Łączymy obie części w całość otrzymując wynik:

Sposób drugi

Wartość części całkowitej obliczamy jak powyżej. Część ułamkową traktujemy chwilowo jak liczbę całkowitą, obliczamy jej wartość i wynik mnożymy przez wagę ostatniej pozycji liczby wejściowej:

Waga ostatniej pozycji wynosi 1/64, zatem

Łączymy część całkowitą z częścią ułamkową i otrzymujemy:

Sposób trzeci

Traktujemy część całkowitą i część ułamkową jak jedną liczbę całkowitą. Za pomocą schematu Hornera wyznaczamy wartość tej liczby, a wynik mnożymy przez wagę ostatniej pozycji liczby wejściowej:

W = 1
W = (1 + 1) + 1 = 3
W = (3 + 3) + 0 = 6
W = (6 + 6) + 1 = 13
W = (13 + 13) + 0 = 26
W = (26 + 26) + 1 = 53 - część całkowita obliczona, kontynuujemy z częścią ułamkową
W = (53 + 53) + 1 = 107
W = (107 + 107) + 1 = 215
W = (215 + 215) + 1 = 431
W = (431 + 431) + 0 = 862
W = (862 + 862) + 1 = 1725
W = (1725 + 1725) + 1 = 3451 - koniec części ułamkowej

Otrzymany wynik mnożymy przez wagę ostatniej pozycji, czyli przez 1/64:


Na początek:  podrozdziału   strony 

Zakres dwójkowych liczb stałoprzecinkowych

Odpowiedzmy sobie na pytanie: jaką największą liczbę można przedstawić za pomocą n bitów całkowitych i m bitów ułamkowych, gdzie n i m są liczbami naturalnymi ?

Liczbę stałoprzecinkową możemy potraktować jako złożenie dwóch liczb - całkowitej n-bitowej oraz ułamkowej m-bitowej.

Część całkowita dla n bitów przyjmuje największą wartość równą 2n - 1.

Część ułamkowa będzie największa, gdy wszystkie jej bity ustawione zostaną na 1. Dla m bitów wartość takiej liczby wyniesie (2m - 1) / 2m (porusz podany powyżej przykład obliczeniowy, gdzie wartość części ułamkowej liczby dwójkowej obliczamy jako liczbę całkowitą pomnożoną przez wagę ostatniej pozycji).

Łączymy obie części i otrzymujemy:

dla n bitów całkowitych i m bitów ułamkowych największą liczbą jest


Na początek:  podrozdziału   strony 

Przeliczanie liczb dziesiętnych na dwójkowe liczby stałoprzecinkowe

Metodę wyznaczania reprezentacji stałoprzecinkowej liczby dziesiętnej w innym systemie pozycyjnym opisaliśmy w jednym z wcześniejszych rozdziałów.

Sposób pierwszy

Liczbę rozdzielamy na część całkowitą oraz część ułamkową. Część całkowitą przeliczamy na system dwójkowy wg metody podanej w rozdziale poprzednim.

Kolejne bity części ułamkowej otrzymujemy mnożąc ją przez dwa (lub dodając do siebie). Część całkowita wyniku jest kolejną cyfrą binarną. Do następnych obliczeń bierzemy część ułamkową wyniku. Operację kontynuujemy dotąd, aż otrzymamy wynik zero lub wyznaczymy zadaną ilość cyfr ułamkowych.

Przykład:

Przeliczyć na system dwójkowy liczbę dziesiętną 5,645(10) z dokładnością do 15 ułamkowych cyfr binarnych.

Wyznaczamy część całkowitą liczby 5(10) = 101(2).

Wyznaczamy cyfry części ułamkowej 0,645(10)

0,645 · 2 =  1,29  - cyfra 1
0,29 · 2 =  0,58  - cyfra 0
0,58 · 2 =  1,16  - cyfra 1
0,16 · 2 =  0,32  - cyfra 0
0,32 · 2 =  0,64  - cyfra 0
0,64 · 2 =  1,28  - cyfra 1
0,28 · 2 =  0,56  - cyfra 0
0,56 · 2 =  1,12  - cyfra 1
0,12 · 2 =  0,24  - cyfra 0
0,24 · 2 =  0,48  - cyfra 0
0,48 · 2 =  0,96  - cyfra 0
0,96 · 2 =  1,92  - cyfra 1
0,92 · 2 =  1,84  - cyfra 1
0,84 · 2 =  1,68  - cyfra 1
0,68 · 2 =  1,36  - cyfra 1 - koniec, mamy 15 cyfr ułamkowych

Łączymy otrzymane wyniki:

5,645(10) = 101,101001010001111(2)

Ponieważ po osiągnięciu 15 cyfr część ułamkowa wciąż jest różna od 0, otrzymane rozwiązanie jest przybliżone (z dokładnością do 15 ułamkowych cyfr binarnych).

Sposób drugi

Załóżmy, iż chcemy znaleźć rozwinięcie binarne liczby dziesiętnej z dokładnością m bitów ułamkowych. W tym celu liczbę dziesiętną mnożymy przez 2m, bierzemy część całkowitą wyniku i przeliczamy ją na zapis binarny. Następnie za pomocą przecinka oddzielamy od końca zapisu m bitów i otrzymujemy zapis binarny wyjściowej liczby dziesiętnej z zadaną dokładnością.

Przykład:

Przeliczyć na system dwójkowy liczbę 154,35(10) z dokładnością do 10 bitów ułamkowych.

Liczbę mnożymy przez 210 = 1024, zaokrąglamy w dół do wartości całkowitej i przeliczamy na system dwójkowy:

[154,35 · 1024] = [158054,4] = 158054
158054 div 2 =  79027  i reszta 0
79027 div 2 =  39513  i reszta 1
39513 div 2 =  19756  i reszta 1
19756 div 2 =  9878  i reszta 0
9878 div 2 =  4939  i reszta 0
4939 div 2 =  2469  i reszta 1
2469 div 2 =  1234  i reszta 1
1234 div 2 =  617  i reszta 0
617 div 2 =  308  i reszta 1
308 div 2 =  154  i reszta 0
154 div 2 =  77  i reszta 0
77 div 2 =  38  i reszta 1
38 div 2 =  19  i reszta 0
19 div 2 =  9  i reszta 1
9 div 2 =  4  i reszta 1
4 div 2 =  2  i reszta 0
2 div 2 =  1  i reszta 0
1 div 2 =  0  i reszta 1, koniec
158054(10) = 100110100101100110(2)

Rozdzielamy przecinkiem 10 cyfr końcowych i otrzymujemy ostatecznie:

154,35(10) = 10011010,0101100110(2)

Jest to oczywiście wartość przybliżona (błąd jest mniejszy od 1/1000) :

Spróbuj uzasadnić poprawność tej metody.


Na początek:  podrozdziału   strony 

Błędy zaokrągleń

Analizując podane przykłady dochodzimy do wniosku, iż nie zawsze da się dokładnie przedstawić liczbę dziesiętną w systemie binarnym. Czasem otrzymujemy rozwinięcia nieskończone (okresowe). Jeśli rozwinięcie binarne posiada ograniczoną ilość cyfr ułamkowych, to wynik konwersji może być obarczony błędem zaokrąglenia - (ang. rounding error, zwany również błędem obcięcia - cancellation error).

Błąd bezwzględny (ang. absolute error) jest modułem różnicy wartości dokładnej i wartości otrzymanej liczby binarnej. Jeśli błąd ten wynosi 0, to liczba binarna dokładnie przedstawia daną wartość. W przeciwnym razie wartość binarna jest przybliżeniem wartości dokładnej.

gdzie
Δe - błąd bezwzględny
Wd - wartość dokładna, dziesiętna
Wb - wartość binarna po konwersji

Dla m bitów ułamkowych zawsze zachodzi (przeanalizuj sposób uzyskiwania cyfr ułamkowych):

Wynika z tego, iż błąd bezwzględny jest mniejszy od wagi najmniej znaczącej cyfry liczby binarnej.

Błąd względny (ang. relative error) powstaje po podzieleniu błędu bezwzględnego przez wartość dokładną:

gdzie
δe - błąd względny
Δe - błąd bezwzględny
Wd - wartość dokładna, różna od 0

Błąd względny pozwala nam się zorientować, jak dokładnie liczba binarna przedstawia zadaną wartość. Na przykład, jeśli błąd względny wyniesie 0,25, to znaczy, iż 1/4 wartości jest niedokładna. To czasem może być nie do przyjęcia!

Błąd względny można również wyrażać procentowo mnożąc δe przez 100:

Przykład:

Obliczyć błąd bezwzględny i względny rozwinięcia dwójkowego o 5 bitach ułamkowych dla liczby 0,3(10).

Wyznaczamy rozwinięcie dwójkowe wg jednej z opisanych wcześniej metod:

0,3(10) = 0,01001(2)

Obliczamy wartość otrzymanej liczby binarnej:

Wyznaczamy błędy:

Wd = 0,3
Wb = 0,28125

Δe = |Wd - Wb | = |25,3 - 25,28125| = 0,01875 - błąd bezwzględny

δe = Δe / |Wd | = 0,01875 / |0,3| = 0,0625 - błąd względny

δe% = δe · 100% = 0,0625 · 100% = 6,25% - błąd względny procentowy

Na początek:  podrozdziału   strony 

Zadania

Zadanie 1 (łatwe)

Obliczyć wartość dziesiętną następujących liczb dwójkowych:

11,101(2) = (10)  

.

101,1101(2) = (10)  

.

1101011,11001(2) = (10)  

.

Zadanie 2 (łatwe)

Przeliczyć podane liczby dziesiętne na zapis dwójkowy:

7,6875(10) = (2)  

.

15,84375(10) = (2)  

.

27,8359375(10) = (2)  

.

Zadanie 3 (dosyć łatwe)

Wyznaczyć 100 cyfr ułamkowych dwójkowego rozwinięcia liczby dziesiętnej 0,8(10).

Zadanie 4 (dosyć łatwe)

Wyznacz błąd względny i bezwzględny rozwinięcia dwójkowego liczby dziesiętnej 0,2(10) o dokładności 10 binarnych cyfr ułamkowych.


Na początek:  podrozdziału   strony 

Zobacz dalej...

Kody binarne | Naturalny system dwójkowy | Operacje arytmetyczne w systemie dwójkowym | Operacje logiczne na bitach | Konwersje dwójkowo ósemkowe i szesnastkowe


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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.