Zaokrouhlení

Slovo "zaokrouhlení" pro číselnou hodnotu znamená její nahrazení jinou hodnotou, která je přibližně stejná, ale má kratší, jednodušší nebo jednoznačnější tvar. Například 23,74 USD lze zaokrouhlit na 24 USD nebo zlomek 312/937 lze zaokrouhlit na 1/3 nebo výraz 2 {\displaystyle {\sqrt {2}}{\displaystyle {\sqrt {2}}} jako 1,41.

Zaokrouhlování se často provádí záměrně, aby se získala hodnota, která se snadněji zapisuje a zpracovává než původní hodnota. Může být také použito k označení přesnosti vypočteného čísla; například množství, které bylo vypočteno jako 123 456, ale o němž je známo, že je přesné pouze s přesností na několik set jednotek, je lépe uvést jako "přibližně 123 500".

Na druhou stranu zaokrouhlování může do výsledku vnést určitou zaokrouhlovací chybu. Zaokrouhlování je téměř nevyhnutelné při mnoha výpočtech, zejména při dělení dvou čísel v celočíselné aritmetice nebo aritmetice s pevnou řádovou čárkou, při výpočtech matematických funkcí, jako jsou odmocniny, logaritmy a sinusy, nebo při použití reprezentace s pohyblivouřádovou čárkou s pevným počtem významných číslic. V posloupnosti výpočtů se tyto zaokrouhlovací chyby obecně kumulují a v určitých "špatně podmíněných" případech pak mohou způsobit, že výsledek ztratí smysl.

Přesné zaokrouhlování transcendentních matematických funkcí je obtížné, protože počet dalších číslic, které je třeba vypočítat, aby bylo možné rozhodnout, zda zaokrouhlovat nahoru nebo dolů, nelze předem znát. Tento problém je znám jako "dilema tvůrce tabulky" (níže).

Zaokrouhlování má mnoho podobností s kvantizací, ke které dochází při kódování fyzikálních veličin čísly nebo digitálními signály.

Typy zaokrouhlování

Typické problémy se zaokrouhlováním jsou:

  • aproximace iracionálního čísla zlomkem, např. π číslem 22/7;
  • aproximace zlomku s periodickým desetinným rozkladem konečným desetinným zlomkem, např. 5/3 číslem 1,6667;
  • nahrazení racionálního čísla zlomkem s menším čitatelem a jmenovatelem, např. 3122/9417 1/3;
  • nahrazení zlomkového desetinného čísla číslem s menším počtem číslic, např. 2,1784 dolaru číslem 2,18 dolaru;
  • nahrazení celého desetinného čísla celým číslem s více koncovými nulami, např. 23 217 lidí za 23 200 lidí; nebo obecně,
  • nahrazení hodnoty násobkem zadané hodnoty, např. 27,2 sekundy 30 sekundami (násobek 15).

Zaokrouhlení na zadaný přírůstek

Nejběžnějším typem zaokrouhlování je zaokrouhlování na celá čísla nebo obecněji na celočíselné násobky nějakého přírůstku - například zaokrouhlování na celé desetiny sekundy, setiny dolaru, na celé násobky 1/2 nebo 1/8 palce, na celé desítky nebo tisíce atd..

Zaokrouhlení čísla x na násobek určitého přírůstku m obecně zahrnuje následující kroky:

  1. Vydělte x číslem m a výsledek nechť je y;
  2. Zaokrouhlete y na celočíselnou hodnotu a nazvěte ji q;
  3. Vynásobte q číslem m a získáte zaokrouhlenou hodnotu z.

z = r o u n d ( x , m ) = r o u n d ( x / m ) m {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,} {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,}

Například zaokrouhlení x = 2,1784 dolaru na celé centy (tj. na násobek 0,01) znamená výpočet y = x/m = 2,1784/0,01 = 217,84, poté zaokrouhlení y na celé číslo q = 218 a nakonec výpočet z = q×m = 218×0,01 = 2,18.

Při zaokrouhlování na předem stanovený počet významných číslic závisí přírůstek m na velikosti zaokrouhleného čísla (nebo zaokrouhleného výsledku).

Přírůstek m je obvykle konečný zlomek v jakékoli číselné soustavě, která se používá k reprezentaci čísel. Pro zobrazení lidem to obvykle znamená desetinnou číselnou soustavu (tj. m je celé číslo vynásobené mocninou 10, například 1/1000 nebo 25/100). Pro mezihodnoty uložené v digitálních počítačích to často znamená dvojkovou číselnou soustavu (m je celé číslo vynásobené mocninou 2).

Abstraktní jednoargumentová funkce "round()", která vrací celé číslo z libovolné reálné hodnoty, má nejméně tucet různých konkrétních definic uvedených v části zaokrouhlování na celá čísla. Abstraktní dvouargumentová funkce "round()" je zde formálně definována, ale v mnoha případech se používá s implicitní hodnotou m = 1 pro přírůstek a pak se redukuje na ekvivalentní abstraktní jednoargumentovou funkci, která má rovněž stejný tucet různých konkrétních definic.

Zaokrouhlení na celé číslo

Nejzákladnější formou zaokrouhlování je nahrazení libovolného čísla celým číslem. Všechny následující způsoby zaokrouhlování jsou konkrétní implementací abstraktní jednoargumentové funkce "round()", která byla představena a použita v předchozích částech.

Existuje mnoho způsobů zaokrouhlování čísla y na celé číslo q. Nejčastější jsou tyto

  • zaokrouhlujte směrem dolů (nebo berte dolní hranici, nebo zaokrouhlujte směrem k mínus nekonečnu): q je největší celé číslo, které není větší než y.

q = f l o o r ( y ) = y = - - y {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,} {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,}

  • zaokrouhlit nahoru (nebo vzít strop, nebo zaokrouhlit směrem k plus nekonečnu): q je nejmenší celé číslo, které není menší než y.

q = c e i l ( y ) = y = - - y {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,} {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,}

  • zaokrouhlení směrem k nule (nebo zkrácení, nebo zaokrouhlení směrem od nekonečna): q je celočíselná část y bez číslic zlomku.

q = t r u n k a ( y ) = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,} {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,}

  • zaokrouhlujte směrem od nuly (nebo směrem k nekonečnu): je-li y celé číslo, q je y; jinak q je celé číslo, které je nejblíže 0 a je takové, že y je mezi 0 a q.

q = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,} {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,}

  • zaokrouhlení na nejbližší: q je celé číslo, které je nejblíže k y (pravidla pro rovnost viz níže).

První čtyři metody se nazývají směrované zaokrouhlování, protože všechny posuny od původního čísla y k zaokrouhlené hodnotě q směřují ke stejné mezní hodnotě (0, +∞ nebo -∞) nebo od ní.

Je-li y kladné, je zaokrouhlování dolů stejné jako zaokrouhlování k nule a zaokrouhlování nahoru stejné jako zaokrouhlování od nuly. Je-li y záporné, je zaokrouhlení dolů stejné jako zaokrouhlení směrem od nuly a zaokrouhlení nahoru je stejné jako zaokrouhlení směrem k nule. V každém případě, je-li y celé číslo, je q právě y. Následující tabulka ilustruje tyto metody zaokrouhlování:

y

zaokrouhlování
(směrem k -∞)

roundup
(směrem k +∞)

zaokrouhlení směrem k nule

zaokrouhlení od
nuly

nejbližší

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

+23 nebo +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 nebo -24

−23.67

−24

−23

−23

−24

−24

Pokud se provádí mnoho výpočtů za sebou, může mít volba metody zaokrouhlování velmi významný vliv na výsledek. Známým příkladem je nový index, který v roce 1982 vytvořila burza ve Vancouveru. Původně byl stanoven na 1 000 000 a po 22 měsících klesl na přibližně 520 - zatímco ceny akcií v tomto období obecně rostly. Problém byl způsoben tím, že index byl denně tisíckrát přepočítáván a vždy zaokrouhlen na 3 desetinná místa dolů, takže se zaokrouhlovací chyby hromadily. Přepočet s lepším zaokrouhlováním dal na konci stejného období hodnotu indexu 1098,892.

Zlomení nerozhodného výsledku

Zaokrouhlení čísla y na nejbližší celé číslo vyžaduje určité pravidlo pro případy, kdy je y přesně v polovině vzdálenosti mezi dvěma celými čísly, tj. kdy je zlomková část y přesně 0,5.

Zaokrouhlení o polovinu nahoru

V mnoha oborech se hojně používá následující pravidlo pro rovnost, které se nazývá zaokrouhlení na polovinu nahoru (nebo zaokrouhlení na polovinu směrem k nekonečnu). To znamená, že poloviční hodnoty y se vždy zaokrouhlují nahoru.

  • Je-li zlomek y přesně 0,5, pak q = y + 0,5.

q = y + 0,5 = - - y - 0,5 {\displaystyle q=\left\lfloor y+0,5\right\rfloor =-\left\lceil -y-0,5\right\rceil \,} {\displaystyle q=\left\lfloor y+0.5\right\rfloor =-\left\lceil -y-0.5\right\rceil \,}

Podle tohoto pravidla se například hodnota 23,5 zaokrouhlí na 24, ale -23,5 se zaokrouhlí na -23.

Jedná se o jedno ze dvou pravidel, která se obvykle vyučují v hodinách matematiky na základních školách v USA. []

Nebýt zlomků 0,5, byly by chyby zaokrouhlování způsobené metodou zaokrouhlování na nejbližší hodnotu zcela symetrické: pro každý zlomek, který se zaokrouhluje nahoru (např. 0,268), existuje doplňkový zlomek (konkrétně 0,732), který se zaokrouhluje dolů o stejnou hodnotu. Při zaokrouhlování velkého souboru čísel s náhodnými zlomkovými částmi by se tyto chyby zaokrouhlování vzájemně statisticky kompenzovaly a očekávaná (průměrná) hodnota zaokrouhlených čísel by se rovnala očekávané hodnotě původních čísel.

Pravidlo zaokrouhlování na polovinu nahoru však není symetrické, protože zlomky, které jsou přesně 0,5, se vždy zaokrouhlují nahoru. Tato asymetrie vnáší do zaokrouhlovacích chyb pozitivní zkreslení. Pokud se například zlomek y skládá ze tří náhodných desetinných čísel, pak očekávaná hodnota q bude o 0,0005 vyšší než očekávaná hodnota y. Z tohoto důvodu se zaokrouhlování na nejbližší s pravidlem zaokrouhlování na polovinu nahoru také (nejednoznačně) nazývá asymetrické zaokrouhlování.

Jedním z důvodů pro zaokrouhlení na 0,5 je, že je třeba zkoumat pouze jednu číslici. Když například vidíme 17,50000..., první tři číslice, 17,5, určují, že číslo bude zaokrouhleno na 18. Pokud bychom použili opačné pravidlo (zaokrouhlení o polovinu dolů), pak bychom museli zkoumat všechny nuly na desetinných místech, abychom zjistili, zda je hodnota přesně 17,5. To by znamenalo, že se hodnota zaokrouhluje o polovinu dolů.

Zaokrouhlení o polovinu dolů

Lze také použít zaokrouhlení o polovinu dolů (nebo zaokrouhlení o polovinu směrem k mínus nekonečnu) na rozdíl od běžnějšího zaokrouhlení o polovinu nahoru (metoda zaokrouhlení o polovinu nahoru je běžnou konvencí, ale není ničím jiným než konvencí).

  • Je-li zlomek y přesně 0,5, pak q = y - 0,5.

q = y - 0,5 = - - y + 0,5 {\displaystyle q=\left\lceil y-0,5\right\rceil =-\left\lfloor -y+0,5\right\rfloor \,} {\displaystyle q=\left\lceil y-0.5\right\rceil =-\left\lfloor -y+0.5\right\rfloor \,}

Například 23,5 se zaokrouhlí na 23 a -23,5 se zaokrouhlí na -24.

Pravidlo zaokrouhlování poloviny dolů není symetrické, protože zlomky, které jsou přesně 0,5, se vždy zaokrouhlují dolů. Tato asymetrie vnáší do zaokrouhlovacích chyb záporné zkreslení. Pokud se například zlomek y skládá ze tří náhodných desetinných čísel, pak očekávaná hodnota q bude o 0,0005 nižší než očekávaná hodnota y. Z tohoto důvodu se zaokrouhlování na nejbližší s pravidlem zaokrouhlování na polovinu dolů také (nejednoznačně) nazývá asymetrické zaokrouhlování.

Zaokrouhlení na polovinu od nuly

Druhou běžně vyučovanou a používanou metodou je zaokrouhlení poloviny od nuly (nebo zaokrouhlení poloviny směrem k nekonečnu), a to:

  • Je-li zlomek y přesně 0,5, pak q = y + 0,5, je-li y kladné, a q = y - 0,5, je-li y záporné.

