Ćwiczenie X

 

1. Pojęcia

            Liczby zmiennoprzecinkowe

            Operacje dodawania na liczbach zmiennoprzecinkowych

 

2. Wiadomości

 

2.1 Liczby zmiennoprzecinkowe

 

 

Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej zwanej naukową. Ze względu na wygodę operowania na takich liczbach przyjmuje się ograniczony zakres na mantysę i cechę powoduje to, że liczba jest określana z pewną dokładnością i może występować w określonym zakresie.

 

.

 

 

 

IEEE-754 single

Wartość liczby zmiennoprzecinkowej jest obliczana wg wzoru:

 

x = M \cdot B^E

 

 

gdzie:

•              M (ang. mantissa) - znormalizowana mantysa, liczba ułamkowa

•              B (ang. base) - podstawa systemu liczbowego (2 dla systemów komputerowych)

•              M (ang. mantissa) - znormalizowana mantysa, liczba ułamkowa

 

Mantysa jest znormalizowana, tj. należy do przedziału [1,B) (przedział prawostronnie otwarty!). Jeżeli M jest stałe, a E zmienia się, wówczas przesunięciu ulega przecinek – stąd właśnie pochodzi nazwa tej reprezentacji.

Zarówno dla mantysy jak i wykładnika ilość cyfr jest z góry ustalona. Zatem dana liczba jest reprezentowana z pewną skończoną dokładnością i należy do policzalnego zbioru wartości.

 

 

• Reprezentacja stałopozycyjna

w praktyce tylko dla liczb całkowitych

 

• Reprezentacja zmiennopozycyjna (zmiennoprzecinkowa)

 

mantysa i cecha, liczba = mantysa 2cecha

18.5 = 0.185 102 = 0.100101 2101

 

rozdzielczość i skończoność komputerowych liczb rzeczywistych

 

typy 4-bajtowe (3 bajty mantysy i 1 bajt cechy), 6-bajtowe, 8-bajtowe

(podwójnej precyzji)

 

należy być ostrożnym przy dodawaniu małej liczby zmiennoprzecinkowej

do dużej (mała może zniknąć)

 

wartości, które nie są poprawnymi liczbami (NAN - not a number)

 

 

2.2 Format zmiennoprzecinkowy

 

Reprezentacja liczby w formacie zmiennoprzecinkowym:

 

Algorytm zamiany liczby ułamkowej na format zmiennoprzecinkowy:

 

Zapisać liczbę A = 12.5 2 formacie zmiennoprzecinkowym

 

1) Przedstawienie zadanej liczby ułamkowej w postaci sumy składników będących potęgami dwójki

 

                        12.5 = (8 + 4 + 0.5)

 

2) Wykonanie operacji dzielenia zadanej sumy (potęg dwójki) przez maksymalną potęgę dwójki utworzonej sumy

 

                        (8 + 4 + 0.5) / 16

 

3) Jednoczesne pomnożenie wyrażania z punktu 2 przez maksymalną potęgę dwójki:

 

 

                        12.5 = [(8 + 4 + 0.5) / 16 ] * 2^4

 

 

4) Poszczególne składniki sumy dzielimy przez maksymalną potęgę dwójki

 

12.5 * 16 / 16 = (8 + 4 + 0.5) / 16 * 2^4 = (1/2 + ¼ + 1/32) * 2^4

 

czyli mantysy:

 

     12.5 = 11001

 

Mantysa zapisywana jest na 5 bitach, najstarszy ma wartość 0.5, drugi 0.25, trzeci 0.125 itd.

 

5) Zapisanie cechy w odpowiedniej postaci:

 

            Bit najstarszy dla wartości dodatnich (potęgi) jest ustawiony na wartość 1

            Pozostałe bity reprezentują wartość w NKB zadanej potęgi liczby

 

Czyli w omawianym przypadku

 

            2^4 = 1100

 

Połączenie cechy z mantysą:

 

           

A = 11001|1100

 

2.3 Operacje dodawania w formacie zmiennoprzecinkowym

 

Dodawanie dwu liczb w formacie zmiennoprzecinkowym wymaga wyrównania potęg – cech – dwu liczb biorących udział w dodawaniu. Operację wyrównywania wykonuje się poprzez dzielenie mniejszej cechy przez odpowiednią potęgę dwójki.

 

 

Przykład I:

 

Wykonać operację dodawania 12.5 do -3.5.

 

A = 12.5

B = -3.5

 

k = 5 – mantysa

n = 9 – mantysa + cecha

c = 9 – 5 cecha

 

A = 12.5 * 16 / 16 = (8 + 4 + 0.5) / 16 * 2^4 = (1/2 + ¼ + 1/32) * 2^4

A = 11001|1100

 

B = -3.5 = (-4 + 0.5) /4 * 2^2

B = 100100|1010

 

mB / 2^2 = 111001|1100

 

 

mA            0 1 1 0 0 1

                  1 1 1 0 0 1

               1 1 1 0 0 1 0               

             ===========

     

                0 1  0 0 1 0

 

 

A + B = |010010|1100 = (1/2 + 1/16)*16 = 7.0

 

Przykład II

 

 

    A = 10.5

    B = 7.0

 

    A – B = ?

 

    k = 5 – mantysa

    n = 9 – mantysa + cecha

    c = 9 – 5 cecha

 

    A = 10.5 * 16 / 16 = (8 + 2 + 0.5) / 16 * 2^4 = (1/2 + 1/8 + 1/32) * 2^4

    A = 010101|1100

 

    B = 7.0 = (4 + 2 + 1) /8 * 2^3

    B = 011100|1011

 

    mB / 2^1 = 001110|1100

 

 

    mA      0 1 0 1 0 1

    ~mB    1 1 0 0 0 1

                       

                     1 1 0 0 0 1 1               

                   ===========

           

                   1 | 0  0  0 1 1 1

 

 

    A + B = |000111|1100 = (1/8 + 1/16 + 1/32)*16 = 3.5

 

 

3. Zadania i ćwiczenia

Zadanie

 

Wykonać następujące operacje zmiennoprzecinkowe:

 

a)

 

A = 11.0

B = 6.5

 

A + B = ?

 

b)

 

A = 58

B = -9.5

 

A – B = ?

 

 

c)

 

A = -15.5

B = 13

 

A + B = ?

 

 

d)

 

 

A = 11

B = 6

 

A - B = ?

 

 

 

Zadanie  (2 pkt)

 

Napisać zapisujący liczbę podaną w formacie dziesiętnym np. 123.5 w postaci liczby zmiennoprzecinkowej (format podany na ćwiczeniach).

 

 

Projekt

 

Zapis liczby dowolnej precyzji w formacie zmiennoprzecinkowym. Liczba powinna zostać zapisana w formacie mantysy i cechy, Wykładnik zapisywany w 1 bajcie jako liczba U2 z przedziału (-128, 127).

 

Operacje dodawania i odejmowania zmiennoprzecinkowe.