Języki programowania, takie jak Scheme (R5RS) i Python ( patrz to pytanie ), idą w kierunku najbliższej parzystej liczby całkowitej, gdy wartość jest dokładnie pomiędzy otaczającymi liczbami całkowitymi.
Jakie jest tego uzasadnienie?
Czy istnieje pomysł matematyczny, który ułatwia uzasadnienie następujących obliczeń?
(R5RS odwołuje się do standardu zmiennoprzecinkowego IEEE jako źródła tego zachowania).
scheme
numbers
numeric-precision
python-3.x
Profpatsch
źródło
źródło
Odpowiedzi:
Jakiś czas temu zbudowałem program testowy do sukcesywnego zaokrąglania, ponieważ jest to w zasadzie najgorszy test warunków skrajnych dla algorytmu zaokrąglania.
Dla każdej liczby od 0 do 9 999 zaokrągla najpierw do najbliższej 10, następnie do najbliższej 100, a następnie do najbliższej 1000. (Można również pomyśleć o tym, że 10 000 punktów w [0,1) jest zaokrąglanych do 3 miejsc, a następnie do 2, a następnie do 1.) Ten zestaw liczb ma średnią wartość 4999,5.
Jeśli wszystkie trzy zaokrąglenia są wykonywane przy użyciu metody „zaokrąglanie do połowy w górę”, wyniki są następujące (pierwsza kolumna to wynik zaokrąglania, druga kolumna to liczba liczb zaokrąglona do tego wyniku - tzn. Jest to histogram).
Wynik różni się od pojedynczej „zaokrąglonej połowy w górę” do najbliższego tysiąca 550 razy na 10 000, a średnia zaokrąglona wartość wynosi 5055 (więcej niż pierwotna średnia o 55,5).
Jeśli wszystkie trzy zaokrąglenia są wykonywane przez „zaokrąglenie do połowy w dół”, wówczas wyniki są następujące:
Wynik różni się od pojedynczej „zaokrąglonej połowy w dół” do najbliższego tysiąca 550 razy na 10 000, a średnia zaokrąglona wartość wynosi 4944 (zbyt niska o 55,5).
Jeśli wszystkie trzy zaokrąglenia zostaną wykonane przy użyciu „nieparzystej połowy rundy”, wynik jest następujący:
Wynik różni się od pojedynczego „nieparzystego półokrągłego” do najbliższego tysiąca 550 razy na 10 000, a średnia zaokrąglona wartość to 4999,5 (poprawnie).
Wreszcie, jeśli wszystkie trzy zaokrąglenia zostaną wykonane przy użyciu „zaokrąglenia do połowy”, wyniki są następujące:
Wynik różni się od pojedynczego „zaokrąglonego pół parzystego” do najbliższego tysiąca 450 razy na 10 000, a średnia zaokrąglona wartość to 4999,5 (poprawnie).
Wydaje mi się, że oczywiste jest, że zaokrąglanie do połowy i zaokrąglanie do dołu odchyla zaokrąglone wartości, tak że średnia zaokrąglonych wartości nie ma już takich samych oczekiwań jak średnia z wartości pierwotnych oraz że „nieparzysta zaokrąglona połowa” i „nieparzysta zaokrąglona połowa” „usuń błąd, traktując 5 w jedną stronę w połowie czasu, a w drugą stronę w drugiej połowie. Kolejne zaokrąglanie zwielokrotnia odchylenie.
Okrągły parzysty parzysty i okrągły nieparzysty wprowadzają swój własny rodzaj odchylenia w rozkładzie: odchylenie odpowiednio do liczb parzystych i nieparzystych. W obu przypadkach, to uprzedzenie jest zwielokrotniane przez kolejne zaokrąglanie, ale jest gorsze dla nieparzystej połowy rundy. Myślę, że wyjaśnienie w tym przypadku jest proste: 5 jest liczbą nieparzystą, więc nieparzysta zaokrąglona połowa ma więcej wyników kończących się na 5 niż parzysta zaokrąglona - a zatem więcej wyników, które będą musiały być obsługiwane specjalnie przy następnym zaokrąglaniu.
Tak czy inaczej, spośród czterech opcji tylko dwie są obiektywne, a spośród dwóch niezależnych opcji, okrągła połowa daje nawet najlepiej zachowujący się rozkład, gdy podlega wielokrotnemu zaokrąglaniu.
źródło
To się nazywa zaokrąglanie przez bankiera. Chodzi o to, aby zminimalizować błąd skumulowany z wielu operacji zaokrąglania.
Powiedzmy, że zawsze zaokrąglałeś .5 w dół. Pomyśl o tych wszystkich małych wypłatach odsetek, bank za każdym razem wpłaca pół centa ...
Powiedzmy, że zawsze zaokrąglałeś .5 w górę. Rachunkowość będzie krzyczeć, ponieważ płacisz więcej odsetek, niż powinieneś.
źródło