Liczby zmiennoprzecinkowe
Operacje dodawania na liczbach zmiennoprzecinkowych
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:
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)
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
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
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.