q = sgn ( y ) | y | + 0,5 = - sgn ( y ) - | y | - 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,} {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,}

Například 23,5 se zaokrouhlí na 24 a -23,5 se zaokrouhlí na -24.

Tato metoda zachází s kladnými a zápornými hodnotami symetricky, a proto je prosta celkového zkreslení, pokud jsou původní čísla kladná nebo záporná se stejnou pravděpodobností. Toto pravidlo však stále zavádí kladné zkreslení pro kladná čísla a záporné zkreslení pro záporná čísla.

Často se používá pro převody měn a zaokrouhlování cen (kdy se částka nejprve přepočítává na nejmenší významný díl měny, např. centy eura), protože se snadno vysvětlí pouhým zohledněním první zlomkové číslice, nezávisle na doplňkových přesných číslicích nebo znaménku částky (pro přísnou ekvivalenci mezi platícím a příjemcem částky).

Zaokrouhlení na polovinu směrem k nule

Lze také zaokrouhlovat polovinu směrem k nule (nebo polovinu směrem od nekonečna) na rozdíl od běžnějšího zaokrouhlování poloviny směrem od nuly (metoda zaokrouhlování poloviny směrem od nuly je běžnou konvencí, ale není ničím jiným než konvencí).

  • Je-li zlomek y přesně 0,5, pak q = y - 0,5, je-li y kladné, a q = y + 0,5, je-li y záporné.

q = sgn ( y ) | y | - 0,5 = - sgn ( y ) - | y | + 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,} {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,}

Například 23,5 se zaokrouhlí na 23 a -23,5 se zaokrouhlí na -23.

Tato metoda také zachází s kladnými a zápornými hodnotami symetricky, a proto je prosta celkového zkreslení, pokud jsou původní čísla kladná nebo záporná se stejnou pravděpodobností. Toto pravidlo však stále zavádí záporné zkreslení pro kladná čísla a kladné zkreslení pro záporná čísla.

Zaokrouhlete polovinu na sudou

Ještě méně neobjektivní pravidlo pro rozhodování o remíze je zaokrouhlení poloviny na sudou, a sice.

  • Je-li zlomek y roven 0,5, pak q je sudé celé číslo nejbližší y.

Například z +23,5 se stane +24, z +22,5 se stane +22, z -22,5 se stane -22 a z -23,5 se stane -24.

Tato metoda také zachází s kladnými a zápornými hodnotami symetricky, a proto je prosta celkového zkreslení, pokud jsou původní čísla kladná nebo záporná se stejnou pravděpodobností. Navíc pro většinu rozumných rozdělení hodnot y je očekávaná (průměrná) hodnota zaokrouhlených čísel v podstatě stejná jako hodnota původních čísel, i když jsou všechna kladná (nebo všechna záporná). Toto pravidlo však stále zavádí kladné zkreslení pro sudá čísla (včetně nuly) a záporné zkreslení pro lichá čísla.

Této variantě metody zaokrouhlování se také říká nestranné zaokrouhlování (nejednoznačně a trochu zneužitelně), konvergentní zaokrouhlování, statistické zaokrouhlování, holandské zaokrouhlování, Gaussovo zaokrouhlování nebo bankovní zaokrouhlování. Toto zaokrouhlování se hojně používá v účetnictví.

Jedná se o výchozí režim zaokrouhlování používaný ve výpočetních funkcích a operátorech IEEE 754.

Zaokrouhlení poloviny na lichou

Další pravidlo pro rozhodování o remíze, které je velmi podobné pravidlu pro zaokrouhlení poloviny na sudou, a sice

  • Je-li zlomek y roven 0,5, pak q je liché celé číslo nejbližší y.

Například z +22,5 se stane +23, z +21,5 se stane +21, z -21,5 se stane -21 a z -22,5 se stane -23.

Tato metoda také zachází s kladnými a zápornými hodnotami symetricky, a proto je prosta celkového zkreslení, pokud jsou původní čísla kladná nebo záporná se stejnou pravděpodobností. Navíc pro většinu rozumných rozdělení hodnot y je očekávaná (průměrná) hodnota zaokrouhlených čísel v podstatě stejná jako hodnota původních čísel, i když jsou všechna kladná (nebo všechna záporná). Toto pravidlo však stále zavádí zápornou odchylku pro sudá čísla (včetně nuly) a kladnou odchylku pro lichá čísla.

Tato varianta se ve většině výpočtů téměř nepoužívá, s výjimkou situací, kdy se chceme vyhnout zaokrouhlování 0,5 nebo -0,5 na nulu nebo se vyhnout zvětšování měřítka čísel reprezentovaných jako čísla s pohyblivou řádovou čárkou (s omezenými rozsahy pro škálovací exponent), takže by se nekonečné číslo zaokrouhlovalo na nekonečno nebo by se malá denormální hodnota zaokrouhlovala na normální nenulovou hodnotu (ty by mohly nastat při režimu zaokrouhlování na polovinu na sudou). Ve skutečnosti tento režim upřednostňuje zachování stávající stupnice nerozhodných čísel a pokud možno se vyhýbá výsledkům mimo rozsah.

Stochastické zaokrouhlování

Další nestrannou metodou pro stanovení nerozhodného výsledku je stochastické zaokrouhlování:

  • Pokud je zlomek y roven 0,5, zvolte náhodně q mezi y + 0,5 a y - 0,5 se stejnou pravděpodobností.

Stejně jako pravidlo zaokrouhlení na polovinu k sudé je toto pravidlo v podstatě bez celkového zkreslení, ale je spravedlivé i mezi sudými a lichými hodnotami q. Na druhou stranu vnáší do výsledku náhodnou složku; dvojí provedení stejného výpočtu na stejných datech může dát dva různé výsledky. Rovněž je otevřena nevědomému zkreslení, pokud o tom, kterým směrem zaokrouhlovat, "náhodně" rozhodují lidé (a nikoli počítače nebo náhodná zařízení).

Střídavé rozhodování při rovnosti hlasů

Jednou z metod, která je nejasnější než většina ostatních, je střídavé zaokrouhlování na poloviny.

  • Pokud je zlomek 0,5, zaokrouhlujte střídavě nahoru a dolů: při prvním výskytu zlomku 0,5 zaokrouhlujte nahoru, při druhém výskytu dolů a tak dále.

