Zaokrąglanie
Słowo "zaokrąglenie" dla wartości liczbowej oznacza zastąpienie jej inną wartością, która jest w przybliżeniu równa, ale ma krótszą, prostszą lub bardziej wyraźną formę. Na przykład, 23,74 USD może być zaokrąglone do 24 USD, lub ułamek 312/937 może być zaokrąglony do 1/3, lub wyrażenie 2 {\i1}jak 1,41.
Zaokrąglanie jest często wykonywane celowo, aby uzyskać wartość, która jest łatwiejsza do napisania i obsługi niż oryginał. Można to zrobić również w celu wskazania dokładności obliczonej liczby; na przykład, ilość, która została obliczona jako 123.456, ale wiadomo, że jest dokładna tylko do kilkuset jednostek, jest lepiej określona jako "około 123.500".
Z drugiej strony, zaokrąglenie może wprowadzić pewien błąd zaokrąglenia w wyniku. Zaokrąglanie jest prawie nieuniknione w wielu obliczeniach, zwłaszcza podczas dzielenia dwóch liczb w liczbach całkowitych lub arytmetyce stałopunktowej; podczas obliczania funkcji matematycznych, takich jak pierwiastki kwadratowe, logarytmy i sinusy; lub podczas korzystania z reprezentacji zmiennoprzecinkowej o stałej liczbie znaczących cyfr. W sekwencji obliczeń te błędy zaokrąglania na ogół się kumulują, a w pewnych "niepewnych" przypadkach mogą uczynić wynik bez znaczenia.
Dokładne zaokrąglanie transcendentalnych funkcji matematycznych jest trudne, ponieważ liczba dodatkowych cyfr, które należy obliczyć w celu rozstrzygnięcia, czy należy zaokrąglić w górę czy w dół, nie może być z góry znana. Problem ten znany jest jako "dylemat twórcy tabeli" (poniżej).
Zaokrąglanie ma wiele podobieństw do kwantyzacji, która ma miejsce, gdy wielkości fizyczne muszą być kodowane liczbami lub sygnałami cyfrowymi.
Rodzaje zaokrągleń
Typowymi problemami z zaokrąglaniem są:
- przybliżenie nieracjonalnej liczby o ułamek, np. π o 22/7;
- przybliżenie ułamka z okresowym rozszerzeniem dziesiętnym o skończony ułamek dziesiętny, np. 5/3 o 1,6667;
- zastąpienie racjonalnej liczby ułamkiem z mniejszym licznikiem i mianownikiem, np. 3122/9417 , przez 1/3;
- zamieniając ułamkową liczbę dziesiętną na jedną z mniejszą liczbą cyfr, np. 2,1784 dolarów na 2,18 dolarów;
- zastąpienie liczby całkowitej dziesiętnej liczbą całkowitą, np. 23.217 osób, przez 23.200 osób; lub w ogóle,
- zastąpienie wartości wielokrotnością określonej kwoty, np. 27,2 sekundy na 30 sekund (wielokrotność 15).
Zaokrąglenie do określonego przyrostu
Najczęstszym rodzajem zaokrąglania jest zaokrąglanie do liczby całkowitej; lub, bardziej ogólnie, do liczby całkowitej będącej wielokrotnością jakiegoś przyrostu - np. zaokrąglanie do całych dziesiątych części sekundy, setnych części dolara, do całych wielokrotności 1/2 lub 1/8 cala, do całych dziesiątek lub tysięcy itd.
Ogólnie rzecz biorąc, zaokrąglenie liczby x do wielokrotności pewnego określonego przyrostu m pociąga za sobą następujące kroki:
- Podziel x przez m, niech wynikiem będzie y;
- Runda y do wartości całkowitej, nazwij ją q;
- Pomnóż q przez m, aby otrzymać zaokrągloną wartość z.
z = r o u n d ( x , m ) = r o u n d ( x / m ) ⋅ m {\i1}displaystyle z=\i0}mathrm {\i0}(x,m)=\i0}mathrm {\i0}(x/m)\i0}cdot m\i0,}
Na przykład, zaokrąglenie x = 2,1784 dolara do pełnych centów (tj. do wielokrotności 0,01) pociąga za sobą obliczenie y = x/m = 2,1784/0,01 = 217,84, następnie zaokrąglenie y do liczby całkowitej q = 218, a na koniec obliczenie z = q×m = 218×0,01 = 2,18.
Przy zaokrąglaniu do wcześniej ustalonej liczby cyfr znaczących, przyrost m zależy od wielkości liczby, która ma być zaokrąglona (lub od zaokrąglonego wyniku).
Przyrost m jest zwykle skończonym ułamkiem w dowolnym układzie liczbowym, który jest używany do reprezentacji liczb. W przypadku wyświetlania ludziom, oznacza to zazwyczaj układ liczb dziesiętnych (czyli m jest liczbą całkowitą razy potęga 10, jak 1/1000 lub 25/100). W przypadku wartości pośrednich przechowywanych w komputerach cyfrowych, często oznacza to system liczb binarnych (m jest liczbą całkowitą razy potęga 2).
Abstrakcyjna jednoargumentowa funkcja "round()", która zwraca liczbę całkowitą z arbitralnej wartości rzeczywistej, ma co najmniej tuzin różnych konkretnych definicji przedstawionych w przekroju od zaokrąglenia do liczby całkowitej. Abstrakcyjna, dwuargumentowa funkcja "round()" jest tu formalnie zdefiniowana, ale w wielu przypadkach jest używana z domyślną wartością m = 1 dla przyrostu, a następnie redukuje się do ekwiwalentnej abstrakcyjnej, jednoargumentowej funkcji, z tym samym tuzinem odrębnych konkretnych definicji.
Zaokrąglenie do liczby całkowitej
Najbardziej podstawową formą zaokrąglania jest zastąpienie dowolnej liczby przez liczbę całkowitą. Wszystkie poniższe tryby zaokrąglania są konkretnymi wdrożeniami abstrakcyjnej jednoargumentowej funkcji "round()" przedstawionej i wykorzystanej w poprzednich rozdziałach.
Istnieje wiele sposobów zaokrąglania liczby y do liczby całkowitej q. Najpopularniejsze z nich to
- zaokrąglić w dół (lub w dół, lub zaokrąglić w kierunku nieskończoności minus): q jest największą liczbą całkowitą, która nie przekracza y.
q = f l o o r ( y ) = ⌊ y ⌋ = - ⌈ - y ⌉ {\i0}displaystyle q=\i0}mathrm {floor} (y)= lewa podłoga, prawa podłoga, lewa gleba, prawa gleba...}
- zaokrąglić w górę (lub wziąć sufit, lub zaokrąglić w kierunku plus nieskończoność): q jest najmniejszą liczbą całkowitą, która jest nie mniejsza niż y.
q = c e i l ( y ) = ⌈ y ⌉ = - ⌊ - y ⌋ {\i1}displaystyle q=\i0}mathrm {ceil}
- zaokrąglenie do zera (lub obcięcie, lub zaokrąglenie z dala od nieskończoności): q jest całkowitą częścią y, bez cyfr ułamkowych.
q = t r u n c a t e ( y ) = sgn ( y ) ⌊ | y | ⌋ = - sgn ( y ) ⌈ - | y | ⌉ {\i1} {\i1}displaystyle q=\i0}mathrm {trauncate} (y)=nazwa operatora {sgn}(y)\i0}lewa podłoga {y:i}prawda {y:i}prawda podłoga =-nazwa operatora {sgn}(y)\i0}lewa podłoga - lewa podłoga {y:i}prawa podłoga {y:i}, \i0}
- zaokrąglenie od zera (lub zaokrąglenie w kierunku nieskończoności): jeżeli y jest liczbą całkowitą, q jest y; w przeciwnym razie q jest liczbą całkowitą, która jest najbliższa 0 i jest taka, że y jest między 0 a q.
q = sgn ( y ) ⌈ | y | ⌉ = - sgn ( y ) ⌊ - | y | ⌋ {\i1}displaystyle q=\i0}nazwa operatora {sgn}(y)\i0}lceil \i0}right\i0}right\i0}rceil =- \i0}nazwa operatora {sgn}(y)\i0}lceil \i0}lceil \i0}right\i0}right\i0}lceil \i0,\i0}
- round to nearest: q jest liczbą całkowitą, która jest najbliższa y (patrz poniżej zasady tie-breakingu).
Pierwsze cztery metody nazywane są zaokrągleniami ukierunkowanymi, ponieważ wszystkie przesunięcia od pierwotnej liczby y do zaokrąglonej wartości q są ukierunkowane na tę samą lub oddaloną od niej wartość graniczną (0, +∞ lub -∞).
Jeśli y jest dodatnie, zaokrąglenie w dół jest takie samo jak zaokrąglenie w dół-zero, a zaokrąglenie w górę jest takie samo jak zaokrąglenie w dół-zero. Jeżeli y jest ujemne, zaokrąglenie w dół jest takie samo jak zaokrąglenie od zera, a zaokrąglenie w górę jest takie samo jak zaokrąglenie od zera. W każdym razie, jeżeli y jest liczbą całkowitą, q jest tylko y. Poniższa tabela ilustruje te metody zaokrąglania:
y | rounddown | łapanka | roundtowardszero | w drodze powrotnej | Najdroższy okrągły |
+23.67 | +23 | +24 | +23 | +24 | +24 |
+23.50 | +23 | +24 | +23 | +24 | +23 lub +24 |
+23.35 | +23 | +24 | +23 | +24 | +23 |
+23.00 | +23 | +23 | +23 | +23 | +23 |
0 | 0 | 0 | 0 | 0 | 0 |
−23.00 | −23 | −23 | −23 | −23 | −23 |
−23.35 | −24 | −23 | −23 | −24 | −23 |
−23.50 | −24 | −23 | −23 | −24 | -23 lub -24 |
−23.67 | −24 | −23 | −23 | −24 | −24 |
Tam, gdzie wiele obliczeń jest wykonywanych w kolejności, wybór metody zaokrąglania może mieć bardzo istotny wpływ na wynik. Znanym przykładem jest nowy indeks ustanowiony przez Giełdę Papierów Wartościowych w Vancouver w 1982 roku. Początkowo został on ustalony na 1000.000, a po 22 miesiącach spadł do około 520 - podczas gdy ceny akcji na ogół wzrosły w tym okresie. Problem wynikał z tego, że indeks był przeliczany tysiące razy dziennie i zawsze był zaokrąglany w dół do 3 miejsc po przecinku, w taki sposób, że kumulowały się błędy zaokrąglania. Przeliczenie z lepszym zaokrągleniem dało wartość wskaźnika 1098,892 na koniec tego samego okresu.
Łamanie więzi
Zaokrąglenie liczby y do najbliższej liczby całkowitej wymaga zastosowania pewnej zasady tie-breakingu w przypadkach, gdy y jest dokładnie w połowie drogi między dwoma liczbami całkowitymi - czyli gdy ułamek y wynosi dokładnie 0,5.
Zaokrąglić się do połowy
W wielu dyscyplinach szeroko stosowana jest następująca zasada tie-breakingu, zwana round half up (lub round half towards plus infinity). Oznacza to, że wartości połowy y są zawsze zaokrąglane w górę.
- Jeżeli ułamek y wynosi dokładnie 0,5, to q = y + 0,5.
q = ⌊ y + 0.5 ⌋ = - ⌈ - y - 0.5 ⌉ {\i1}Styl q= lewa podłoga y+0.5 \i1}prawa podłoga =- lewa podłoga y-0.5 \i0.5 \i1prawa podłoga \i1,\i0}
Na przykład, zgodnie z tą zasadą wartość 23,5 jest zaokrąglana do 24, ale -23,5 jest zaokrąglane do -23.
Jest to jedna z dwóch zasad powszechnie nauczanych w amerykańskich klasach matematyki elementarnej. []
Gdyby nie 0,5 ułamka, błędy zaokrąglenia wprowadzone metodą round to nearest byłyby dość symetryczne: dla każdego ułamka, który zostanie zaokrąglony w górę (np. 0,268), istnieje ułamek komplementarny (czyli 0,732), który zostanie zaokrąglony w dół, o tę samą ilość. Przy zaokrąglaniu dużego zbioru liczb z losowymi częściami ułamkowymi, te błędy zaokrąglania statystycznie kompensowałyby się wzajemnie, a wartość oczekiwana (średnia) zaokrąglonych liczb byłaby równa wartości oczekiwanej liczb pierwotnych.
Jednak reguła przełamania remisu w połowie drogi nie jest symetryczna, ponieważ ułamki, które wynoszą dokładnie 0,5 zawsze są zaokrąglane w górę. Ta asymetria wprowadza dodatnie odchylenie w błędach zaokrąglenia. Na przykład, jeżeli ułamek y składa się z trzech losowych cyfr dziesiętnych, to oczekiwana wartość q będzie wyższa o 0,0005 od oczekiwanej wartości y. Z tego powodu zaokrąglanie od zaokrąglenia do góry jest również (niejednoznacznie) znane jako asymetryczne.
Jednym z powodów zaokrąglenia do 0,5 jest fakt, że należy zbadać tylko jedną cyfrę. Na przykład, gdy widzimy 17.50000... pierwsze trzy cyfry, 17.5, określają, że liczba ta zostanie zaokrąglona w górę do 18. Jeśli zastosowano by odwrotną zasadę (zaokrąglenie do połowy w dół), należałoby zbadać wszystkie miejsca dziesiętne po przecinku, aby określić, czy wartość wynosi dokładnie 17,5.
Zaokrąglenie do połowy
Można również stosować metodę zaokrąglania do połowy w dół (lub zaokrąglania do połowy w kierunku minus nieskończoność) w przeciwieństwie do bardziej powszechnej metody zaokrąglania do połowy w górę (metoda zaokrąglania do połowy w górę jest powszechną konwencją, ale nie jest niczym innym jak konwencją).
- Jeżeli ułamek y wynosi dokładnie 0,5, to q = y - 0,5.
q = ⌈ y - 0.5 ⌉ = - ⌊ - y + 0.5 ⌋ {\i1}...\i0}...\i0}...\i0}...\i0}...\i0}...\i0} ...\i0}
Na przykład, 23,5 jest zaokrąglane do 23, a -23,5 jest zaokrąglane do -24.
Reguła "półokrągłego załamania" nie jest symetryczna, ponieważ ułamki, które wynoszą dokładnie 0,5 zawsze są zaokrąglane w dół. Ta asymetria wprowadza ujemne odchylenie w błędach zaokrąglenia. Na przykład, jeżeli ułamek y składa się z trzech losowych cyfr dziesiętnych, to oczekiwana wartość q będzie niższa o 0,0005 od oczekiwanej wartości y. Z tego powodu, zaokrąglanie do najbliższej wartości z regułą półokrągłości jest również (niejednoznacznie) znane jako zaokrąglanie asymetryczne.
Zaokrąglenie o połowę od zera
Inną powszechnie nauczaną i stosowaną metodą przełamywania więzi jest zaokrąglanie połowy do zera (lub zaokrąglanie połowy w kierunku nieskończoności), a mianowicie:
- Jeżeli ułamek y wynosi dokładnie 0,5, to q = y + 0,5 jeżeli y jest dodatnie, a q = y - 0,5 jeżeli y jest ujemne.
q = sgn ( y ) ⌊ | y | + 0.5 ⌋ = - sgn ( y ) ⌈ - | y | - 0.5 ⌉ {\i1} {\i1}displaystyle q=`nazwa operatora {sgn}(y)\i0.5 \i0.5 \i1}right\i0.5 \i0}right\i0.5 \i0}right\i0.5 \i0}right\i0.5 \i0.6}right\i0.6}right\i0.7
Na przykład, 23,5 jest zaokrąglane do 24, a -23,5 jest zaokrąglane do -24.
Metoda ta traktuje wartości dodatnie i ujemne w sposób symetryczny, a zatem jest wolna od ogólnej stronniczości, jeżeli liczby oryginalne są dodatnie lub ujemne z równym prawdopodobieństwem. Jednakże, zasada ta nadal będzie wprowadzała dodatnie odchylenie dla liczb dodatnich, a ujemne dla ujemnych.
Jest ona często stosowana do przeliczania walut i zaokrąglania cen (przy pierwszym przeliczeniu kwoty na najmniejszy znaczący dział waluty, np. centy euro), ponieważ łatwo jest ją wytłumaczyć, biorąc pod uwagę tylko pierwszą cyfrę ułamkową, niezależnie od dodatkowych cyfr precyzji lub znaku kwoty (dla ścisłej równoważności między płatnikiem a odbiorcą kwoty).
Okrągła połowa do zera
Można również zaokrąglić połowę do zera (lub zaokrąglić połowę od nieskończoności) w przeciwieństwie do bardziej powszechnego zaokrąglania połowy od zera (metoda zaokrąglania połowy od zera jest powszechną konwencją, ale nie jest niczym innym jak konwencją).
- Jeżeli ułamek y wynosi dokładnie 0,5, to q = y - 0,5 jeżeli y jest dodatnie, a q = y + 0,5 jeżeli y jest ujemne.
q = sgn ( y ) ⌈ | y | - 0.5 ⌉ = - sgn ( y ) ⌊ - | y | + 0.5 ⌋ {\i1}displaystyle q= nazwa operatora {sgn}(y)\i0.5 \i0.5 \i0.5 \i0.5 \i0}right\i0.5 \i0}right\i0.5 \i0.5 \i0.5 \i0}right\i0.5 \i0.5 \i0.5 \i0.6 \i0}right\i0.6 \i0.6}.
Na przykład, 23,5 jest zaokrąglane do 23, a -23,5 jest zaokrąglane do -23.
Metoda ta traktuje również symetrycznie wartości dodatnie i ujemne, a zatem jest wolna od ogólnej stronniczości, jeżeli liczby oryginalne są dodatnie lub ujemne z równym prawdopodobieństwem. Jednakże, zasada ta nadal będzie wprowadzała ujemne odchylenie dla liczb dodatnich, a dodatnie dla ujemnych.
Okrągła połowa do zera
Jeszcze mniej tendencyjna zasada łamania więzi jest okrągła o połowę mniejsza, a mianowicie
- Jeżeli ułamek y wynosi 0,5, to q jest liczbą całkowitą parzystą najbliższą y.
Tak więc, na przykład, +23.5 staje się +24, +22.5 staje się +22, -22.5 staje się -22, a -23.5 staje się -24.
Metoda ta traktuje również symetrycznie wartości dodatnie i ujemne, a zatem jest wolna od ogólnej stronniczości, jeżeli liczby oryginalne są dodatnie lub ujemne z równym prawdopodobieństwem. Ponadto, dla większości rozsądnych rozkładów wartości y, oczekiwana (średnia) wartość liczb zaokrąglonych jest zasadniczo taka sama jak wartość liczb pierwotnych, nawet jeśli wszystkie te ostatnie są dodatnie (lub wszystkie ujemne). Jednakże, reguła ta nadal będzie wprowadzała dodatni krzywiznę dla liczb parzystych (w tym zero), a ujemny krzywiznę dla liczb nieparzystych.
Ten wariant metody "od okrągłego do najgorszego" nazywany jest również zaokrąglaniem obiektywnym (niejednoznacznym i nieco niewłaściwym), zaokrąglaniem zbieżnym, zaokrąglaniem statystyka, zaokrąglaniem holenderskim, zaokrąglaniem gaussowskim lub bankierskim. Jest to szeroko stosowane w księgowości.
Jest to domyślny tryb zaokrąglania stosowany w funkcjach obliczeniowych i operatorach IEEE 754.
Okrągła połowa do nieparzystej
Kolejna zasada, która jest bardzo podobna do okrągłych pół na pół, a mianowicie
- Jeżeli ułamek y wynosi 0,5, to q jest liczbą całkowitą nieparzystą, najbliższą y.
Tak więc, na przykład, +22.5 staje się +23, +21.5 staje się +21, -21.5 staje się -21, a -22.5 staje się -23.
Metoda ta traktuje również symetrycznie wartości dodatnie i ujemne, a zatem jest wolna od ogólnej stronniczości, jeżeli liczby oryginalne są dodatnie lub ujemne z równym prawdopodobieństwem. Ponadto, dla większości rozsądnych rozkładów wartości y, oczekiwana (średnia) wartość liczb zaokrąglonych jest zasadniczo taka sama jak wartość liczb pierwotnych, nawet jeśli wszystkie te ostatnie są dodatnie (lub wszystkie ujemne). Jednakże, reguła ta nadal będzie wprowadzała ujemny krzywiznę dla liczb parzystych (w tym zero) i dodatni krzywiznę dla liczb nieparzystych.
Wariant ten prawie nigdy nie jest stosowany w większości obliczeń, z wyjątkiem sytuacji, w których chcemy uniknąć zaokrąglenia 0,5 lub -0,5 do zera, lub uniknąć zwiększenia skali liczb przedstawianych jako zmiennoprzecinkowe (z ograniczonymi zakresami dla wykładnika skalowania), tak aby liczba nieskończona zaokrąglała się do nieskończonej, lub aby mała wartość denormalna zaokrągliła się do normalnej wartości niezerowej (mogą one wystąpić w trybie zaokrąglenia od połowy do parzystego). W rzeczywistości, tryb ten preferuje zachowanie istniejącej skali liczb remisowych, unikając w miarę możliwości wyników spoza zakresu.
Zaokrąglenie stochastyczne
Inną bezstronną metodą jest zaokrąglanie stochastyczne:
- Jeżeli ułamkowa część y wynosi .5, należy wybrać q losowo spośród y + 0,5 i y - 0,5, z równym prawdopodobieństwem.
Podobnie jak okrągłe pół na pół, zasada ta jest w zasadzie wolna od ogólnych uprzedzeń, ale jest również sprawiedliwa wśród parzystych i nieparzystych wartości q. Z drugiej strony, wprowadza ona do wyniku składową losową; dwukrotne wykonanie tego samego obliczenia na tych samych danych może dać dwa różne wyniki. Ponadto, jest on otwarty na nieświadome stronniczenie, jeżeli ludzie (a nie komputery czy urządzenia przypadkowe) "losowo" decydują o tym, w którym kierunku należy się obrócić.
Naprzemienne przełamywanie wiązań
Jedną z metod, bardziej niejasną niż większość, jest zaokrąglanie na pół na przemian.
- Jeśli część ułamkowa wynosi 0,5, zaokrąglić na przemian w górę i w dół: dla pierwszego wystąpienia części ułamkowej 0,5, zaokrąglić w górę; dla drugiego wystąpienia, zaokrąglić w dół; tak dalej.
Tłumi to składową losową wyniku, jeśli można efektywnie ponumerować występowanie 0,5 części ułamkowych. Ale nadal może wprowadzić dodatnie lub ujemne odchylenie zgodnie z kierunkiem zaokrąglenia przypisanym do pierwszego wystąpienia, jeśli całkowita liczba wystąpień jest nieparzysta.
Proste dithering
W niektórych kontekstach, wszystkie powyższe metody zaokrąglania mogą być niezadowalające. Na przykład, załóżmy, że y jest dokładnym pomiarem sygnału audio, który jest zaokrąglany do liczby całkowitej q w celu zmniejszenia kosztów magazynowania lub transmisji. Jeżeli y zmienia się powoli wraz z upływem czasu, którakolwiek z powyższych metod zaokrąglania spowoduje, że q będzie całkowicie stałe w długich odstępach czasu, oddzielone nagłymi skokami o ±1. Kiedy sygnał q zostanie odtworzony, kroki te będą słyszalne jako bardzo nieprzyjemny szum, a wszelkie zmiany pierwotnego sygnału pomiędzy dwoma wartościami całkowitymi zostaną całkowicie utracone.
Jednym ze sposobów uniknięcia tego problemu jest zaokrąglenie każdej wartości y w górę z prawdopodobieństwem równym jej ułamkowi, a następnie zaokrąglenie jej w dół z uzupełnieniem tego prawdopodobieństwa. Na przykład liczba 23,17 zostałaby zaokrąglona w górę do 24 z prawdopodobieństwem 0,17, a w dół do 23 z prawdopodobieństwem 1 - 0,17 = 0,83. (Jest to równoważne zaokrągleniu w dół y + s, gdzie s jest liczbą losową równomiernie rozłożoną pomiędzy 0 i 1). Dzięki temu specjalnemu zaokrągleniu, zwanemu ditheringiem, nagłe kroki zostają zastąpione mniej budzącym sprzeciw szumem, a nawet niewielkie zmiany w oryginalnym sygnale zostają do pewnego stopnia zachowane. Podobnie jak stochastyczne podejście do tie-breakingu, dithering nie jest stronniczy: jeśli wszystkie wartości ułamkowe są równie prawdopodobne, zaokrąglenie w górę o określoną kwotę jest tak samo prawdopodobne jak zaokrąglenie w dół o tę samą kwotę; i tak samo jest w przypadku sumy kilku zaokrąglonych liczb. Z drugiej strony, dithering wprowadza do wyniku składową losową, znacznie większą niż w przypadku krawata stochastycznego.
Dokładniej rzecz ujmując, błąd zaokrąglenia dla każdej odrzuconej liczby będzie jednolicie rozłożoną zmienną losową o średniej wartości zerowej, ale z odchyleniem standardowym 1/12 ≈ 0.2886 {\i0.2886 {\i1} {\i1} {\i1}około 0.2886} które jest lepsze niż odchylenie standardowe 1/2 przy zastosowaniu prostych metod predykcyjnych, ale nieco wyższe niż przy zastosowaniu prostszej metody stochastycznej. Jednak suma n zaokrąglonych liczb będzie zmienną losową z oczekiwanym błędem zerowym, ale z odchyleniem standardowym n / 12 {\i1} {\i1}displaystyle {\i1}/{\i1}sqrt {\i1}}. (całkowity pozostały hałas), który odchyla się półsekwentnie i może stać się łatwo zauważalny, nawet jeśli odchylenie standardowe błędu roundoffa na próbkę będzie wynosić 1 / 12 n {\i1}, który powoli zbiega się półsekwentnie do zera. Tak więc, ten losowy rozkład może być nadal zbyt wysoki dla niektórych aplikacji, które zaokrąglają dużo danych.
Wielowymiarowy dithering
Ten wariant prostej metody ditheringowej nadal zaokrągla wartości z prawdopodobieństwem równym jej ułamkowi. Jednakże zamiast używać rozkładu losowego do zaokrąglania wyizolowanych próbek, błąd zaokrąglenia występujący przy każdej zaokrąglonej próbce jest sumowany dla kolejnych otaczających ją elementów do próbki lub obliczeń; ta skumulowana wartość jest następnie dodawana do wartości tych kolejnych próbek lub obliczanych wartości do zaokrąglenia, tak aby zmodyfikowane wartości uwzględniały tę różnicę przy użyciu modelu predykcyjnego (np. dithering Floyda-Steinberga).
Zmodyfikowane wartości są następnie zaokrąglane za pomocą jednej z powyższych metod zaokrąglania, przy czym najlepsze są metody stochastyczne lub ditheringowe: w tym ostatnim przypadku suma n zaokrąglonych liczb będzie nadal zmienną losową z oczekiwanym błędem zerowym, ale z doskonałym stałym odchyleniem standardowym 1 / 12 {\i1 /sqrt {\i0}}. zamiast rozchodzić się półsekwentnie podczas ditheringu próbek izolowanych; a całkowite średnie odchylenie błędu roundoffa na zaokrągloną próbkę wyniesie 1 / ( n 12 ) {\i1}, która zbiegnie się hiperbolicznie do zera, szybciej niż w przypadku zbieżności półhiperbolicznej podczas ditheringu próbek izolowanych.
W praktyce, przy zaokrąglaniu dużych zbiorów danych próbkowanych (takich jak rendering audio, obrazu i wideo), nagromadzenie błędów zaokrąglenia jest najczęściej stosowane przy prostym predykcyjnym zaokrąglaniu zmodyfikowanych wartości (np. zaokrąglanie do zera), ponieważ nadal będzie zachowywać konwergencję hiperboliczną do zera ogólnego średniego błędu zaokrąglenia i jego odchylenia standardowego. To udoskonalenie jest często stosowane w przetwarzaniu obrazu i dźwięku (zwłaszcza do dokładnego skalowania i operacji antyaliasingu, gdzie proste probabilistyczne dithering wartości izolowanych może nadal powodować zauważalny szum, czasami nawet gorszy niż efekty mory występujące przy prostych, nieprobabilistycznych metodach zaokrąglania stosowanych do izolowanych próbek).
Efektywna propagacja nagromadzonych błędów zaokrąglenia może zależeć od dyskretnego wymiaru badanych danych: podczas próbkowania obrazów dwuwymiarowych, w tym kolorowych (dodających dyskretny wymiar płaszczyzn kolorów) lub trójwymiarowych (dodających dyskretny wymiar czasowy), lub polifonicznych danych audio (wykorzystujących dyskretne wymiary czasowe i kanałowe), preferowane może być propagowanie tego błędu w preferowanym kierunku, lub jednakowo w kilku ortogonalnych wymiarach, np. pionowo względem siebie. poziomo dla obrazów dwuwymiarowych lub na równoległe kolorowe kanały w tej samej pozycji i/lub w tym samym czasie, oraz w zależności od innych właściwości tych ortogonalnych wymiarów dyskretnych (zgodnie z modelem percepcji). W takich przypadkach można zastosować kilka akumulatorów z błędem zaokrąglenia (przynajmniej jeden na każdy wymiar dyskretny), lub wektor (n-1)-wymiarowy (lub macierz) akumulatorów.
W niektórych z tych przypadków, dyskretne wymiary danych do pobrania i zaokrąglenia mogą być traktowane nie ortogonalnie: Na przykład, podczas pracy z kolorowymi obrazami, dane z trójbarwnych płaszczyzn barwnych w każdym wymiarze fizycznym (wysokość, szerokość i opcjonalnie czas) mogą zostać zremasterowane przy użyciu spostrzegawczego modelu barwnego, tak aby akumulatory błędu zaokrąglenia były zaprojektowane tak, aby zachować lekkość z większym prawdopodobieństwem niż odcień lub nasycenie, zamiast propagować błędy w każdej ortogonalnej płaszczyźnie barwnej niezależnie; a w stereofonicznych danych audio dwa zaokrąglone kanały danych (lewy i prawy) mogą być zaokrąglone razem, aby zachować ich średnią wartość w priorytecie do ich efektywnej różnicy, która pochłonie większość pozostałych błędów roundoffa, w sposób zrównoważony około zera.
Zaokrąglanie do prostych frakcji
W niektórych kontekstach pożądane jest zaokrąglenie danej liczby x do "schludnego" ułamka - czyli najbliższego ułamka z = m/n, którego licznik m i mianownik n nie przekraczają określonego maksimum. Problem ten różni się dość znacznie od zaokrąglania wartości do ustalonej liczby liczb dziesiętnych lub binarnych, czy też do wielokrotności danej jednostki m. Problem ten dotyczy sekwencji Farey'a, drzewa Stern-Brocot i ułamków ciągłych.
Skalowane zaokrąglenie
Ten rodzaj zaokrąglania, który nazywany jest również zaokrąglaniem do skali logarytmicznej, jest wariantem zaokrąglania do określonego przyrostu, ale z przyrostem, który jest modyfikowany w zależności od skali i wielkości wyniku. Konkretnie, celem jest ograniczenie liczby cyfr znaczących, zaokrąglanie wartości tak, aby cyfry nieistotne zostały pominięte. Ten rodzaj zaokrąglania występuje domyślnie w przypadku liczb obliczanych z użyciem wartości zmiennoprzecinkowych z ograniczoną precyzją (takich jak typy zmiennoprzecinkowe i podwójne w standardzie IEEE-754), ale może być stosowany bardziej ogólnie do zaokrąglania wszelkich wartości rzeczywistych z dowolną dodatnią liczbą cyfr znaczących i dowolną ściśle dodatnią podstawą rzeczywistą.
Na przykład może być używany w grafice inżynierskiej do przedstawiania danych w skali logarytmicznej ze zmiennymi krokami (na przykład długości fal, których podstawa niekoniecznie jest miarą całkowitą), lub w danych statystycznych do definiowania klas wartości rzeczywistych w przedziałach rosnących wykładniczo szerokości (ale najczęstszym zastosowaniem są podstawy całkowite, takie jak 10 lub 2). [źródło?]
Ten rodzaj zaokrąglania opiera się na skali logarytmicznej zdefiniowanej przez stały niezerowy rzeczywisty współczynnik skalowania s (w większości przypadków współczynnik ten wynosi s=1) oraz stałą dodatnią podstawę b>1 (niekoniecznie liczbę całkowitą i najczęściej różniącą się od współczynnika skalowania), a także stałą liczbę całkowitą n>0 cyfr znaczących w tej podstawie (która określa wartość przyrostu, jaki należy zastosować do zaokrąglenia, wraz z obliczoną skalą efektywną liczby zaokrąglonej).
Podstawowa liczba argumentów (jak również wynikająca z niej liczba zaokrąglona) jest najpierw przedstawiona w notacji wykładniczej x = s-a-m-bc, tak że znak s jest albo +1 albo -1, mantysa a jest ograniczona do półotwartego przedziału dodatniego [1/b,1], a wykładnik c jest dowolną (dodatnią lub ujemną) liczbą całkowitą. W tej reprezentacji wszystkie znaczące cyfry znajdują się w ułamkowej części mantysy absolutnej, której część całkowita jest zawsze zerowa.
Jeżeli liczba źródłowa (lub liczba zaokrąglona) wynosi 0, to bezwzględna mantysa a jest zdefiniowana jako 0, to wykładnik c jest ustalony na arbitralną wartość (0 w większości konwencji, ale niektóre reprezentacje zmiennoprzecinkowe nie mogą używać zerowej mantysy bezwzględnej, ale rezerwują określoną maksymalną ujemną wartość dla wykładnika c, aby reprezentował samą liczbę 0), a znak s może być dowolnie wybrany pomiędzy -1 lub +1 (zazwyczaj jest ustawiony na +1 dla zwykłego zera, lub jest ustawiony na ten sam znak co argument w wartości zaokrąglonej, jeżeli reprezentacja liczbowa pozwala na rozróżnienie zer dodatnich i ujemnych, nawet jeżeli ostatecznie reprezentują one tę samą wartość liczbową 0).
Równie dobrze można użyć wyskalowanej reprezentacji wykładniczej jako x = a-s-bc, przy czym mantyza a jest albo równa zero, albo mieści się w jednym z dwóch półotwartych przedziałów (-1,-1/b) i [+1/b,+1], i tak będzie w poniższym algorytmie.
Kroki do obliczenia tego skalowanego zaokrąglenia są na ogół podobne do poniższych:
- jeśli x równa się zero, po prostu zwróć x; w przeciwnym razie:
- przekształcić x w skalowaną reprezentację wykładniczą, z podpisaną mantyzą:
x = a ⋅ s ⋅ b c {\i1}styl x=a\i0}cdot s\i0}cdot b^{c}\i0},} - Niech x' będzie nieskalowaną wartością x, przez podzielenie jej przez współczynnik skalowania s:
x ′ = x / s {\i1}Styl x'=x/s\i0,} ; - Niech wykładnik skalowania c będzie jeden plus logarytm bazowo-b wartości bezwzględnej x', zaokrąglony w dół do liczby całkowitej (w kierunku minus nieskończoność):
c = 1 + ⌊ log b | x ′ | ⌋ = 1 + ⌊ log b | x / s | ⌋ {\i1+ styl c=1+ lewa podłoga \i0}log _{b}lewax'\i0}prawa podłoga = 1+ lewa podłoga \i0}log _{b}lewax/s/s prawa podłoga \i0,} ; - Niech podpisana mantysa a będzie iloczynem x' podzielonym przez b do potęgi c:
a = x ′ ⋅ b - c = x / s ⋅ b - c {\i1}displaystyle a=x'\i0}cdot b^{-c}=x/s\i0}cdot b^{-c}\i0},} - obliczyć zaokrągloną wartość w tym przedstawieniu:
- Niech c' będzie początkowym wykładnikiem skalowania c z x':
c ′ = c ′displaystyle c'=c\,} - Niech m będzie przyrostem dla zaokrąglenia mantysy a zgodnie z liczbą istotnych cyfr do zachowania:
m = b - n {\i1}displaystyle m=b^{-n}\i0},} - Niech a' będzie podpisaną mantyzą a zaokrągloną zgodnie z tym przyrostem m i wybranym trybem zaokrąglania:
a ′ = r o u n d ( a , m ) = r o u n d ( x / s ⋅ b n - c ′ ) ⋅ b - n ′displaystyle a'=mathrm {round} (a,m)=mathrm {round} (x/s\i0cdot b^{n-c'})\i0cdot b^{-n}\i0},} - jeżeli wartość bezwzględna a' nie jest mniejsza niż b, to dekrementuj n (pomnóż przyrost m przez b), zwiększaj wykładnik skalowania c', podziel podpisaną mantysę a przez b i ponownie rozpocznij zaokrąglanie nowej podpisanej mantysy a na a' za pomocą tego samego wzoru; tego kroku można uniknąć tylko wtedy, gdy funkcja "round()" abtract zawsze zaokrągla a w kierunku 0 (i).e. gdy jest to proste obcięcie), ale jest to konieczne, jeśli może być to zaokrąglenie a w kierunku nieskończoności, ponieważ zaokrąglona mantysa może mieć w tym przypadku wyższy wykładnik skalowania, pozostawiając dodatkową cyfrę precyzji.
- zwrócić zaokrągloną wartość:
y = s c a l e d r o u n d ( x , s , b , n ) = a ′ ⋅ s ⋅ b c ′ = r o u n d ( x / s ⋅ b n - c ′ ) ⋅ s ⋅ b c ′ - n {\i1}displaystyle y=mathrm {skalowany} (x,s,b,n)=a'\cdot s\cdot b^{c'}=mathrm {round}(x/s\i0}cdot b^{n-c'})\i0}cdot s\i0}cdot b^{c'-n},\i0} .
Dla abstrakcyjnej funkcji "round()", ten rodzaj zaokrąglania może używać dowolnego z trybów zaokrąglania do liczb całkowitych opisanych pełniej w następnym rozdziale, ale najczęściej jest to tryb zaokrąglania do najbliższego (z zasadami tie-breakingu również opisanymi pełniej poniżej).
Na przykład:
- Wyskalowane zaokrąglenie 1,234 przy współczynniku skalowania 1 w bazie 10 i 3 cyfr znaczących (maksymalna względna precyzja = 1/1000), przy zastosowaniu dowolnego zaokrąglenia do najbliższego trybu, zwróci 1,23;
- podobne zaokrąglenie w skali 1,236 zwróci 1,24;
- podobne zaokrąglenie w skali 21,236 zwróci 21,2;
- podobne zaokrąglenie w skali 321.236 zwróci 321;
- Przy zastosowaniu trybu zaokrąglania w dół o współczynniku skalowania 1,234 w bazie 10 i 3 cyfr znaczących (maksymalna względna precyzja = 1/1000) zwróci 1,23;
- podobne zaokrąglenie w skali 1,236 również zwróci 1,23;
- Skalowane zaokrąglenie 3 π / 7 ≈ 6.8571 ⋅ π ⋅ 2 - 4 {\i1}Styl scenariusza 3 \i1 /7 \i0};\i0;\i0}8571 \cdot \pi \cdot 2^{-4}}z współczynnikiem skalowania \i0 \i1 \i1}w bazie 2 i 3 cyfr znaczących (maksymalna względna precyzja=1/8), przy użyciu trybu zaokrąglania w dół, zwróci 6 ⋅ \i0 ⋅ 2 - 4 = 3 \i0 /8 \i1};
- podobne skalowane zaokrąglenie 5 π / 7 ≈ 5.7143 ⋅ π ⋅ 2 - 3 {\i1}splaistyle \i0}scriptstyle 5 \i0 /7 \i0};\i0 5.7143 \i0}cdot \i0} zwróci 5 ⋅ π ⋅ 2 - 3 = 5 \i0 / 8 {\i1}splaistyle \i0}scriptstyle 5 \i0 \i0}cdot 2 \i0};=\i0}5 \i0}pi /8} ;
- podobne skalowane zaokrąglenie π / 7 ≈ 4.5714 ⋅ π ⋅ 2 - 5 {\i0} {\i1}splaistylu \i0}scriptstyle \i0};\i0}cdot \i0} zwróci 4 ⋅ π ⋅ 2 - 5 = π / 8 {\i0}splaistylu \i0}scriptstyle 4 \i0}cdot \i0};=\i0 \i0}.
- podobne skalowane zaokrąglenie π / 8 = 4 ⋅ π ⋅ 2 - 5 {\i1} {\i1}splaistylu \i0}scriptstyle \i0};=\i0};4 {\i1}cdot \i1}cdot 2^{\i0}} zwróci również 4 ⋅ π ⋅ 2 - 5 = π / 8 {\i1}splaistylu \i0}scriptstyle 4 {\i1}cdot \i1};=\i0}\i0}.
- podobne skalowane zaokrąglenie π / 15 ≈ 4.2667 ⋅ π ⋅ 2 - 6 {\i1} {\i1}splastyle \i1}scriptstyle \i1 \i1};\i1 4.2667 \i1}cdot \i1} zwróci 4 ⋅ π ⋅ 2 - 6 = π / 16 {\i1}splastyle \i1}scriptstyle 4 \i1 \i1}cdot \i1 \i1};=;\i1} .
Zaokrąglenie do dostępnej wartości
Gotowa tarcica, papier do pisania, kondensatory i wiele innych produktów jest zazwyczaj sprzedawanych tylko w kilku standardowych rozmiarach.
Wiele procedur projektowych opisuje, jak obliczyć przybliżoną wartość, a następnie "zaokrąglić" do jakiejś standardowej wielkości, używając zwrotów takich jak "zaokrąglenie w dół do najbliższej wartości standardowej", "zaokrąglenie w górę do najbliższej wartości standardowej" lub "zaokrąglenie do najbliższej wartości standardowej".
Gdy zestaw preferowanych wartości jest równomiernie rozłożony na skali logarytmicznej, wybór najbliższej wartości preferowanej do danej wartości może być postrzegany jako rodzaj skalowanego zaokrąglenia. Takie "zaokrąglone" wartości mogą być obliczane bezpośrednio.
Zaokrąglenie punktu pływającego
W arytmetyce zmiennoprzecinkowej, zaokrąglanie ma na celu przekształcenie danej wartości x w wartość z o określonej liczbie cyfr znaczących. Innymi słowy, z powinno być wielokrotnością liczby m, która zależy od wielkości z. Liczba m jest potęgą podstawy (zwykle 2 lub 10) formy zmiennoprzecinkowej.
Poza tym szczegółem, wszystkie omówione powyżej warianty zaokrąglania dotyczą również zaokrąglania liczb zmiennoprzecinkowych. Algorytm takiego zaokrąglania jest przedstawiony powyżej w sekcji Zaokrąglanie skalowane, ale ze stałym współczynnikiem skalowania s=1, a podstawą liczby całkowitej b>1.
Dla wyników, w których zaokrąglony wynik przepełniłby wynik dla ukierunkowanego zaokrąglenia jest albo odpowiednią podpisaną nieskończonością, albo najwyższą reprezentatywną dodatnią liczbą skończoną (lub najniższą reprezentatywną ujemną liczbą skończoną, jeżeli x jest ujemne), w zależności od kierunku zaokrąglenia. Wynikiem przelewu dla zwykłego przypadku zaokrąglenia do parzystości jest zawsze odpowiednia nieskończoność.
Ponadto, jeśli zaokrąglony wynik byłby zaniżony, tj. jeżeli wykładnik przekroczyłby najniższą reprezentowalną wartość całkowitą, efektywnym wynikiem może być albo zero (ewentualnie podpisane, jeżeli reprezentacja może zachować rozróżnienie znaków dla zer), albo najmniejsza reprezentowalna dodatnia liczba skończona (lub najwyższa reprezentowalna ujemna liczba skończona, jeżeli x jest ujemne), ewentualnie denormalna liczba dodatnia lub ujemna (jeżeli mantyza przechowuje wszystkie swoje cyfry znaczące), w którym to przypadku najbardziej znacząca cyfra może być jeszcze zapisana na niższej pozycji poprzez ustawienie najwyższych zapisanych cyfr na zero, a ta zapisana mantyza nie upuszcza najbardziej znaczącej cyfry, co jest możliwe, gdy podstawa b=2, ponieważ najbardziej znacząca cyfra jest zawsze 1 w tej podstawie), w zależności od kierunku zaokrąglenia. Wynikiem niedopływu dla zwykłego przypadku zaokrąglenia do zera jest zawsze odpowiednie zero.
Podwójne zaokrąglenie
Dwukrotne zaokrąglenie liczby po kolei do różnych dokładności, przy czym ta ostatnia dokładność jest większa, nie gwarantuje uzyskania takiego samego wyniku jak w przypadku zaokrąglenia raz do ostatecznej dokładności, z wyjątkiem przypadku zaokrąglenia ukierunkowanego. Na przykład zaokrąglenie liczby 9,46 do jednego miejsca po przecinku daje 9,5, a następnie 10 przy zaokrąglaniu do liczby całkowitej przy użyciu zaokrąglenia od połowy do parzystości, ale dawałoby 9 przy bezpośrednim zaokrągleniu do liczby całkowitej.
Niektóre języki komputerowe i standard IEEE 754-2008 nakazują, aby w prostych obliczeniach nie zaokrąglać wyniku dwukrotnie. Jest to szczególny problem w przypadku Javy, ponieważ jest ona zaprojektowana do identycznego działania na różnych maszynach, trzeba było użyć specjalnych sztuczek programistycznych, aby to osiągnąć z x87 zmiennoprzecinkowym. Język Java został zmieniony, aby umożliwić uzyskiwanie różnych wyników tam, gdzie różnica nie ma znaczenia i wymaga użycia kwalifikatora "strictfp", gdy wyniki muszą być dokładnie zgodne.
Dokładne obliczenie z zaokrągloną arytmetyką
Możliwe jest użycie arytmetyki zaokrąglonej do oceny dokładnej wartości funkcji z dyskretną domeną i zakresem. Na przykład, jeżeli wiemy, że liczba całkowita n jest kwadratem doskonałym, możemy obliczyć jej pierwiastek kwadratowy, konwertując n na wartość zmiennoprzecinkową x, obliczając przybliżony pierwiastek kwadratowy y z x za pomocą wartości zmiennoprzecinkowej, a następnie zaokrąglając y do najbliższej liczby całkowitej q. Jeżeli n nie jest zbyt duże, zmiennoprzecinkowy błąd zaokrąglenia w y będzie mniejszy niż 0,5, więc zaokrąglona wartość q będzie dokładnym pierwiastkiem kwadratowym z n. W większości nowoczesnych komputerów ta metoda może być znacznie szybsza niż obliczanie pierwiastka kwadratowego n za pomocą algorytmu całkowania.
Dylemat wytwórcy stołu
William Kahan ukuł termin "Dylemat wytwórcy stołu" dla nieznanego kosztu zaokrąglenia funkcji transcendentalnych:
"Nikt nie wie, ile kosztowałoby prawidłowe zaokrąglenie y^w dla każdych dwóch argumentów zmiennoprzecinkowych, przy których nie przekracza/nie przekracza. Zamiast tego, renomowane biblioteki matematyczne obliczają elementarne funkcje transcendentalne głównie w obrębie nieco ponad połowy ulp i prawie zawsze dobrze w obrębie jednego ulp. Dlaczego Y^W nie może być zaokrąglone w obrębie pół ulp jak SQRT? Ponieważ nikt nie wie, ile kosztowałoby to obliczenie... Nie istnieje ogólny sposób przewidywania, ile dodatkowych cyfr trzeba będzie przenieść, aby obliczyć wyrażenie transcendentalne i zaokrąglić je prawidłowo do jakiejś wcześniej przypisanej liczby cyfr. Nawet fakt (jeśli jest prawdziwy), że skończona liczba dodatkowych cyfr będzie ostatecznie wystarczająca, może być głębokim twierdzeniem".
Standard zmiennoprzecinkowy IEEE gwarantuje, że dodawanie, odejmowanie, mnożenie, dzielenie, pierwiastek kwadratowy i reszta zmiennoprzecinkowa dadzą prawidłowo zaokrąglony wynik operacji o nieskończonej precyzji. Nie ma jednak takiej gwarancji w przypadku bardziej złożonych funkcji i są one zazwyczaj dokładne w najlepszym przypadku tylko do ostatniego bitu.
Za pomocą twierdzenia Gelfonda-Schneidera i twierdzenia Lindemanna-Weierstrassa można udowodnić, że wiele standardowych funkcji elementarnych zwraca wyniki transcendentne, gdy podaje się racjonalne argumenty niezerowe; dlatego też zawsze można prawidłowo zaokrąglić takie funkcje. Jednakże określenie limitu dla danej precyzji, jak dokładne wyniki muszą być obliczone, zanim będzie można zagwarantować prawidłowe zaokrąglenie wyniku, może wymagać dużo czasu obliczeniowego.
Istnieje kilka pakietów obecnie, które oferują pełną dokładność. Pakiet MPFR daje poprawnie zaokrąglone, arbitralne wyniki dokładności. IBM napisał pakiet dla szybkich i dokładnych podstawowych funkcji IEEE, a w przyszłości standardowe biblioteki mogą oferować taką precyzję.
Możliwe jest opracowanie dobrze zdefiniowanych liczb obliczeniowych, których prawidłowe zaokrąglenie może nigdy nie być możliwe bez względu na to, ile cyfr jest obliczanych. Na przykład, jeżeli przypuszczenie Goldbacha jest prawdziwe, ale niepoprawne, to niemożliwe jest prawidłowe zaokrąglenie w dół 0,5 + 10-n, gdzie n jest pierwszą liczbą parzystą większą od 4, która nie jest sumą dwóch pierwiastków, lub 0,5, jeżeli takiej liczby nie ma. Można to jednak przybliżyć do dowolnej precyzji, nawet jeśli przypuszczenie jest niepoprawne.
Historia
Koncepcja zaokrąglania jest bardzo stara, może nawet starsza od koncepcji podziału. Niektóre starożytne gliniane tabletki znalezione w Mezopotamii zawierają tabele z zaokrąglonymi wartościami wzajemności i pierwiastków kwadratowych w podstawie 60. Zaokrąglone przybliżenia do π, długości roku i długości miesiąca są również starożytne.
Metoda "od okrągłego do kwadratowego" służy jako norma ASTM (E-29) od 1940 roku. Pochodzenie terminów "bezstronne zaokrąglenie" i "statystyczny zaokrąglenie" jest dość oczywiste. W czwartym wydaniu "Probability and Theory of Errors" z 1906 r. Robert Simpson Woodward nazwał to "regułą komputera", wskazując, że był on wtedy w powszechnym użyciu przez ludzkie komputery obliczające tabele matematyczne. Praca Churchilla Eisenharta z 1947 r. "Effects of Rounding or Grouping Data" (w "Selected Techniques of Statistical Analysis", McGrawHill, 1947 r., Eisenhart, Hastay i Wallis, redakcja) wskazywała, że praktyka ta była już "dobrze ugruntowana" w analizie danych.
Pochodzenie terminu "zaokrąglenie bankierów" pozostaje bardziej niejasne. Jeśli ta metoda zaokrąglania była kiedykolwiek standardem w bankowości, dowody okazały się niezwykle trudne do znalezienia. Przeciwnie, w sekcji 2 sprawozdania Komisji Europejskiej "Wprowadzenie euro i zaokrąglanie kwot w walutach" sugeruje się, że wcześniej nie było standardowego podejścia do zaokrąglania w bankowości; stwierdza się w niej, że kwoty "w połowie" powinny być zaokrąglane w górę.
Do lat 80-tych XX wieku metoda zaokrąglania stosowana w arytmetyce komputerowej zmiennoprzecinkowej była zazwyczaj ustalana przez sprzęt, słabo udokumentowana, niespójna i różna dla każdej marki i modelu komputera. Sytuacja ta zmieniła się po przyjęciu przez większość producentów komputerów standardu zmienno-punktowego IEEE 754. Standard ten pozwala użytkownikowi na wybór jednego z kilku trybów zaokrąglania i w każdym przypadku precyzyjnie określa sposób zaokrąglania wyników. Cechy te sprawiły, że obliczenia numeryczne stały się bardziej przewidywalne i niezależne od maszyny, a także umożliwiły efektywną i spójną implementację arytmetyki interwałowej.
Funkcje zaokrąglania w językach programowania
Większość języków programowania oferuje funkcje lub specjalną składnię do zaokrąglania liczb ułamkowych na różne sposoby. Najwcześniejsze języki numeryczne, takie jak FORTRAN i C, zapewniają tylko jedną metodę, zwykle obcinanie (w kierunku zera). Ta domyślna metoda może być implikowana w pewnych kontekstach, np. podczas przypisywania ułamkowej liczby do zmiennej całkowitej lub używania ułamkowej liczby jako indeksu tablicy. Inne rodzaje zaokrągleń musiały być zaprogramowane wprost; na przykład, zaokrąglenie liczby dodatniej do najbliższej liczby całkowitej można było zaimplementować przez dodanie 0,5 i obcięcie.
Jednakże w ostatnich dziesięcioleciach składnia i/lub standardowe biblioteki większości języków często udostępniały co najmniej cztery podstawowe funkcje zaokrąglania (góra/powyższe, dół/podłoga, do najbliższego i do zera). Metoda tie-breakingu może różnić się w zależności od języka i wersji, i/lub może być wybierana przez programistę. Kilka języków podąża za standardem zmiennoprzecinkowym IEEE-754 i definiuje te funkcje jako argument zmiennoprzecinkowy o podwójnej precyzji i zwracający wynik tego samego typu, który następnie może być w razie potrzeby skonwertowany na liczbę całkowitą. Ponieważ format podwójnej precyzji IEEE ma 52 bity ułamkowe, takie podejście może pozwolić na uniknięcie błędnych przelewów w językach, które mają 32-bitowe liczby całkowite. Niektóre języki, takie jak PHP, udostępniają funkcje zaokrąglania wartości do określonej liczby cyfr dziesiętnych, np. od 4321.5678 do 4321.57 lub 4300. Ponadto, wiele języków udostępnia funkcję "printf" lub podobną funkcję formatowania łańcuchów, która pozwala na konwersję liczby ułamkowej na łańcuch, zaokrąglonej do określonej przez użytkownika liczby miejsc po przecinku (precyzja). Z drugiej strony, obcinanie (od zaokrąglenia do zera) jest nadal domyślną metodą zaokrąglania stosowaną przez wiele języków, zwłaszcza przy podziale dwóch wartości całkowitych.
Przeciwnie, CSS i SVG nie definiują żadnej konkretnej maksymalnej precyzji dla liczb i pomiarów, które są traktowane i wyeksponowane w ich Obiektowym Modelu Dokumentu i w ich interfejsie - języku opisu interfejsu - jako ciągi znaków jak gdyby miały nieskończoną precyzję i nie rozróżniają liczb całkowitych od wartości zmiennoprzecinkowych; jednakże implementacje tych języków zazwyczaj konwertują te liczby na podwójne punkty zmiennoprzecinkowe w standardzie IEEE-754 przed wyeksponowaniem obliczonych cyfr z ograniczoną precyzją (szczególnie w ramach standardowych wiązań interfejsu Javascript lub ECMAScript).
Inne standardy zaokrąglania
Niektóre dyscypliny lub instytucje wydały normy lub dyrektywy dotyczące zaokrąglania.
Obserwacje pogodowe USA
W wytycznej wydanej w połowie 1966 r. Biuro Federalnego Koordynatora ds. Meteorologii w USA ustaliło, że dane meteorologiczne powinny być zaokrąglane do najbliższej liczby rundy, zgodnie z zasadą "round half up" tie-breaking. Przykładowo, 1,5 zaokrąglone na liczbę całkowitą powinno wynosić 2, a -1,5 powinno wynosić -1. Przed tą datą reguła tie-breakingu była "zaokrąglona do połowy od zera".
Ujemne zero w meteorologii
Niektórzy meteorolodzy mogą napisać "-0", aby wskazać temperaturę w zakresie od 0,0 do -0,5 stopnia (wyłącznie), która została zaokrąglona do liczby całkowitej. Zapis ten jest używany, gdy znak ujemny jest uważany za ważny, bez względu na to, jak mała jest jego wielkość; na przykład, gdy zaokrąglenie temperatury w skali Celsjusza, gdzie poniżej zera oznacza zamarzanie. []
Powiązane strony
Pytania i odpowiedzi
P: Co oznacza słowo "zaokrąglenie"?
O: Zaokrąglanie to zastępowanie wartości liczbowej inną wartością, która jest w przybliżeniu równa, ale ma krótszą, prostszą lub bardziej jednoznaczną formę.
P: Jaki jest przykład zaokrąglania?
O: Przykładem zaokrąglenia może być zaokrąglenie kwoty 23,74 USD do 24 USD, zaokrąglenie ułamka 312/937 do 1/3 oraz zaokrąglenie wyrażenia 2 {sqrt {2}} do 1,41.
P: Dlaczego zaokrąglamy liczby?
O: Zaokrąglamy liczby, aby uzyskać wartość, która jest łatwiejsza do zapisania i obsługi niż oryginał. Można to również zrobić, aby wskazać dokładność obliczonej liczby.
P: Jakie są potencjalne problemy z zaokrąglaniem?
O: Zaokrąglanie może wprowadzić pewien błąd w wyniku zaokrąglenia, a w niektórych przypadkach może sprawić, że wynik będzie bez znaczenia z powodu błędów gromadzących się w czasie obliczeń. Ponadto dokładne zaokrąglanie transcendentalnych funkcji matematycznych może być trudne, ponieważ nie można wiedzieć, ile dodatkowych cyfr należy obliczyć, aby rozstrzygnąć, czy należy zaokrąglić w górę, czy w dół.
P: Jak zaokrąglanie ma się do kwantyzacji?
O: Zaokrąglanie ma wiele podobieństw do kwantyzacji, która występuje wtedy, gdy wielkości fizyczne muszą być zakodowane za pomocą liczb lub sygnałów cyfrowych.