Dokładność obliczeń 10/9/2005 Liczby zmiennoprzecinkowe Floating point numbers ! Dokładność obliczeń Kwestia reprezentacji Przykład 1 Liczby na jednym bajcie… Analogowo czy cyfrowo? ! ! Już w roku 1945 John von Neuman zauważył, że z powodu błędów zaokrągleń nie będzie możliwe dokładne reprezentowanie liczb rzeczywistych w komputerach. Co więcej sugerował on nawet, ze komputery nie powinny pracować na takich liczbach! Życie wymogło jednak na twórcach sprzętu i oprogramowania dostępność liczb rzeczywistych 2/12 Przypomnienie… ! ! ! ! Pouczający przykład Nie wszystkie liczby mogą być dokładnie reprezentowane przez skończoną liczbę znaków ! ! ! ! Reprezentacja, w której mamy do czynienia z określoną liczbą cyfr znaczących Różnica miedzy dwoma sąsiednimi wartościami (liczbami) nie jest stała w całym zakresie ©2005 R. Robert ‘RoG@j’ Gajewski ! 1.72 x 10-6 i 1.73 x 10-6 wynosi więc 0.00000001=1.0 x 10-8 ‘Duże’ liczby ! 9.14 x 106 i 9.15 x 106 wynosi zaś 1000 czyli 1.0 x 104 Jakie to niesie konsekwencje? ! Operacje na takich liczbach… 4/12 Prosta operacja ©2005 R. Robert ‘RoG@j’ Gajewski Dwa rodzaje błędów 9140000.00000000 + 0.00000172 9140000.00000172 ! ! Wyobraź sobie, że w ten sposób będą naliczane procenty w banku… ©2005 R. Robert ‘RoG@j’ Gajewski (C)2005 R.Robert 'RoG@j' Gajewski Proste przykłady pokazują dwie kategorie błędów ‘komputerowych’ ! W naszej arytmetyce wynik będzie… 9140000 5/12 Mantysa ma trzy cyfry, a cecha zakres ±6 ‘Małe’ liczby ! Liczba wymierna 1/3≅0.333333… Liczba niewymierna π=3.141529… 3/12 ©2005 R. Robert ‘RoG@j’ Gajewski 6/12 Błąd reprezentacji wynika z faktu, że nie każda liczba może być dokładnie reprezentowana w pamięci komputera Błąd zaokrągleń operacji wynikający stąd, że jeśli nawet operacja zostanie wykonana dokładnie, to nie zawsze można zapisać dokładnie jej wynik ©2005 R. Robert ‘RoG@j’ Gajewski 1 Dokładność obliczeń 10/9/2005 Akademicki przykład ! Wyobraźmy sobie, że do zapamiętywania liczby stosujemy tylko jeden bajt ! ! ! ! Irytujący przykład… ! ! Najstarszy bit to znak (1 to minus!) Pole wykładnika (3 bity) Pole części ułamkowej (4 bity) ! 01101011 ! ! ! ! ! 0 czyli znak + 110 wykładnik zapisany z nadmiarem czyli 2 1011 ułamek Przesuwamy przecinek o 2 : 10.11 czyli 2 3/4 7/12 ©2005 R. Robert ‘RoG@j’ Gajewski ! ! ! ©2005 R. Robert ‘RoG@j’ Gajewski ! ! ! 10/12 ! ! ! 11/12 1/8 + 1/8 da nam ¼ co dobrze ‘zapamiętuje’ się 2 ½ + ¼ = 2 ¾ czyli tyle, ile ma być! ©2005 R. Robert ‘RoG@j’ Gajewski Analogowy kontra cyfrowy… Kolejność wykonywanych działań może okazać się istotna! ! 2 ½ + 1/8 = 2 5/8 co jest źle reprezentowane binarnie w skromnej bajtowej arytmetyce – nasz wynik zostanie zapamiętany jako 2 ½ Kolejne dodawanie da ten sam wynik Dodawanie od prawej do lewej ! Istotne spostrzeżenie ! 2 ½ + 1/8 + 1/8 Dodawanie od lewej do prawej… ! Pomyśl, co będzie, jeśli będą w ten sposób przeprowadzane manipulacje na wielkościach finansowych… 9/12 ©2005 R. Robert ‘RoG@j’ Gajewski Przykład numeryczny W systemie dziesiętnym mamy świadomość błędów wynikających z nieskończonych rozwinięć ułamków takich jak 1/3 W systemie binarnym taka ‘przyzwoita’ wartość jak 1/10 nie ma dokładnego rozwinięcia dwójkowego ! Zapiszmy tę wartość binarnie: 10.101 W polu części ułamkowej zabraknie miejsca na prawą skrajną jedynkę reprezentująca ‘ostatnie’ 1/8 – zignorujemy ten problem… Otrzymamy więc 01101010 czyli 2 ½ Popełniony błąd to błąd zaokrąglenia (błąd obcięcia) – truncation error 8/12 Jeszcze raz porównanie… ! Spróbujmy w tej notacji przedstawić 2 5/8 ! Problem występuje gdy dodajemy liczby ‘małe’ do liczb ‘dużych’. Dochodzić wtedy może do obcięcia ‘małych’ wartości Receptą jest sumowanie najpierw liczb ‘małych’ ! ! ! Komercyjne programy bronią przed tego typu problemami, ale… ©2005 R. Robert ‘RoG@j’ Gajewski (C)2005 R.Robert 'RoG@j' Gajewski Niech informacja będzie przechowywana w… wiadrach Wadą analogowych wiader jest to, że odczyt jest wrażliwy na warunki ! 12/12 Wiadra cyfrowe to tylko zero i jeden W analogowym wiadrze można przechować więcej informacji Cyfrowo łatwo jest określić, czy woda jest czy jej nie ma! ©2005 R. Robert ‘RoG@j’ Gajewski 2