Tím se potlačí náhodná složka výsledku, pokud lze efektivně očíslovat výskyty 0,5 zlomku. Pokud je však celkový počet výskytů lichý, může stále vnášet kladné nebo záporné zkreslení podle směru zaokrouhlení přiřazeného prvnímu výskytu.

Jednoduchý dithering

V některých kontextech mohou být všechny výše uvedené metody zaokrouhlování nevyhovující. Předpokládejme například, že y je přesné měření zvukového signálu, které se zaokrouhluje na celé číslo q, aby se snížily náklady na ukládání nebo přenos. Pokud se y mění s časem pomalu, kterákoli z výše uvedených metod zaokrouhlování povede k tomu, že q bude po dlouhé intervaly zcela konstantní, oddělené náhlými skoky o ±1. Při přehrávání signálu q budou tyto kroky slyšet jako velmi nepříjemný šum a veškeré odchylky původního signálu mezi dvěma celočíselnými hodnotami se zcela ztratí.

Jedním ze způsobů, jak se tomuto problému vyhnout, je zaokrouhlovat každou hodnotu y nahoru s pravděpodobností rovnou jejímu zlomku a dolů s doplňkem této pravděpodobnosti. Například číslo 23,17 by bylo zaokrouhleno nahoru na 24 s pravděpodobností 0,17 a dolů na 23 s pravděpodobností 1 - 0,17 = 0,83. (To je ekvivalentní zaokrouhlení y + s, kde s je náhodné číslo rovnoměrně rozdělené mezi 0 a 1.) Díky tomuto speciálnímu zaokrouhlování, známému jako dithering, se náhlé kroky nahradí méně nepříjemným šumem a i malé odchylky v původním signálu budou do jisté míry zachovány. Stejně jako stochastický přístup k rovnosti nemá dithering žádné zkreslení: pokud jsou všechny hodnoty zlomků stejně pravděpodobné, je zaokrouhlení nahoru o určitou hodnotu stejně pravděpodobné jako zaokrouhlení dolů o stejnou hodnotu; a totéž platí pro součet několika zaokrouhlených čísel. Na druhou stranu dithering vnáší do výsledku náhodnou složku, která je mnohem větší než u stochastického tie-breakingu.

