Zadania z tego rozdziału powinny wykazać pewne charakterystyczne własności arytmetyki zmiennopozycyjnej.
W octavie wykorzystywane są domyślnie liczby zmiennopozycyjne o podwójnej precyzji, jakkolwiek w najnowszych wersjach octave'a można również sztucznie wymusić używanie zmiennych w precyzji pojedynczej przy pomocy funkcji single(a)
zwracającej
zmienną pojedynczej precyzji z tą samą wartością.
Jedną z ważnych własności arytmetyki zmiennopozycyjnej, która wynika z jej konstrukcji, jest to, że odejmowanie
dwóch wartości o tym samym znaku o małej różnicy może skutkować
dużą utratą dokładności względnej.
- Funkcje
single(a)
ieps
.
Wywołaj pomoc do tych funkcji w octave'ie.
Sprawdź, czy prawdą jest, że
obliczone w arytmetyce podwójnej precyzji w octave'ie jest większe od jeden.
Przyjmij, żei sprawdź, czy ponownie
jest większe od
jeden. - Epsilon maszynowy w arytmetyce podwójnej precyzji
Wyznacz samodzielnie epsilon maszynowy - czyli najmniejszą liczbę w arytmetyce zmiennopozycyjnej taką, że po dodaniu jej do jeden otrzymujemy liczbę większą od jeden. Będziemy szukali liczby postaci
dla t - ilości bitów mantysy.
Porównaj zeps
komendą octave'a.
Zadanie można też wykonać w C/C++. Czy otrzymane wyniki są takie same jak te otrzymane w octavie (dla liczb typu double)? - Epsilon maszynowy w arytmetyce pojedynczej precyzji
\nopagebreak
Powtórz poprzednie zadanie dla arytmetyki pojedynczej precyzji. Funkcja octave'asingle(x)
tworzy zmienne takiego typu. Wykorzystując tę funkcję ponownie wyznacz epsilon maszynowy jako liczbę postaci, ale dla liczb w pojedynczej precyzji.
- Narysuj wykres funkcji
na
dla różnych wartości
dla
. Tutaj ważne jest aby obliczać wartość
dokładnie ze wzorów:
, choć matematycznie
.
- Policz
algorytmem wprost wynikającym z tego wzoru, a następnie z wykorzystaniem równoważnego wzoru
tzn. proszę zastosować:
Algorytm 1
oraz
Algorytm 2
dla
i
.
Czy widać różnicę w wyniku?Powtórz zadanie w arytmetyce pojedynczej precyzji, tzn. z wykorzystaniem funkcji octave'a
single(x)
. - Wykres wielomianu na dwa sposoby
Oblicz wartości wielomianu
na siatce równomiernej
punktowej na
dla
za pomocą
dwóch algorytmów:\\
Algorytm 1\\ Algorytm 2
Matematycznie
, ale wyniki obliczone w arytmetyce zmiennopozycyjnej mogą się różnić.
Narysuj wykresy obu funkcji i policz błąd
, czyli
. Tu
dla
.
Wektormożna utworzyć w octavie przy pomocy funkcji octave'a
linspace()
. - Powtórz poprzednie zadanie dla arytmetyki pojedynczej precyzji, tzn. powtórz obliczenia wielomianu
na odcinku
dla
dla zmiennych w pojedynczej precyzji uzyskanych za pomocą funkcji octave'a:
single(x)
. Narysuj
wykresy wielomianu obliczanego obydwoma algorytmami. - Przybliżenie
z rozwinięcia w szereg
. Za odpowiednią aproksymacje
bierzemy najpierw sto pierwszych elementów szeregu czyli przybliżamy
przez
dla
, a potem przybliżamy przez tysiąc elementów szeregu, czyli ustalamy
.
Sprawdź błąd względny
dla
od
do
(np. dla liczb różniących się o dziesięć, czyli
dla
) dla obu wartości
.
Czy błędy dla liczb ujemnych i dodatnich są tego samego rzędu?
Jak zmodyfikować
powyższą metodę przybliżonego obliczania funkcji eksponencjalnejdla
tak aby błąd względny był na tym samym poziomie co dla
?
- Policz całki
dwoma algorytmami
ze wzoruPierwszy algorytm przyjmuje
i oblicza z powyższego wzoru kolejne
dla
.
Drugi algorytm wykorzystuje fakt, że
\begin{equation} (#)
\frac{1}{(n+1)6} \leq I_n\leq \frac{1}{(n+1)5}
\end{equation}
W tym algorytmie przyjmujemy zajakąkolwiek wartość z tego przedziału np.
i
iterujemy w tył, tzn. dlaobliczamy
Porównaj wyniki obu algorytmów dla
oraz sprawdź czy wyniki otrzymane w octave'ie spełniają oszacowanie
( [link]) dla.
Dlaczego jeden z algorytmów działa zdecydowanie lepiej w arytmetyce zmiennopozycyjnej?
Jako dodatkowe zadanie teoretyczne pozostawimy uzasadnienie wzoru rekurencyjnego i oszacowania ( [link]) wykorzystywanych w algorytmach.
- Zastosuj algorytm bisekcji (algorytm połowienia odcinka) dla funkcji
liczonej z wzoru na rozwinięcie dwumianu
startując z
a
.
Jako warunek zakończenia działania algorytmu przyjmujemy, że błąd jest mniejszy od(za przybliżenie rozwiązania przyjmujemy środek danego odcinka w metodzie bisekcji, czyli warunkiem zakończenia iteracji jest to, że długości odcinka, w którym jest rozwiązanie powinna być mniejsza od
).
Czy algorytm zwraca przybliżenie liczby dwa jedynego pierwiastka tego wielomianu?
Narysuj wykresy tej funkcji obliczone z obu wzorów. tzn.
i
na odcinkach
dla
. Czy z wykresów wynika, że ten wielomian ma tylko jedno miejsce zerowe w otoczeniu dwa?