Zaokrąglanie liczby rzeczywistej w granicy błędu względnego
Zaokrąglanie liczby rzeczywistej w granicy błędu względnego
Spróbujemy stworzyć program obliczający kolejne zaokrąglenia podanej liczby, za każdym razem do mniejszej liczby miejsc po przecinku. Warunkiem zakończenia operacji będzie przekroczenie ustalonej wartości błędu względnegobłędu względnego. W ten sposób otrzymamy największe możliwe zaokrąglenie przy ustalonych warunkach. Takie rozwiązanie jest pożądane w sytuacji, gdy operujemy mniej dokładnymi liczbami, jednak chcemy zminimalizować błąd do ustalonego stopnia.
Specyfikacja:
Dane:
x– wartość przekazana do zaokrąglenia przez użytkownika; liczba rzeczywista z przedziału (0, 1), posiadająca 7 cyfr po przecinkubladKrytyczny– wartość błędu względnego, po której osiągnięciu proces zaokrąglania zostanie przerwany; liczba rzeczywista z przedziału (0, 100)
Wynik:
Program na standardowym wyjściu wypisuje wyznaczone zaokrąglenie podanej liczby.
Rozważmy próg błędu względnego równy 2%. Liczba 0,511 może zostać zaokrąglona do 0,51 – przez co uzyskamy błąd względny 0,1957%.
Zaokrągliliśmy wynik dzielenia.
Liczbę 0,51 możemy dalej zaokrąglić do 0,5, co w stosunku do oryginalnej wartości daje nam błąd 2,153%, który przekracza wartość krytyczną. Z czego wynika, że zaokrąglenie mieszczące się w ustalonym błędzie względnym wynosi 0,51.
Dobierzmy odpowiednie biblioteki. Wykorzystamy podstawowe operacje matematyczne, jak zaokrąglanie i wyliczanie wartości bezwzględnej, dlatego niezbędna będzie biblioteka <cmath>. Będziemy pracować na niewielkich liczbach z przedziału (0, 1) mających siedem cyfr po przecinku. Wyniki należy wyświetlać z odpowiednią precyzją, do czego posłuży nam funkcja setprecision z biblioteki <iomanip>. Pełny zbiór bibliotek wygląda następująco:
Skorzystamy również z przestrzeni nazw std.
Kolejnym krokiem jest napisanie funkcji odpowiedzialnej za zaokrąglanie podanej liczby. Będzie ona zawierać dwa argumenty. Jeden to wspomniana liczba, drugi – wartość określająca, do ilu miejsc po przecinku będziemy zaokrąglać. Wykorzystamy funkcję pow podnoszącą wartość do podanej potęgi. Jako wykładnik posłuży nam pożądana liczba cyfr po przecinku po operacji zaokrąglenia. Jeżeli chcemy uzyskać jedną cyfrę po przecinku, wówczas niezbędne jest pomnożenie pierwotnej wartości przez 10Indeks górny 11. Po przeprowadzeniu tego mnożenia, zaokrąglamy otrzymaną liczbę, a następnie dzielimy ją przez 10Indeks górny 11. Rezultatem tej operacji będzie gotowa, zaokrąglona liczba z jedną cyfrą po przecinku.
Zadeklarujmy teraz niezbędne zmienne. Należą do nich opisane w specyfikacji x oraz bladKrytyczny, a także:
xZaokraglony– zaokrąglona liczba,bladBezwzgledny– wyliczona wartość błędu bezwzględnego,bladWzgledny– wyliczona wartość błędu względnego.
Zmienne x oraz bladKrytyczny pobierzemy od użytkownika. Pamiętajmy o warunkach, które powinna spełnić liczba przekazana do zaokrąglenia — ma to być liczba rzeczywista z przedziału (0, 1), posiadająca 7 cyfr po przecinku.
Po pobraniu niezbędnych informacji, możemy przejść do zaokrąglania liczby. Cały proces zrealizujemy za pomocą pętli for. W każdym kolejnym wykonaniu pętli zaokrąglona liczba będzie miała jedną cyfrę po przecinku mniej. Aby tego dokonać, jako drugi argument funkcji zaokraglenie wykorzystamy wartość 7‑i. Następnie obliczymy wartości błędu bezwzględnego i względnego. Przydatna będzie tu funkcja fabs zwracająca wartość bezwzględną liczby.
Wciąż jednak brakuje nam warunku zatrzymania pętli w związku z przekroczeniem ustalonej wartości błędu. Zrealizujemy go za pomocą instrukcji if. Pamiętajmy, że na końcu działania programu wypisana ma zostać ostatnia wartość zaokrąglenia, dla której nie przekroczono warunku krytycznego. Dlatego w wypadku spełnienia warunku pętli nadpiszemy aktualną wartość zaokrąglenia poprzednią wartością.
Teraz pozostaje już wyłącznie wypisać końcowy wynik, pamiętając o wymogu odpowiedniej precyzji. Cały program prezentuje się następująco:
Dla danych z omówionego wcześniej przykładu (x wynoszące 0,511, bladKrytyczny równy 2%) otrzymujemy wynik 0.51, czyli taki, jakiego się spodziewaliśmy.
Dla danych: x równe 0,1234567, bladKrytyczny wynoszący 3%, otrzymujemy wynik 0,12 – jest to zaokrąglenie z błędem względnym wynoszącym około 2.7%. Gdybyśmy liczbę zaokrąglili do 0,1, próg błędu zostałby przekroczony.
Słownik
wyraża bezwzględną różnicę pomiędzy wartością zmierzoną a dokładną; obliczamy go zgodnie ze wzorem:
gdzie to dokładna wartość, oznacza zmierzoną wartość, a – błąd bezwzględny
informuje, o ile procent różni się wartość zmierzona od dokładnej; obliczamy go zgodnie ze wzorem:
gdzie to dokładna wartość, oznacza zmierzoną wartość, – błąd bezwzględny, a za pomocą określamy błąd względny