Přesněji řečeno, chyba zaokrouhlování pro každé ditherované číslo bude rovnoměrně rozdělená náhodná veličina se střední hodnotou nula, ale se směrodatnou odchylkou 1/12 ≈ 0,2886 {\displaystyle 1/{\sqrt {12}}\aprox 0,2886}. {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, což je lepší než 1/2 směrodatné odchylky u jednoduchých prediktivních metod, ale o něco vyšší než u jednodušší stochastické metody. Součet n zaokrouhlených čísel však bude náhodná veličina s očekávanou chybou nula, ale se směrodatnou odchylkou n/12 {\displaystyle {\sqrt {n}}/{\sqrt {12}}}. {\displaystyle {\sqrt {n}}/{\sqrt {12}}}(celkový zbývající šum), která se polokvadraticky rozchází a může být snadno postřehnutelná, i když směrodatná odchylka chyby zaokrouhlování na vzorek bude 1 / 12 n {\displaystyle 1/{\sqrt {12n}}{\displaystyle 1/{\sqrt {12n}}}, která pomalu polokvadraticky konverguje k nule. Toto náhodné rozdělení tedy může být pro některé aplikace, které zaokrouhlují velké množství dat, stále příliš vysoké.

Vícerozměrný dithering

Tato varianta jednoduché metody ditheringu stále zaokrouhluje hodnoty s pravděpodobností rovnou jejich podílu. Avšak namísto použití náhodného rozdělení pro zaokrouhlování izolovaných vzorků se zaokrouhlovací chyba vyskytující se u každého zaokrouhleného vzorku sečte pro další okolní prvky, které se mají vzorkovat nebo vypočítat; tato kumulovaná hodnota se pak přičte k hodnotě těchto dalších vzorkovaných nebo vypočítaných hodnot, které se mají zaokrouhlit, takže upravené hodnoty budou tento rozdíl zohledňovat pomocí prediktivního modelu (jako je Floyd-Steinbergův dithering).

Upravené hodnoty se pak zaokrouhlí některou z výše uvedených metod zaokrouhlování, nejlépe stochastickou nebo ditheringovou metodou: v posledním případě bude součet n zaokrouhlených čísel stále náhodnou veličinou s očekávanou chybou nula, ale s vynikající konstantní směrodatnou odchylkou 1/12 {\displaystyle 1/{\sqrt {12}}}. {\displaystyle 1/{\sqrt {12}}}místo toho, aby se při ditheringu izolovaných vzorků rozcházela polokvadraticky; a celková průměrná odchylka zaokrouhlovací chyby na jeden zaokrouhlený vzorek bude 1 / ( n 12 ) {\displaystyle 1/(n{\sqrt {12}})}{\displaystyle 1/(n{\sqrt {12}})}, která bude hyperbolicky konvergovat k nule rychleji než při polohyperbolické konvergenci při ditheringu izolovaných vzorků.

V praxi se při zaokrouhlování velkých souborů vzorkovaných dat (například při vykreslování zvuku, obrazu a videa) nejčastěji používá kumulace chyb zaokrouhlení s jednoduchým prediktivním zaokrouhlením upravených hodnot (například zaokrouhlení směrem k nule), protože se tak stále zachovává hyperbolická konvergence k nule celkové střední odchylky chyby zaokrouhlení a její směrodatné odchylky. Toto vylepšení se často používá při zpracování obrazu a zvuku (zejména pro přesné změny měřítka a operace proti vyhlazování, kde jednoduché pravděpodobnostní zaokrouhlování izolovaných hodnot může stále způsobovat vnímatelný šum, někdy dokonce horší než moiré efekty, které se vyskytují při jednoduchých nepravděpodobnostních metodách zaokrouhlování aplikovaných na izolované vzorky).

Efektivní šíření nahromaděných chyb zaokrouhlování může záviset na diskrétním rozměru vzorkovaných dat, která mají být zaokrouhlena: při vzorkování dvojrozměrných obrazů, včetně barevných obrazů (které přidávají diskrétní rozměr barevných rovin), nebo trojrozměrných videí (které přidávají diskrétní rozměr času), nebo u polyfonních zvukových dat (využívajících diskrétní rozměry času a kanálu) může být stále výhodnější šířit tuto chybu do preferovaného směru nebo rovnoměrně do několika ortogonálních rozměrů, např. vertikálně vs. vertikálně. horizontálně u dvojrozměrných obrazů, nebo do paralelních barevných kanálů ve stejné poloze a/nebo časové značce a v závislosti na dalších vlastnostech těchto ortogonálních diskrétních rozměrů (podle modelu vnímání). V těchto případech lze použít několik akumulátorů zaokrouhlovacích chyb (alespoň jeden pro každou diskrétní dimenzi) nebo (n-1)-dimenzionální vektor (nebo matici) akumulátorů.

V některých z těchto případů mohou být diskrétní rozměry dat pro vzorkování a zaokrouhlování zpracovány neortogonálně: Například při práci s barevnými obrazy lze data trojrozměrných barevných rovin v každé fyzické dimenzi (výška, šířka a případně čas) přemapovat pomocí percepčního barevného modelu, takže akumulátory chyb zaokrouhlování budou navrženy tak, aby zachovávaly světlost s vyšší pravděpodobností než odstín nebo sytost, místo aby se chyby šířily do každé ortogonální barevné roviny samostatně; a ve stereofonních zvukových datech mohou být dva zaokrouhlené datové kanály (levý a pravý) zaokrouhleny dohromady, aby se zachovala jejich střední hodnota před jejich efektivním rozdílem, který absorbuje většinu zbývajících zaokrouhlovacích chyb vyváženě kolem nuly.

Zaokrouhlování na jednoduché zlomky

V některých situacích je žádoucí zaokrouhlit dané číslo x na "čistý" zlomek, tj. nejbližší zlomek z = m/n, jehož čitatel m a jmenovatel n nepřesahují dané maximum. Tento problém je poměrně odlišný od problému zaokrouhlování hodnoty na pevný počet desítkových nebo dvojkových číslic nebo na násobek dané jednotky m. Tento problém souvisí s Fareyovými posloupnostmi, Sternovým-Brocotovým stromem a pokračujícími zlomky.

Zaokrouhlování v měřítku

Tento typ zaokrouhlování, který se také nazývá zaokrouhlování na logaritmické stupnici, je variantou zaokrouhlování na zadaný přírůstek, ale s přírůstkem, který se mění v závislosti na stupnici a velikosti výsledku. Konkrétně je záměrem omezit počet významných číslic a zaokrouhlit hodnotu tak, že nevýznamné číslice budou vypuštěny. Tento typ zaokrouhlování se implicitně vyskytuje u čísel počítaných s hodnotami s plovoucí desetinnou čárkou s omezenou přesností (například typy IEEE-754 float a double), ale lze jej použít obecněji k zaokrouhlování jakýchkoli reálných hodnot s libovolným kladným počtem významných číslic a libovolným striktně kladným reálným základem.

Lze jej například použít v technické grafice pro reprezentaci dat s logaritmickou stupnicí s proměnnými kroky (například vlnové délky, jejichž základ nemusí být nutně celočíselná míra) nebo ve statistických datech pro definování tříd reálných hodnot v rámci intervalů s exponenciálně rostoucí šířkou (nejčastěji se však používá s celočíselnými základy, jako je 10 nebo 2). [zdroj? ]

Tento typ zaokrouhlování je založen na logaritmické stupnici definované pevným nenulovým reálným škálovacím faktorem s (v nejčastějších případech je tento faktor s=1) a pevným kladným základem b>1 (nemusí být nutně celé číslo a nejčastěji se liší od škálovacího faktoru) a pevným celočíselným počtem n>0 významných číslic v tomto základu (který určí hodnotu přírůstku, který se použije pro zaokrouhlení, spolu s vypočteným efektivním měřítkem zaokrouhleného čísla).

Číslo primárního argumentu (stejně jako výsledné zaokrouhlené číslo) je nejprve reprezentováno v exponenciálním zápisu x = s-a-m-bc, přičemž znaménko s je buď +1, nebo -1, absolutní mantisa a je omezena na polootevřený kladný interval [1/b,1) a exponent c je libovolné (kladné nebo záporné) celé číslo. V této reprezentaci jsou všechny významné číslice ve zlomkové části absolutní mantisy, jejíž celočíselná část je vždy nulová.

Pokud je zdrojové číslo (nebo zaokrouhlené číslo) 0, absolutní mantisa a je definována jako 0, exponent c je pevně nastaven na libovolnou hodnotu (ve většině konvencí 0, ale některé reprezentace s plovoucí desetinnou čárkou nemohou použít nulovou absolutní mantisu, ale vyhrazují pro exponent c určitou maximální zápornou hodnotu, která reprezentuje samotné číslo 0), a znaménko s může být libovolně zvoleno v rozmezí -1 nebo +1 (pro prostou nulu je obvykle nastaveno na +1, nebo je nastaveno na stejné znaménko jako argument v zaokrouhlené hodnotě, pokud reprezentace čísla umožňuje rozlišit kladné a záporné nuly, i když nakonec reprezentují stejnou číselnou hodnotu 0).

Stejně tak lze použít škálovanou exponenciální reprezentaci jako x = a-s-bc se znaménkovou mantisou a buď rovnou nule, nebo v jednom ze dvou polootevřených intervalů (-1,-1/b] a [+1/b,+1), což bude případ následujícího algoritmu.

Kroky pro výpočet tohoto zaokrouhlení jsou obecně podobné následujícím:

  1. pokud se x rovná nule, jednoduše vrátí x; v opačném případě:
  2. převést x na škálovanou exponenciální reprezentaci se znaménkovou mantisou:
    x = a
    s b c {\displaystyle x=a\cdot s\cdot b^{c}\,} {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. nechť x' je nezmenšená hodnota x vydělením škálovacím faktorem s:
      x ′ = x / s {\displaystyle x'=x/s\,}
      {\displaystyle x'=x/s\,} ;
    2. nechť je škálovací exponent c roven jedné plus logaritmus základu-b absolutní hodnoty x', zaokrouhlený dolů na celé číslo (směrem k mínus nekonečnu):
      c = 1 +
      log b | x ′ | = 1 + log b | x / s | {\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,}{\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. nechť je znaménková mantisa a součinem x' děleno b na mocninu c:
      a = x ′
      b - c = x / s b - c {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,} {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. vypočítat zaokrouhlenou hodnotu v této reprezentaci:
    1. nechť c' je počáteční škálovací exponent c x':
      c ′ = c {\displaystyle c'=c\,}
      {\displaystyle c'=c\,}
    2. nechť m je přírůstek pro zaokrouhlení mantisy a podle počtu významných číslic, které se mají zachovat:
      m = b - n {\displayystyle m=b^{-n}\,}
      {\displaystyle m=b^{-n}\,}
    3. nechť a' je znaménková mantisa a zaokrouhlená podle tohoto přírůstku m a zvoleného způsobu zaokrouhlování:
      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\cdot b^{n-c'})\cdot b^{-n}\,} {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. pokud absolutní hodnota a' není menší než b, pak dekrementujte n (vynásobte přírůstek m číslem b), zvětšete škálovací exponent c', vydělte znaménkovou mantisu a číslem b a znovu začněte zaokrouhlovat novou znaménkovou mantisu a na a' podle stejného vzorce; tomuto kroku se lze vyhnout pouze tehdy, pokud funkce abtract "round()" vždy zaokrouhluje a směrem k 0 (tj.tj. pokud se jedná o prosté zkrácení), ale je nutný, pokud může zaokrouhlovat a směrem k nekonečnu, protože zaokrouhlená mantisa může mít v tomto případě vyšší škálovací exponent, čímž zůstane jedna číslice přesnosti navíc.
  4. vrátí zaokrouhlenou hodnotu:
    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 {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,} {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,}.

Pro abstraktní funkci "round()" může tento typ zaokrouhlování použít některý z režimů zaokrouhlování na celá čísla, které jsou podrobněji popsány v následující části, nejčastěji se však používá režim zaokrouhlování na nejbližší číslo (s pravidly pro rovnost popsanými podrobněji níže).

Například:

  • zaokrouhlení 1,234 se škálovacím faktorem 1 v základu 10 a 3 významnými číslicemi (maximální relativní přesnost=1/1000) při použití libovolného režimu zaokrouhlování na nejbližší číslo vrátí 1,23;
  • podobné zaokrouhlení 1,236 vrátí hodnotu 1,24;
  • podobné zaokrouhlení 21,236 vrátí 21,2;
  • podobné zaokrouhlení 321.236 vrátí 321;
  • při zaokrouhlení 1,234 s měřítkem 1 v základu 10 a 3 významnými číslicemi (maximální relativní přesnost=1/1000) se při použití režimu zaokrouhlování dolů vrátí 1,23;
  • podobné zaokrouhlení 1,236 vrátí také hodnotu 1,23;
  • zaokrouhlení 3 π / 7 ≈ 6,8571 π 2 - 4 {\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}}{\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}} se škálovacím faktorem π {\displaystyle \scriptstyle \pi }{\displaystyle \scriptstyle \pi } v základu 2 a 3 významnými číslicemi (maximální relativní přesnost = 1/8) při použití režimu zaokrouhlování dolů vrátí 6 π 2 - 4 = 3 π / 8 {\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4};=\;3\pi /8}{\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8} ;
  • podobné zaokrouhlení 5 π / 7 ≈ 5,7143 π 2 - 3 {\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}}{\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} vrátí 5 π 2 - 3 = 5 π / 8 {\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8}{\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8} ;
  • podobné zaokrouhlení π / 7 ≈ 4,5714 π 2 - 5 {\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} vrátí 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • podobné zaokrouhlení π / 8 = 4 π 2 - 5 {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} vrátí také 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • podobné zaokrouhlení π / 15 ≈ 4,2667 π 2 - 6 {\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}}{\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} vrátí 4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}. {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

Zaokrouhlit na dostupnou hodnotu

Hotové řezivo, psací papír, kondenzátory a mnoho dalších výrobků se obvykle prodává pouze v několika standardních velikostech.

Mnoho konstrukčních postupů popisuje, jak vypočítat přibližnou hodnotu a poté ji "zaokrouhlit" na určitou standardní velikost pomocí frází jako "zaokrouhlit dolů na nejbližší standardní hodnotu", "zaokrouhlit nahoru na nejbližší standardní hodnotu" nebo "zaokrouhlit na nejbližší standardní hodnotu".

Pokud je sada preferovaných hodnot rovnoměrně rozložena na logaritmické stupnici, lze volbu nejbližší preferované hodnoty k dané hodnotě považovat za druh zaokrouhlování. Takto "zaokrouhlené" hodnoty lze přímo vypočítat.

Zaokrouhlování s plovoucí desetinnou čárkou

V aritmetice s pohyblivou řádovou čárkou je cílem zaokrouhlování přeměnit danou hodnotu x na hodnotu z s určitým počtem významných číslic. Jinými slovy, z má být násobkem čísla m, které závisí na velikosti z. Číslo m je mocninou základu (obvykle 2 nebo 10) tvaru plovoucí desetinné čárky.

Kromě tohoto detailu platí všechny výše uvedené varianty zaokrouhlování i pro zaokrouhlování čísel s pohyblivou řádovou čárkou. Algoritmus pro takové zaokrouhlování je uveden výše v oddíle Zaokrouhlování s měřítkem, ale s konstantním měřítkem s=1 a celočíselným základem b>1.

Pro výsledky, kde by zaokrouhlený výsledek přetekl, je výsledkem pro směrové zaokrouhlení buď příslušné znaménkové nekonečno, nebo nejvyšší reprezentovatelné kladné konečné číslo (nebo nejnižší reprezentovatelné záporné konečné číslo, pokud je x záporné), v závislosti na směru zaokrouhlení. Výsledkem přetečení pro obvyklý případ zaokrouhlení na sudé číslo je vždy příslušné nekonečno.

Pokud by navíc zaokrouhlený výsledek přetekl pod hodnotu, tj. pokud by exponent přesáhl nejnižší reprezentovatelnou hodnotu celého čísla, může být efektivním výsledkem buď nula (případně se znaménkem, pokud reprezentace dokáže zachovat rozlišení znamének pro nuly), nebo nejmenší reprezentovatelné kladné konečné číslo (nebo nejvyšší reprezentovatelné záporné konečné číslo, pokud je x záporné), případně denormální kladné nebo záporné číslo (pokud mantisa uchovává všechny své významné číslice, v takovém případě může být nejvýznamnější číslice uložena ještě na nižší pozici tím, že se nejvyšší uložené číslice nastaví na nulu a takto uložená mantisa nevypustí nejvýznamnější číslici, což je možné při základu b=2, protože nejvýznamnější číslice je v tomto základu vždy 1), v závislosti na směru zaokrouhlování. Výsledkem podtečení pro obvyklý případ zaokrouhlení na sudou hodnotu je vždy příslušná nula.

Dvojité zaokrouhlení

Zaokrouhlení čísla dvakrát po sobě s různou přesností, přičemž druhá přesnost je hrubší, nezaručuje stejný výsledek jako jednorázové zaokrouhlení s konečnou přesností, s výjimkou případu směrového zaokrouhlování. Například zaokrouhlení 9,46 na jedno desetinné místo dává 9,5 a pak 10 při zaokrouhlení na celé číslo pomocí zaokrouhlení na polovinu na sudou, ale při přímém zaokrouhlení na celé číslo by dávalo 9.

Některé počítačové jazyky a norma IEEE 754-2008 nařizují, aby se při jednoduchých výpočtech výsledek nezaokrouhloval dvakrát. To byl problém zejména u Javy, která je navržena tak, aby ji bylo možné spustit na různých strojích stejně, a proto bylo nutné použít speciální programátorské triky, aby se toho dosáhlo s plovoucí desetinnou čárkou x87. Jazyk Java byl změněn tak, aby umožňoval rozdílné výsledky tam, kde na rozdílu nezáleží, a vyžadoval použití kvalifikátoru "strictfp", pokud mají výsledky přesně odpovídat.

Přesný výpočet se zaokrouhlenou aritmetikou

K vyhodnocení přesné hodnoty funkce s diskrétním oborem a rozsahem je možné použít zaokrouhlovací aritmetiku. Víme-li například, že celé číslo n je dokonalý čtverec, můžeme jeho druhou odmocninu vypočítat tak, že převedeme n na hodnotu x s pohyblivou řádovou čárkou, vypočítáme přibližnou druhou odmocninu y z x s pohyblivou řádovou čárkou a pak zaokrouhlíme y na nejbližší celé číslo q. Pokud n není příliš velké, chyba zaokrouhlení y s pohyblivou řádovou čárkou bude menší než 0,5, takže zaokrouhlená hodnota q bude přesnou druhou odmocninou z n. Na většině moderních počítačů může být tato metoda mnohem rychlejší než výpočet druhé odmocniny z n pomocí celočíselného algoritmu.

Dilema výrobce stolů

William Kahan zavedl termín "dilema tvůrce tabulek" pro neznámé náklady na zaokrouhlování transcendentních funkcí:

"Nikdo neví, kolik by stál výpočet y^w správně zaokrouhlený na každé dva argumenty s plovoucí desetinnou čárkou, při kterých nedojde k přetečení/podtečení. Místo toho renomované matematické knihovny počítají elementární transcendentální funkce většinou s přesností o něco více než půl ulp a téměř vždy s přesností na jeden ulp. Proč nelze Y^W zaokrouhlovat s přesností na půl ulp jako SQRT? Protože nikdo neví, kolik by to stálo výpočtů... Neexistuje žádný obecný způsob, jak předpovědět, kolik číslic navíc bude třeba přenést, aby se transcendentální výraz vypočítal a správně zaokrouhlil na nějaký předem určený počet číslic. Dokonce i fakt (pokud je pravdivý), že nakonec bude stačit konečný počet číslic navíc, může být hlubokou teorií."

Standard IEEE s plovoucí desetinnou čárkou zaručuje, že sčítání, odčítání, násobení, dělení, odmocňování a zbytek s plovoucí desetinnou čárkou budou dávat správně zaokrouhlený výsledek operace s nekonečnou přesností. U složitějších funkcí však taková záruka není dána a tyto funkce jsou obvykle přesné v nejlepším případě pouze s přesností na poslední bit.

Pomocí Gelfondovy-Schneiderovy věty a Lindemann-Weierstrassovy věty lze dokázat, že mnoho standardních elementárních funkcí vrací transcendentní výsledky, pokud jsou zadány racionální nenulové argumenty; proto je vždy možné tyto funkce správně zaokrouhlit. Určení limitu pro danou přesnost, jak přesné výsledky je třeba vypočítat, aby bylo možné zaručit správně zaokrouhlený výsledek, však může vyžadovat mnoho výpočetního času.

V současné době existují balíčky, které nabízejí plnou přesnost. Balíček MPFR poskytuje správně zaokrouhlené výsledky s libovolnou přesností. IBM napsala balíček pro rychlé a přesné elementární funkce IEEE a v budoucnu by takovou přesnost mohly nabízet standardní knihovny.

Je možné vymyslet dobře definovaná vypočitatelná čísla, která nikdy nebude možné správně zaokrouhlit bez ohledu na to, kolik číslic se vypočítá. Například pokud je Goldbachova domněnka pravdivá, ale nedokazatelná, pak není možné správně zaokrouhlit 0,5 + 10-n, kde n je první sudé číslo větší než 4, které není součtem dvou prvočísel, nebo 0,5, pokud takové číslo neexistuje. To však lze aproximovat s libovolnou přesností, i když je domněnka nedokazatelná.

Historie

Pojem zaokrouhlování je velmi starý, možná dokonce starší než pojem dělení. Některé starověké hliněné tabulky nalezené v Mezopotámii obsahují tabulky se zaokrouhlenými hodnotami reciprokých čísel a odmocnin v základu 60. Zaokrouhlené přibližné hodnoty čísla π, délky roku a délky měsíce jsou rovněž staré.

Metoda Round-to-even slouží jako norma ASTM (E-29) od roku 1940. Původ termínů nestranné zaokrouhlování a statistické zaokrouhlování je poměrně jasný. Ve 4. vydání knihy Pravděpodobnost a teorie chyb z roku 1906 ji Robert Simpson Woodward nazval "pravidlem počítače", což naznačuje, že ji tehdy běžně používali lidé, kteří počítali matematické tabulky. Článek Churchilla Eisenharta z roku 1947 "Effects of Rounding or Grouping Data" (v knize Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay a Wallis, editoři) naznačoval, že tato praxe byla v analýze dat již "dobře zavedená".

Původ termínu "bankovní zaokrouhlování" zůstává nejasnější. Pokud byl tento způsob zaokrouhlování někdy v bankovnictví standardem, je velmi obtížné najít důkazy. Naopak, oddíl 2 zprávy Evropské komise The Introduction of the Euro and the Rounding of Currency Amounts (Zavedení eura a zaokrouhlování měnových částek) naznačuje, že dříve žádný standardní přístup k zaokrouhlování v bankovnictví neexistoval; a uvádí, že "poloviční" částky by se měly zaokrouhlovat nahoru.

Až do 80. let 20. století byla metoda zaokrouhlování používaná v aritmetice s pohyblivou řádovou čárkou obvykle pevně daná hardwarem, špatně dokumentovaná, nekonzistentní a pro každou značku a model počítače jiná. Tato situace se změnila poté, co většina výrobců počítačů přijala standard IEEE 754 pro pohyblivou desetinnou čárku. Tento standard umožňuje uživateli vybrat si z několika způsobů zaokrouhlování a v každém případě přesně specifikuje, jak mají být výsledky zaokrouhleny. Díky těmto vlastnostem se numerické výpočty staly předvídatelnějšími a nezávislejšími na stroji a umožnily efektivní a konzistentní implementaci intervalové aritmetiky.

Zaokrouhlovací funkce v programovacích jazycích

Většina programovacích jazyků nabízí funkce nebo speciální syntaxi pro zaokrouhlování zlomkových čísel různými způsoby. Nejstarší numerické jazyky, jako například FORTRAN a C, poskytovaly pouze jeden způsob, obvykle zkracování (směrem k nule). Tato výchozí metoda mohla být v určitých souvislostech implicitní, například při přiřazení zlomkového čísla celočíselné proměnné nebo při použití zlomkového čísla jako indexu pole. Jiné druhy zaokrouhlování bylo třeba naprogramovat explicitně; například zaokrouhlení kladného čísla na nejbližší celé číslo bylo možné realizovat přičtením 0,5 a zkrácením.

V posledních desetiletích však syntaxe a/nebo standardní knihovny většiny jazyků běžně poskytují alespoň čtyři základní zaokrouhlovací funkce (nahoru/strop, dolů/dolů, k nejbližšímu a k nule). Metoda zaokrouhlování se může lišit v závislosti na jazyce a verzi a/nebo může být volitelná programátorem. Některé jazyky se řídí standardem IEEE-754 pro pohyblivou řádovou čárku a definují tyto funkce jako přijímající argument typu float s dvojnásobnou přesností a vracející výsledek stejného typu, který pak může být v případě potřeby převeden na celé číslo. Vzhledem k tomu, že formát IEEE double precision má 52 zlomkových bitů, může tento přístup zabránit falešnému přetečení v jazycích s 32bitovými celými čísly. Některé jazyky, například PHP, poskytují funkce, které zaokrouhlují hodnotu na určitý počet desetinných míst, např. z 4321,5678 na 4321,57 nebo 4300. Kromě toho mnoho jazyků poskytuje funkci "printf" nebo podobnou funkci pro formátování řetězce, která umožňuje převést zlomkové číslo na řetězec zaokrouhlený na uživatelem zadaný počet desetinných míst (přesnost). Na druhou stranu je zkracování (zaokrouhlování na nulu) stále výchozí metodou zaokrouhlování používanou mnoha jazyky, zejména pro dělení dvou celočíselných hodnot.

CSS a SVG naopak nedefinují žádnou konkrétní maximální přesnost pro čísla a míry, které jsou v jejich objektovém modelu dokumentu a v rozhraní jazyka popisu rozhraní zpracovávány a vystavovány jako řetězce, jako by měly nekonečnou přesnost, a nerozlišují mezi celými čísly a hodnotami s pohyblivou řádovou čárkou; implementace těchto jazyků však obvykle tato čísla převádějí na IEEE-754 s dvojnásobnou pohyblivou řádovou čárkou před vystavením vypočtených číslic s omezenou přesností (zejména v rámci standardních vazeb na rozhraní Javascript nebo ECMAScript).

Další standardy zaokrouhlování

Některé obory nebo instituce vydaly normy nebo směrnice pro zaokrouhlování.

Pozorování počasí v USA

Ve směrnici vydané v polovině roku 1966 Úřad federálního koordinátora pro meteorologii USA stanovil, že údaje o počasí by měly být zaokrouhlovány na nejbližší kulaté číslo s pravidlem "zaokrouhlení o polovinu nahoru". Například 1,5 zaokrouhleno na celé číslo by mělo být 2 a -1,5 by mělo být -1. Před tímto datem platilo pravidlo "zaokrouhlení o polovinu směrem od nuly".

Záporná nula v meteorologii

Někteří meteorologové mohou psát "-0" pro označení teploty v rozmezí 0,0 až -0,5 stupňů (bez výjimky), která byla zaokrouhlena na celé číslo. Tento zápis se používá, pokud je záporné znaménko považováno za důležité, bez ohledu na to, jak malá je jeho velikost; například při zaokrouhlování teplot ve stupnici Celsia, kde teplota pod nulou znamená mráz. []

Související stránky

Otázky a odpovědi

Otázka: Co znamená slovo "zaokrouhlování"?


Odpověď: Zaokrouhlování je nahrazení číselné hodnoty jinou hodnotou, která je přibližně stejná, ale má kratší, jednodušší nebo jednoznačnější tvar.

Otázka: Jaký je příklad zaokrouhlování?


Odpověď: Příkladem zaokrouhlování může být zaokrouhlení 23,74 USD na 24 USD, zaokrouhlení zlomku 312/937 na 1/3 a zaokrouhlení výrazu 2 {\displaystyle {\sqrt {2}} na 1,41.

Otázka: Proč zaokrouhlujeme čísla?


Odpověď: Čísla zaokrouhlujeme proto, abychom získali hodnotu, která se lépe zapisuje a zpracovává než původní hodnota. Zaokrouhlení může být také použito k vyjádření přesnosti vypočteného čísla.

Otázka: Jaké jsou možné problémy při zaokrouhlování?


Odpověď: Zaokrouhlování může ve výsledku přinést určitou chybu při zaokrouhlování a v některých případech může způsobit, že výsledek ztratí smysl kvůli chybám, které se při výpočtech nahromadí v průběhu času. Navíc přesné zaokrouhlování transcendentních matematických funkcí může být obtížné, protože není možné předem zjistit, kolik číslic navíc je třeba vypočítat pro rozhodnutí, zda zaokrouhlovat nahoru nebo dolů.

Otázka: Jak souvisí zaokrouhlování s kvantifikací?


Odpověď: Zaokrouhlování má mnoho podobností s kvantizací, ke které dochází, když je třeba fyzikální veličiny zakódovat pomocí čísel nebo digitálních signálů.

AlegsaOnline.com - 2020 / 2023 - License CC3