Kerekítés

A kerekítés szó egy számérték esetében azt jelenti, hogy azt egy másik értékkel helyettesítjük, amely megközelítőleg azonos, de rövidebb, egyszerűbb vagy egyértelműbb formájú. Például a 23,74 USD-t kerekíthetjük 24 USD-re, vagy a 312/937 törtet kerekíthetjük 1/3-ra, vagy a 2 {\displaystyle {\sqrt {2}}{\displaystyle {\sqrt {2}}} kifejezést 1,41-re.

A kerekítés gyakran szándékosan történik, hogy olyan értéket kapjunk, amelyet könnyebb leírni és kezelni, mint az eredetit. Kerekítésre azért is sor kerülhet, hogy jelezzük a kiszámított szám pontosságát; például egy 123 456-nak kiszámított mennyiséget, amelyről tudjuk, hogy csak néhány száz egységnyi pontosságú, jobb "körülbelül 123 500"-ként feltüntetni.

Másrészt a kerekítés kerekítési hibát okozhat az eredményben. A kerekítés szinte elkerülhetetlen számos számítás során, különösen két szám osztásakor egész szám vagy fixpontos aritmetika esetén; olyan matematikai függvények számításakor, mint a négyzetgyök, logaritmus és szinusz; vagy olyan lebegőpontos ábrázolás esetén, ahol a szignifikáns számjegyek száma rögzített. Egy számítási sorozatban ezek a kerekítési hibák általában felhalmozódnak, és bizonyos "rossz feltételű" esetekben, majd értelmetlenné tehetik az eredményt.

A transzcendens matematikai függvények pontos kerekítése azért nehéz, mert nem lehet előre tudni, hogy hány extra számjegyet kell kiszámítani ahhoz, hogy eldöntsük, hogy felfelé vagy lefelé kerekítsünk. Ezt a problémát "a táblázatkészítő dilemmájának" nevezik (lásd alább).

A kerekítés sok hasonlóságot mutat a kvantálással, amely akkor történik, amikor fizikai mennyiségeket számokkal vagy digitális jelekkel kell kódolni.

A kerekítés típusai

Tipikus kerekítési problémák:

  • egy irracionális szám közelítése törtekkel, pl. π 22/7-gyel;
  • egy periodikus tizedesvesszős tört közelítése egy véges tizedes törttel, pl. 5/3 1,6667-gyel;
  • egy racionális szám helyettesítése egy kisebb számlálójú és nevezőjű törttel, pl. 3122/9417 1/3-mal;
  • egy tört tizedesjegyű számot egy kevesebb számjegyű számmal helyettesít, pl. 2,1784 dollár 2,18 dollárral;
  • egy tizedes egész számot egy olyan egész számmal helyettesít, amely több nullát tartalmaz, pl. 23,217 ember 23,200 emberrel; vagy általánosságban,
  • egy értéket egy megadott érték többszörösével helyettesít, pl. 27,2 másodpercet 30 másodperccel (15 többszöröse).

Kerekítés egy megadott növekményre

A kerekítés leggyakoribb típusa a kerekítés egész számra, vagy általánosabban valamilyen növekmény egész számú többszörösére - például kerekítés egész tizedmásodpercekre, dollárszázadokra, 1/2 vagy 1/8 hüvelyk egész többszörösére, egész tucatokra vagy ezresekre stb.

Általánosságban az x számnak egy meghatározott m növekmény többszörösére történő kerekítése a következő lépésekkel jár:

  1. Osszuk el x-et m-gyel, az eredmény legyen y;
  2. Kerekítsük y-t egész számra, nevezzük q-nak;
  3. Szorozzuk meg q-t m-gyel, hogy megkapjuk a kerekített z értéket.

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\,}

Például x = 2,1784 dollár egész centre (azaz 0,01 többszörösére) kerekítése azt jelenti, hogy kiszámítjuk y = x/m = 2,1784/0,01 = 217,84, majd y-t egész q = 218-ra kerekítjük, és végül kiszámítjuk z = q×m = 218×0,01 = 2,18.

Előre meghatározott számú szignifikáns számjegyre történő kerekítéskor az m növekmény a kerekítendő szám (vagy a kerekített eredmény) nagyságától függ.

Az m növekmény általában egy véges tört a számok ábrázolására használt számrendszerben. Emberek számára történő megjelenítés esetén ez általában a tizedes számrendszert jelenti (azaz m egy egész szám szorozva egy 10-es hatványával, például 1/1000 vagy 25/100). A digitális számítógépekben tárolt köztes értékek esetében ez gyakran a bináris számrendszert jelenti (m egy egész szám szorozva 2-es hatványával).

A "round()" absztrakt egyargumentumú függvénynek, amely egy tetszőleges valós értékből egész számot ad vissza, legalább egy tucat különböző konkrét definíciója van, amelyeket a kerekítés egész számra szakaszban mutatunk be. Az absztrakt kétargumentumú "round()" függvényt itt formálisan definiáljuk, de sok esetben az m = 1 implicit értékkel használjuk a növekményhez, és ezután az egyenértékű absztrakt egyargumentumú függvényre redukálódik, ugyanolyan tucatnyi különböző konkrét definícióval.

Egész számra kerekítés

A kerekítés legalapvetőbb formája az, hogy egy tetszőleges számot egész számmal helyettesítünk. A következő kerekítési módok az előző szakaszokban bemutatott és használt egyargumentumú "round()" absztrakt függvény konkrét megvalósításai.

Egy y szám q egész számra kerekítésének számos módja van. A leggyakoribbak a következők

  • lefelé kerekítés (vagy a padlóra, vagy a mínusz végtelen felé kerekítés): q a legnagyobb egész szám, amely nem haladja meg y-t.

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 \,}

  • kerekítsük felfelé (vagy vegyük a plafont, vagy kerekítsünk a plusz végtelen felé): q a legkisebb egész szám, amely nem kisebb, mint 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 \,}

  • nullára kerekítés (vagy csonkítás, vagy a végtelentől való elkerekítés): q az y egész szám része, a tört számjegyek nélkül.

q = t r u n c a t e ( y ) = sgn ( y ) ⌊ | y | ⌋ = - sgn ( y ) ⌈ - | y | ⌉ {\displaystyle q=\mathrm {truncate} (y)=\operátornév {sgn}(y)\left\lfloor \left|y\right|right\rfloor =-\operátornév {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 \,}

  • nullától elkerekítés (vagy kerekítés a végtelen felé): ha y egész szám, akkor q y; egyébként q az az egész szám, amelyik a legközelebb van 0-hoz, és amelyik olyan, hogy y 0 és q között van.

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 \,}

  • legközelebbre kerekítés: q az az egész szám, amelyik a legközelebb van y-hoz (lásd alább a holtverseny eldöntésére vonatkozó szabályokat).

Az első négy módszert irányított kerekítésnek nevezzük, mivel az eredeti y számtól a q kerekített értékig történő elmozdulások mind ugyanahhoz a határértékhez (0, +∞ vagy -∞) irányulnak, illetve attól távolodnak.

Ha y pozitív, akkor a lefelé kerekítés megegyezik a nullára kerekítéssel, a felfelé kerekítés pedig a nullától való elkerekítéssel. Ha y negatív, akkor a lefelé kerekítés megegyezik a nullától távolodó kerekítéssel, a felfelé kerekítés pedig a nulla felé kerekítéssel. Minden esetben, ha y egész szám, q csak y. A következő táblázat szemlélteti ezeket a kerekítési módszereket:

y

lekerekítés
(-∞ felé)

kerekítés
(a +∞ felé)

roundtowardowardszero


a nullától való lekerekítés

roundtonearest

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

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

−23.67

−24

−23

−23

−24

−24

Ha sok számítást egymás után végzünk, a kerekítési módszer megválasztása nagyon jelentős hatással lehet az eredményre. Egy híres példa a Vancouveri Értéktőzsde által 1982-ben létrehozott új indexre vonatkozott. Az indexet kezdetben 1000 000-re állították be, és 22 hónap elteltével körülbelül 520-ra csökkent - miközben a részvényárak általában emelkedtek ebben az időszakban. A problémát az okozta, hogy az indexet naponta ezerszer újraszámították, és mindig 3 tizedesjegyre kerekítették lefelé, így a kerekítési hibák felhalmozódtak. A jobb kerekítéssel történő újraszámítás ugyanezen időszak végén 1098,892-es indexértéket adott.

Döntetlen

Az y szám legközelebbi egész számra kerekítéséhez szükség van valamilyen döntetlenre vonatkozó szabályra azokban az esetekben, amikor y pontosan két egész szám felénél van - vagyis amikor y tört része pontosan 0,5.

Félköríves felfelé

A következő, felfelé kerekítésnek (vagy felfelé kerekítésnek plusz a végtelen felé) nevezett holtverseny-eltávolítási szabályt számos tudományágban széles körben használják. Vagyis a felező y értékeket mindig felfelé kerekítjük.

  • Ha y törtje pontosan 0,5, akkor 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 \,}

Például e szabály szerint a 23,5 értéket 24-re kerekítjük, de a -23,5 értéket -23-ra kerekítjük.

Ez egyike annak a két szabálynak, amelyet általában az amerikai általános iskolai matematikaórákon tanítanak. []

Ha a 0,5-es törtek nem lennének, a legközelebbre kerekítési módszer által okozott kerekítési hibák meglehetősen szimmetrikusak lennének: minden felfelé kerekített törtre (például 0,268) van egy kiegészítő tört (nevezetesen 0,732), amely ugyanennyivel lefelé kerekített. Egy nagyszámú, véletlen törtrészeket tartalmazó számhalmaz kerekítésekor ezek a kerekítési hibák statisztikailag kiegyenlítenék egymást, és a kerekített számok várható (átlagos) értéke megegyezne az eredeti számok várható értékével.

A felfelé kerekítés szabálya azonban nem szimmetrikus, mivel a pontosan 0,5-ös törteket mindig felfelé kerekítik. Ez az aszimmetria pozitív torzítást eredményez a kerekítési hibákban. Ha például az y tört három véletlen tizedesjegyből áll, akkor a q várható értéke 0,0005-tel nagyobb lesz, mint az y várható értéke. Emiatt a legközelebbre kerekítést a felfelé kerekítés szabályával (kétértelműen) aszimmetrikus kerekítésnek is nevezik.

A 0,5-nél történő kerekítés egyik oka, hogy csak egy számjegyet kell vizsgálni. Ha például 17,50000... látjuk, az első három számjegy, 17,5, meghatározza, hogy a számot 18-ra kerekítenénk felfelé. Ha az ellenkező szabályt alkalmaznánk (felére lefelé kerekítés), akkor az összes nulla tizedesjegyet meg kellene vizsgálni, hogy megállapítsuk, hogy az érték pontosan 17,5-e.

Félkörív lefelé

Használhatjuk a kerekítés felét lefelé (vagy a kerekítés felét mínusz végtelen felé) is, szemben a gyakoribb felfelé kerekítéssel (a felfelé kerekítés egy elterjedt konvenció, de nem több, mint egy konvenció).

  • Ha y törtrésze pontosan 0,5, akkor 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 \,}

Például a 23,5 23-ra, a -23,5 pedig -24-re lesz kerekítve.

A lefelé kerekítés szabálya nem szimmetrikus, mivel a pontosan 0,5-ös törteket mindig lefelé kerekítik. Ez az aszimmetria negatív torzítást eredményez a kerekítési hibákban. Ha például az y tört három véletlen tizedesjegyből áll, akkor a q várható értéke 0,0005-tel kisebb lesz, mint az y várható értéke. Emiatt a legközelebbre kerekítést a lefelé kerekítés fele szabályával (kétértelműen) aszimmetrikus kerekítésnek is nevezik.

A nullától számított kerek fele

A másik gyakran tanított és használt döntetlen döntési módszer a nullától távolodó felének kerekítése (vagy a végtelen felé kerekítése), nevezetesen:

  • Ha y törtje pontosan 0,5, akkor q = y + 0,5, ha y pozitív, és q = y - 0,5, ha y negatív.

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 =-\operátornév {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 \,}

Például a 23,5 kerekítve 24, a -23,5 pedig kerekítve -24.

Ez a módszer a pozitív és negatív értékeket szimmetrikusan kezeli, és ezért mentes az általános torzítástól, ha az eredeti számok azonos valószínűséggel pozitívak vagy negatívak. Ez a szabály azonban még mindig pozitív torzítást vezet be a pozitív számok esetében, és negatív torzítást a negatív számok esetében.

Gyakran használják valutaátváltásoknál és árkerekítéseknél (amikor az összeget először a valuta legkisebb szignifikáns részegységére, például az euró centjeire számítják át), mivel könnyen magyarázható, ha csak az első tört számjegyet vesszük figyelembe, függetlenül a kiegészítő pontossági számjegyektől vagy az összeg előjelétől (az összeg kifizetője és címzettje közötti szigorú egyenértékűség érdekében).

Fele nullára kerekítve

A felét a nulla felé is kerekíthetjük (vagy a végtelentől elkerekíthetjük a felét), szemben a gyakoribb nullától való elkerekítéssel (a nullától való elkerekítés egy elterjedt konvenció, de nem több, mint egy konvenció).

  • Ha y törtje pontosan 0,5, akkor q = y - 0,5, ha y pozitív, és q = y + 0,5, ha y negatív.

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 \,}

Például a 23,5 kerekítve 23-ra, a -23,5 pedig kerekítve -23-ra.

Ez a módszer a pozitív és negatív értékeket is szimmetrikusan kezeli, és ezért mentes az általános torzítástól, ha az eredeti számok azonos valószínűséggel pozitívak vagy negatívak. Ez a szabály azonban még mindig negatív torzítást vezet be a pozitív számok esetében, és pozitív torzítást a negatív számok esetében.

Kerekítsd a felét párosra

Egy még kevésbé elfogult döntetlen döntési szabály a fele-fele arányban történő kerekítés, nevezetesen

  • Ha y törtrésze 0,5, akkor q az y-hoz legközelebbi páros egész szám.

Így például a +23,5 +24, a +22,5 +22, a -22,5 -22, a -23,5 pedig -24 lesz.

Ez a módszer a pozitív és negatív értékeket is szimmetrikusan kezeli, és ezért mentes az általános torzítástól, ha az eredeti számok azonos valószínűséggel pozitívak vagy negatívak. Ezenkívül az y-értékek legtöbb ésszerű eloszlása esetén a kerekített számok várható (átlagos) értéke lényegében megegyezik az eredeti számok értékével, még akkor is, ha az utóbbiak mind pozitívak (vagy negatívak). Ez a szabály azonban a páros számok (beleértve a nullát is) esetében még mindig pozitív torzítást, a páratlanok esetében pedig negatív torzítást eredményez.

A legközelebbi kerekítés módszerének ezt a változatát (kétértelműen és kissé visszaélésszerűen) torzítatlan kerekítésnek, konvergens kerekítésnek, statisztikus kerekítésnek, holland kerekítésnek, Gauss-kerekítésnek vagy bankárkerekítésnek is nevezik. Ezt széles körben használják a könyvelésben.

Ez az IEEE 754 számítási függvényekben és operátorokban használt alapértelmezett kerekítési mód.

Kerekítés a páratlan felére

Egy másik döntetlen döntő szabály, amely nagyon hasonlít a párosra kerekítés szabályához, nevezetesen

  • Ha y törtje 0,5, akkor q az y-hoz legközelebbi páratlan egész szám.

Így például a +22,5 +23, a +21,5 +21, a -21,5 -21, a -22,5 pedig -23 lesz.

Ez a módszer a pozitív és negatív értékeket is szimmetrikusan kezeli, és ezért mentes az általános torzítástól, ha az eredeti számok azonos valószínűséggel pozitívak vagy negatívak. Ezenkívül az y-értékek legtöbb ésszerű eloszlása esetén a kerekített számok várható (átlagos) értéke lényegében megegyezik az eredeti számok értékével, még akkor is, ha az utóbbiak mind pozitívak (vagy negatívak). Ez a szabály azonban a páros számok (beleértve a nullát is) esetében még mindig negatív torzítást, a páratlanok esetében pedig pozitív torzítást eredményez.

Ezt a változatot a legtöbb számításban szinte soha nem használjuk, kivéve olyan helyzetekben, amikor el akarjuk kerülni a 0,5 vagy -0,5 nullára kerekítését, vagy a lebegőpontos számok skálájának növelését (a skálázási exponens korlátozott tartományaival), így egy nem végtelen számot végtelenre kerekítenénk, vagy egy kis denormális értéket normális nem nulla értékre kerekítenénk (ezek előfordulhatnak a kerekítés fele páros móddal). Gyakorlatilag ez a mód előnyben részesíti a döntetlen számok meglévő skálájának megőrzését, lehetőség szerint elkerülve a tartományon kívüli eredményeket.

Sztochasztikus kerekítés

Egy másik torzítatlan döntetlen döntési módszer a sztochasztikus kerekítés:

  • Ha y törtrésze 0,5, válasszuk ki q-t véletlenszerűen y + 0,5 és y - 0,5 közül, egyenlő valószínűséggel.

Ez a szabály, akárcsak a kerek-fél-páratlan, lényegében mentes az általános torzítástól; de a páros és páratlan q-értékek között is igazságos. Másrészt viszont véletlenszerű komponenst visz be az eredménybe; ha ugyanazt a számítást kétszer végzi el ugyanazokon az adatokon, két különböző eredményt kaphat. Továbbá, ha emberek (és nem számítógépek vagy véletlenszerű eszközök) "véletlenszerűen" döntenek arról, hogy melyik irányba kerekítsenek, akkor ez a módszer nyitott a tudattalan torzításra.

Váltakozó holtverseny

Az egyik, a legtöbbnél homályosabb módszer a felváltva történő kerekítés.

  • Ha a törtrész 0,5, akkor felváltva kerekítsen felfelé és lefelé: a 0,5 törtrész első előfordulása esetén kerekítsen felfelé; a második előfordulása esetén kerekítsen lefelé; és így tovább.

Ez elnyomja az eredmény véletlenszerű összetevőjét, ha a 0,5 törtrészek előfordulásait hatékonyan meg lehet számozni. Ez azonban még mindig pozitív vagy negatív torzítást eredményezhet az első előforduláshoz rendelt kerekítés irányától függően, ha az előfordulás teljes száma páratlan.

Egyszerű dithering

Bizonyos esetekben a fenti kerekítési módszerek mindegyike nem kielégítő. Tegyük fel például, hogy y egy hangjel pontos mérése, amelyet a tárolási vagy átviteli költségek csökkentése érdekében q egész számra kerekítünk. Ha y lassan változik az idővel, a fenti kerekítési módszerek bármelyike azt eredményezi, hogy q hosszú időközönként teljesen állandó lesz, amit ±1-es hirtelen ugrások választanak el. Amikor a q jelet lejátsszuk, ezek a lépések nagyon kellemetlen zajként lesznek hallhatók, és az eredeti jel két egész érték közötti változása teljesen elveszik.

A probléma elkerülésének egyik módja, hogy minden egyes y értéket a történek megfelelő valószínűséggel kerekítünk felfelé, és e valószínűség komplementerével kerekítünk lefelé. Például a 23,17-es számot 0,17-es valószínűséggel kerekítjük fel 24-re, és 1 - 0,17 = 0,83-as valószínűséggel 23-ra. (Ez egyenértékű az y + s lefelé kerekítéssel, ahol s egy 0 és 1 között egyenletesen eloszló véletlen szám.) Ezzel a speciális kerekítéssel, amelyet ditheringnek nevezünk, a hirtelen lépések helyébe kevésbé zavaró zaj lép, és még az eredeti jel kis eltérései is megmaradnak bizonyos mértékig. A döntetlenre vonatkozó sztochasztikus megközelítéshez hasonlóan a ditheringnek sincs torzítása: ha minden törtérték egyforma valószínűségű, akkor egy bizonyos összeggel való felfelé kerekítés ugyanolyan valószínű, mint ugyanennyivel lefelé kerekítés; és ugyanez igaz több kerekített szám összegére is. Másrészt a dithering véletlenszerű komponenst vezet be az eredménybe, amely sokkal nagyobb, mint a sztochasztikus döntetlenkezelésé.

Pontosabban, a kerekítési hiba minden egyes szaggatott szám esetében egy egyenletes eloszlású véletlen változó lesz, amelynek átlagértéke nulla, de szórása 1/12 ≈ 0.2886 {\displaystyle 1/{\sqrt {12}}\approx 0.2886} {\displaystyle 1/{\sqrt {12}}\approx 0.2886}, ami jobb, mint az egyszerű prediktív módszerek 1/2 standard eltérése, de valamivel magasabb, mint az egyszerűbb sztochasztikus módszerrel. Ugyanakkor n kerekített szám összege egy olyan véletlen változó lesz, amelynek várható hibája nulla, de szórása n/12 {\displaystyle {\sqrt {n}}/{\sqrt {12}}} {\displaystyle {\sqrt {n}}/{\sqrt {12}}}(a teljes maradék zaj), amely félnégyzetesen divergál, és könnyen érzékelhetővé válhat, még akkor is, ha a kerekítési hiba standard eltérése mintánként 1 / 12 n {\displaystyle 1/{\sqrt {12n}}}{\displaystyle 1/{\sqrt {12n}}} lesz, amely lassan félnégyzetesen konvergál nullához. Tehát ez a véletlen eloszlás még mindig túl nagy lehet egyes alkalmazásokhoz, amelyek sok adatot kerekítenek.

Többdimenziós dithering

Az egyszerű dithering módszer ezen változata továbbra is a történek megfelelő valószínűséggel kerekíti az értékeket. Azonban ahelyett, hogy véletlen eloszlást használnánk az elszigetelt minták kerekítéséhez, az egyes kerekített mintáknál előforduló kerekítési hibát összegezzük a következő környező, mintavételezendő vagy kiszámítandó elemekre; ezt az összegyűjtött értéket aztán hozzáadjuk e következő mintavételezendő vagy kiszámítandó kerekítendő értékek értékéhez, hogy a módosított értékek egy prediktív modell segítségével (mint például a Floyd-Steinberg-dithering) figyelembe vegyék ezt a különbséget.

A módosított értékeket ezután a fenti kerekítési módszerek bármelyikével kerekítjük, a legjobbak a sztochasztikus vagy a dithering módszerek: ez utóbbi esetben az n kerekített számok összege továbbra is egy olyan véletlen változó lesz, amelynek várható hibája nulla, de kiváló konstans standard eltérése 1/12 {\displaystyle 1/{\sqrt {12}}}. {\displaystyle 1/{\sqrt {12}}}, ahelyett, hogy az elszigetelt minták ditheringje esetén félig négyzetes eltérés lenne; és a kerekítési hiba teljes átlagos átlagos eltérése kerekített mintánként 1 / ( n 12 ) {\displaystyle 1/(n{\sqrt {12}})}{\displaystyle 1/(n{\sqrt {12}})} lesz, amely hiperbolikusan konvergál nullához, gyorsabban, mint a félig hiperbolikus konvergencia az elszigetelt minták ditheringje esetén.

A gyakorlatban nagy mennyiségű mintavételezett adathalmazok kerekítésekor (például hang-, kép- és videorenderelésnél) a kerekítési hibák felhalmozását leggyakrabban a módosított értékek egyszerű prediktív kerekítésével (például nullára kerekítéssel) alkalmazzák, mivel ez továbbra is megőrzi a teljes átlagos kerekítési hibahiba-eltérés és annak szórásának nullához való hiperbolikus konvergenciáját. Ezt a javítást gyakran használják a kép- és hangfeldolgozásban (különösen a pontos átméretezés és a kiegyenlítés elleni műveletek esetében, ahol az elszigetelt értékek egyszerű valószínűségi ditheringje még mindig érzékelhető zajt eredményezhet, néha még rosszabbat, mint az elszigetelt mintákra alkalmazott egyszerű, nem valószínűségi kerekítési módszerek esetén fellépő moiréhatás).

A felhalmozott kerekítési hibák hatékony terjedése függhet a mintavételezett adatok kerekítendő diszkrét dimenziójától: kétdimenziós képek, beleértve a színes képeket (amelyek a színsíkok diszkrét dimenzióját adják hozzá), vagy háromdimenziós videók (amelyek diszkrét idődimenziót adnak hozzá), vagy polifonikus hangadatokon (az idő és a csatorna diszkrét dimenzióit használva) történő mintavételezéskor még mindig előnyösebb lehet ezt a hibát egy előnyös irányba, vagy egyenlően több ortogonális dimenzióba, például függőlegesen vs. függőlegesen, terjeszteni. vízszintesen kétdimenziós képek esetében, vagy párhuzamos színcsatornákba ugyanabban a pozícióban és/vagy időbélyegzővel, és ezen ortogonális diszkrét dimenziók egyéb tulajdonságaitól függően (egy érzékelési modell szerint). Ezekben az esetekben több kerekítési hibaakkumulátor használható (legalább egy minden egyes diszkrét dimenzióhoz), vagy egy (n-1)-dimenziós vektor (vagy mátrix) akkumulátort.

Néhány ilyen esetben a mintavételezendő és a kerekítendő adatok diszkrét dimenzióit nem ortogonálisan lehet kezelni: Így a kerekítési hibaakkumulátorok úgy lesznek kialakítva, hogy a világosságot nagyobb valószínűséggel őrizzék meg, mint a színárnyalatot vagy a telítettséget, ahelyett, hogy a hibákat minden egyes ortogonális színsíkra egymástól függetlenül terjesztenék; és sztereofonikus hangadatokban a két kerekített adatcsatornát (bal és jobb) együttesen lehet kerekíteni, hogy megőrizzék középértéküket, elsőbbséget adva effektív különbségüknek, amely a fennmaradó kerekítési hibák nagy részét elnyeli, kiegyensúlyozott módon a nulla körül.

Kerekítés egyszerű törtekre

Bizonyos összefüggésekben kívánatos egy adott x számot "tiszta" törtre kerekíteni - azaz a legközelebbi z = m/n törtre, amelynek m számlálója és n nevezője nem haladja meg az adott maximumot. Ez a probléma meglehetősen különbözik attól, amikor egy értéket egy meghatározott számú decimális vagy bináris számjegyre vagy egy adott m egység többszörösére kerekítünk. Ez a probléma a Farey-sorozatokkal, a Stern-Brocot-fával és a folytatólagos törtekkel áll kapcsolatban.

Skálázott kerekítés

A kerekítésnek ez a típusa, amelyet logaritmikus skálára kerekítésnek is neveznek, a megadott növekményre kerekítés egyik változata, de a növekmény az eredmény skálájától és nagyságától függően módosul. Konkrétan a szándék a szignifikáns számjegyek számának korlátozása, az érték kerekítése úgy, hogy a nem szignifikáns számjegyek kiesnek. Ez a fajta kerekítés implicit módon a korlátozott pontosságú lebegőpontos értékekkel (például az IEEE-754 float és double típusokkal) kiszámított számoknál fordul elő, de általánosabban is használható bármely valós érték kerekítésére, bármilyen pozitív számú szignifikáns számjegyekkel és szigorúan pozitív valós bázissal.

Használható például a mérnöki grafikában a változó lépésekkel logaritmikus skálájú adatok ábrázolására (például hullámhosszok, amelyek bázisa nem feltétlenül egész szám), vagy statisztikai adatokban valós értékek osztályainak meghatározására exponenciálisan növekvő szélességű intervallumokon belül (de a leggyakoribb felhasználás egész számok, például 10 vagy 2 bázisa esetén). [forrás?]

Ez a fajta kerekítés egy logaritmikus skálán alapul, amelyet egy fix, nem nulla valós s skálázási tényező (a leggyakoribb esetekben ez a tényező s=1) és egy fix pozitív b>1 bázis (nem feltétlenül egész szám, és leggyakrabban eltér a skálázási tényezőtől), valamint a bázison belül a szignifikáns számjegyek fix n>0 száma határoz meg (amely meghatározza a kerekítéshez használandó növekmény értékét, valamint a kerekített szám számított effektív skáláját).

Az elsődleges argumentumszámot (valamint a kapott kerekített számot) először exponenciális jelöléssel ábrázoljuk x = s-a-m-bc, úgy, hogy az s előjel +1 vagy -1, az a abszolút mantissza a félig nyitott pozitív intervallumra [1/b,1] korlátozódik, és az exponens c tetszőleges (pozitív vagy negatív) egész szám. Ebben az ábrázolásban minden szignifikáns számjegy az abszolút mantissza törtrészében van, amelynek egész szám része mindig nulla.

Ha a forrásszám (vagy kerekített szám) 0, az abszolút mantissza a 0, az exponens c tetszőleges értékre van rögzítve (a legtöbb konvencióban 0, de egyes lebegőpontos ábrázolások nem használhatnak nulla abszolút mantisszát, hanem fenntartanak egy meghatározott maximális negatív értéket a c exponensnek, hogy magát a 0 számot ábrázolják), az s előjel pedig tetszőlegesen választható -1 vagy +1 között (az egyszerű nulla esetében általában +1-re van állítva, vagy a kerekített értékben az argumentummal azonos előjelűre van állítva, ha a számábrázolás lehetővé teszi a pozitív és negatív nullák megkülönböztetését, még akkor is, ha végül ugyanazt a 0 számértéket képviselik).

Az x = a-s-bc skálázott exponenciális ábrázolás is használható egyenértékűen, ahol az a jelű mantissza vagy egyenlő nullával, vagy a két félig nyitott intervallum (-1,-1/b] és [+1/b,+1] valamelyikén belül van, és ez lesz a helyzet az alábbi algoritmusban.

A skálázott kerekítés kiszámításának lépései általában a következőkhöz hasonlóak:

  1. ha x egyenlő nullával, egyszerűen adja vissza x-et; egyébként:
  2. az x-et a skálázott exponenciális ábrázolásba konvertálja, előjeles mantisszával:
    x = a
    s b c {\displaystyle x=a\cdot s\cdot b^{c}\,} {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. legyen x' az x skálázatlan értéke, osztva azt az s skálázási tényezővel:
      x ′ = x / s {\displaystyle x'=x/s\,}
      {\displaystyle x'=x/s\,} ;
    2. a c skálázási exponens legyen egy plusz az x' abszolút értékének egész számra kerekített bázis-b logaritmusa (a végtelen felé):
      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. az előjeles mantissza a legyen x' és b szorzata c hatványig:
      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. kiszámítja a kerekített értéket ebben az ábrázolásban:
    1. legyen c' az x' kezdeti c skálázási exponens:
      c ′ = c {\displaystyle c'=c\,}
      {\displaystyle c'=c\,}
    2. legyen m az a mantissza kerekítésének inkrementuma a megtartandó szignifikáns számjegyek számának megfelelően:
      m = b - n {\displaystyle m=b^{-n}\,}
      {\displaystyle m=b^{-n}\,}
    3. legyen a' az előjeles mantissza a, az m inkrementum és a kiválasztott kerekítési mód szerint kerekítve:
      a ′ = r o u n d ( a , m ) = r o u n d ( x / s
      b n - c ′ ) b - n {\displaystyle a'=\mathrm {kerekítés} (a,m)=\mathrm {kerekítés} (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. ha az a' abszolút értéke nem kisebb, mint b, akkor csökkentsük n-t (szorozzuk meg az m inkrementumot b-vel), növeljük a c' skálázó exponenciát, osszuk el az előjeles a mantisszát b-vel, és kezdjük újra az új előjeles a mantissza kerekítését a' -ra ugyanazzal a képlettel; ez a lépés csak akkor kerülhető el, ha az abtract "round()" függvény mindig 0 felé kerekíti az a-t (i.azaz ha egyszerű csonkításról van szó), de szükséges, ha esetleg a végtelen felé kerekít, mert a kerekített mantissza ebben az esetben magasabb skálázási exponenssel rendelkezhet, így egy plusz számjegy pontossága marad.
  4. visszaadja a kerekített értéket:
    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}\,}.

Az absztrakt "round()" függvény esetében ez a kerekítési típus a következő szakaszban részletesebben ismertetett egész számokra kerekítési módok bármelyikét használhatja, de leggyakrabban a legközelebbi kerekítési módot használja (az alábbiakban szintén részletesebben ismertetett döntetlenre vonatkozó szabályokkal).

Például:

  • az 1.234 skálázott kerekítése 1 skálázási tényezővel 10-es bázison és 3 szignifikáns számjegyekkel (maximális relatív pontosság=1/1000), ha bármelyik legközelebbi kerekítési módot használjuk, 1.23 értéket ad vissza;
  • 1.236 hasonló skálázott kerekítése 1.24-et ad vissza;
  • 21.236 hasonló skálázott kerekítése 21.2-t ad vissza;
  • 321.236 hasonló skálázott kerekítése 321.236-ot ad vissza;
  • az 1,234 skálázott kerekítés 1 skálázási tényezővel 10-es bázison és 3 szignifikáns számjegyen (maximális relatív pontosság=1/1000), ha a lefelé kerekítés módot használja, 1,23 értéket fog visszaadni;
  • 1,236 hasonló skálázott kerekítése szintén 1,23-at ad vissza;
  • a 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}} a π {\displaystyle \scriptstyle \pi } skálázási tényezővel {\displaystyle \scriptstyle \pi }a 2. bázison és 3 szignifikáns számjegyekkel (maximális relatív pontosság = 1/8), ha a lefelé kerekítés módját használjuk, 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} lesz a válasz;
  • 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}} visszaadja 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}
  • hasonló skálázott kerekítés π / 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}} visszaadja 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}} {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}
  • A π / 8 = 4 π 2 - 5 {\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} hasonló skálázott kerekítése szintén 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} eredményt ad.
  • hasonló skálázott kerekítés π / 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}}4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle 4\cdot \pi \pi \cdot 2^{-6}\;=\;\pi /16} } {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

Kerekítés a rendelkezésre álló értékre

A kész fűrészárut, az írópapírt, a kondenzátorokat és sok más terméket általában csak néhány szabványos méretben forgalmazzák.

Számos tervezési eljárás leírja, hogyan kell kiszámítani egy hozzávetőleges értéket, majd "kerekíteni" valamilyen szabványos méretre az olyan kifejezésekkel, mint "lefelé kerekítés a legközelebbi szabványos értékre", "felfelé kerekítés a legközelebbi szabványos értékre" vagy "kerekítés a legközelebbi szabványos értékre".

Ha az előnyben részesített értékek egy logaritmikus skálán egyenlő távolságra vannak egymástól, akkor az adott értékhez legközelebbi előnyben részesített érték kiválasztása egyfajta skálázott kerekítésnek tekinthető. Az ilyen "kerekített" értékek közvetlenül kiszámíthatók.

Lebegőpontos kerekítés

A lebegőpontos aritmetikában a kerekítés célja, hogy egy adott x értékből z értéket kapjon egy meghatározott számú szignifikáns számjegyű érték. Más szóval, z-nek egy m szám többszörösének kell lennie, amely a z nagyságától függ. Az m szám a lebegőpontos forma bázisának (általában 2 vagy 10) hatványa.

Ettől a részlettől eltekintve a kerekítés minden fent tárgyalt változata a lebegőpontos számok kerekítésére is vonatkozik. Az ilyen kerekítés algoritmusát a fenti, a skálázott kerekítésre vonatkozó részben mutatjuk be, de s=1 állandó skálázási tényezővel és b>1 egész szám bázissal.

Az olyan eredményeknél, ahol a kerekített eredmény túlcsordulna, az irányított kerekítés eredménye vagy a megfelelő előjeles végtelen, vagy a legnagyobb ábrázolható pozitív véges szám (vagy a legkisebb ábrázolható negatív véges szám, ha x negatív), a kerekítés irányától függően. A párosra kerekítés szokásos esetére vonatkozó túlcsordulás eredménye mindig a megfelelő végtelen.

Ezenkívül, ha a kerekített eredmény alulcsordulna, azaz. ha az exponens meghaladná a legkisebb ábrázolható egész szám értékét, akkor a tényleges eredmény vagy nulla (esetleg előjeles, ha az ábrázolás képes a nullák előjelének megkülönböztetésére), vagy a legkisebb ábrázolható pozitív véges szám (vagy a legnagyobb ábrázolható negatív véges szám, ha x negatív), esetleg denormális pozitív vagy negatív szám (ha a mantissza tárolja az összes szignifikáns számjegyét, ebben az esetben a legjelentősebb számjegy még mindig alacsonyabb pozícióban tárolható a legmagasabb tárolt számjegyek nullára állításával, és ez a tárolt mantissza nem ejti ki a legjelentősebb számjegyet, ami b=2 bázis esetén lehetséges, mivel a legjelentősebb számjegy ebben a bázisban mindig 1), a kerekítés irányától függően. Az alulcsordulás eredménye a szokásos esetben a párosra kerekítés esetén mindig a megfelelő nulla.

Dupla kerekítés

Ha egy számot kétszer egymás után különböző pontossággal kerekítünk, és az utóbbi pontosság durvább, nem garantált, hogy ugyanazt az eredményt kapjuk, mintha egyszer kerekítenénk a végső pontosságra, kivéve az irányított kerekítés esetét. Például 9,46 kerekítése egy tizedesjegyre 9,5, majd 10-et ad, ha egész számra kerekítünk a páros felére kerekítéssel, de 9-et adna, ha közvetlenül egész számra kerekítenénk.

Egyes számítógépes nyelvek és az IEEE 754-2008 szabvány előírja, hogy egyszerű számításoknál az eredményt nem szabad kétszer kerekíteni. Ez különösen a Java esetében jelentett problémát, mivel a Java-t úgy tervezték, hogy különböző gépeken azonos módon fusson, ezért speciális programozási trükköket kellett alkalmazni, hogy ezt az x87-es lebegőpontos számolással elérjük. A Java nyelvet úgy módosították, hogy eltérő eredményeket engedjen meg ott, ahol a különbség nem számít, és megköveteli a "strictfp" minősítő használatát, amikor az eredményeknek pontosan meg kell felelniük.

Pontos számítás kerekített aritmetikával

Egy diszkrét tartományú és tartományú függvény pontos értékének kiértékelésére kerekített aritmetikát lehet használni. Ha például tudjuk, hogy egy n egész szám tökéletes négyzet, akkor kiszámíthatjuk a négyzetgyökét úgy, hogy n-t egy lebegőpontos x értékké alakítjuk, lebegőpontos számítással kiszámítjuk x közelítő négyzetgyökét y-t, majd y-t a legközelebbi q egész számra kerekítjük. Ha n nem túl nagy, akkor az y lebegőpontos kerekítési hibája kisebb lesz, mint 0,5, így a kerekített q érték lesz n pontos négyzetgyöke. A legtöbb modern számítógépen ez a módszer sokkal gyorsabb lehet, mint n négyzetgyökének kiszámítása egy egész számot tartalmazó algoritmussal.

Az asztalkészítő dilemmája

William Kahan alkotta meg a "The Table-Maker's Dilemma" kifejezést a transzcendens függvények kerekítésének ismeretlen költségeire:

"Senki sem tudja, hogy mennyibe kerülne kiszámítani y^w-t helyesen kerekítve minden két olyan lebegőpontos argumentumra, amelynél nem történik túl/alulcsordulás. Ehelyett a neves matematikai könyvtárak az elemi transzcendens függvényeket többnyire valamivel több mint fél ulp-on belül, és szinte mindig bőven egy ulp-on belül számítják ki. Miért nem lehet az Y^W-t fél ulp-on belül kerekíteni, mint az SQRT-et? Mert senki sem tudja, hogy ez mennyi számítási költséggel járna... Nem létezik általános módszer arra, hogy megjósoljuk, hány extra számjegyet kell vinni egy transzcendens kifejezés kiszámításához és helyes kerekítéséhez valamilyen előre megadott számjegyszámra. Még az a tény is (ha igaz), hogy véges számú extra számjegy végül is elegendő lesz, lehet, hogy egy mélységes tétel."

Az IEEE lebegőpontos szabvány garantálja, hogy az összeadás, kivonás, szorzás, osztás, négyzetgyök és lebegőpontos maradék a végtelen pontosságú művelet helyesen kerekített eredményét adja. A bonyolultabb függvények esetében azonban nincs ilyen garancia, és ezek általában legfeljebb az utolsó bit pontosságával érhetők el.

A Gelfond-Schneider-tétel és a Lindemann-Weierstrass-tétel segítségével számos standard elemi függvényről bebizonyítható, hogy transzcendens eredményeket adnak vissza, ha racionális, nem nulla argumentumokat adunk meg; ezért mindig lehetséges az ilyen függvények helyes kerekítése. Azonban egy adott pontosságú határérték meghatározása, hogy milyen pontos eredményeket kell kiszámítani ahhoz, hogy a helyesen kerekített eredmény garantálható legyen, sok számítási időt igényelhet.

Vannak olyan csomagok, amelyek teljes pontosságot kínálnak. Az MPFR csomag helyesen kerekített, tetszőleges pontosságú eredményeket ad. Az IBM írt egy csomagot a gyors és pontos IEEE elemi függvényekhez, és a jövőben a szabványos könyvtárak is kínálhatnak ilyen pontosságot.

Lehetséges olyan jól definiálható számokat kitalálni, amelyeket soha nem lehet helyesen kerekíteni, függetlenül attól, hogy hány számjegyet számolunk ki. Például, ha a Goldbach-féle sejtés igaz, de nem bizonyítható, akkor lehetetlen helyesen lefelé kerekíteni 0,5 + 10-n, ahol n az első olyan 4-nél nagyobb páros szám, amely nem két prímszám összege, vagy 0,5, ha nincs ilyen szám. Ez azonban bármilyen pontossággal közelíthető, még akkor is, ha a feltételezés nem bizonyítható.

Történelem

A kerekítés fogalma nagyon régi, talán még az osztás fogalmánál is régebbi. Néhány Mezopotámiában talált ősi agyagtábla tartalmaz táblázatokat a reciprokok és négyzetgyökök kerekített értékeivel a 60-as bázison. A π, az év és a hónap hosszának kerekített közelítései szintén ősi értékek.

A kerek-páros módszer 1940 óta az ASTM (E-29) szabványa. Az elfogulatlan kerekítés és a statisztikus kerekítés kifejezések eredete meglehetősen magától értetődő. Robert Simpson Woodward a Probability and Theory of Errors 1906-os 4. kiadásában ezt "a számítógép szabályának" nevezte, jelezve, hogy akkoriban a matematikai táblázatokat számító emberi számítógépek általánosan használták. Churchill Eisenhart 1947-es "Effects of Rounding or Grouping Data" (Effects of Rounding or Grouping Data) című tanulmánya (in Selected Techniques of Statistical Analysis, McGrawHill, 1947, Eisenhart, Hastay, and Wallis, szerkesztők) jelezte, hogy ez a gyakorlat már "jól bevált" volt az adatelemzésben.

A "bankárkerekítés" kifejezés eredete homályosabb maradt. Ha ez a kerekítési módszer valaha is szabvány volt a bankszektorban, arra rendkívül nehéz bizonyítékot találni. Éppen ellenkezőleg, az Európai Bizottság Az euró bevezetése és a valutaösszegek kerekítése című jelentésének 2. szakasza azt sugallja, hogy a banki kerekítésnek korábban nem volt szabványos megközelítése; és meghatározza, hogy a "félúton" lévő összegeket felfelé kell kerekíteni.

Az 1980-as évekig a lebegőpontos számítógépes aritmetikában használt kerekítési módszert általában a hardver rögzítette, rosszul dokumentálták, nem volt következetes, és a számítógépek egyes márkái és modelljei eltérőek voltak. Ez a helyzet megváltozott, miután a legtöbb számítógépgyártó elfogadta az IEEE 754-es lebegőpontos szabványt. A szabvány lehetővé teszi a felhasználó számára, hogy több kerekítési mód közül válasszon, és minden esetben pontosan meghatározza, hogyan kell kerekíteni az eredményeket. Ezek a jellemzők kiszámíthatóbbá és gépfüggetlenebbé tették a numerikus számításokat, és lehetővé tették az intervallumaritmetika hatékony és következetes megvalósítását.

Kerekítő függvények a programozási nyelvekben

A legtöbb programozási nyelv függvényeket vagy speciális szintaxist biztosít a tört számok különböző módon történő kerekítéséhez. A legkorábbi számnyelvek, mint például a FORTRAN és a C, csak egy módszert biztosítottak, általában a csonkítást (nulla felé). Ez az alapértelmezett módszer bizonyos kontextusokban, például tört szám egész számú változóhoz való hozzárendelésekor vagy tört szám tört szám tömbindexként való használatakor is alkalmazható. A kerekítés más fajtáit explicit módon kellett programozni; például egy pozitív szám kerekítése a legközelebbi egész számra 0,5 hozzáadásával és csonkítással valósítható meg.

Az elmúlt évtizedekben azonban a legtöbb nyelv szintaxisa és/vagy szabványos könyvtárai általában legalább a négy alapvető kerekítési funkciót (fel/fel, le/alul, a legközelebbre és a nulla felé) biztosítják. A holtversenyt megkerekítő módszer a nyelvtől és a verziótól függően változhat, és/vagy a programozó által választható. Több nyelv követi az IEEE-754 lebegőpontos szabványt, és úgy definiálja ezeket a függvényeket, hogy azok egy kétszeres pontosságú lebegőpontos argumentumot vesznek fel, és ugyanilyen típusú eredményt adnak vissza, amely aztán szükség esetén egész számmá konvertálható. Mivel az IEEE kettős pontosságú formátum 52 törtbitet tartalmaz, ezzel a megközelítéssel elkerülhetőek a 32 bites egész számokat használó nyelvekben a téves túlcsordulások. Egyes nyelvek, például a PHP, olyan függvényeket biztosítanak, amelyek egy értéket egy meghatározott számú tizedesjegyre kerekítenek, például 4321,5678-ról 4321,57-re vagy 4300-ra. Ezenkívül sok nyelv biztosít "printf" vagy hasonló karakterlánc-formázó függvényt, amely lehetővé teszi, hogy egy tört számot a felhasználó által megadott számú tizedesjegyre (a pontosságra) kerekített karakterlánccá alakítsunk. Másrészt a csonkolás (nullára kerekítés) még mindig az alapértelmezett kerekítési módszer, amelyet sok nyelv használ, különösen két egész érték osztásánál.

Ezzel szemben a CSS és az SVG nem határoz meg semmilyen konkrét maximális pontosságot a számok és mérőszámok számára, amelyeket a dokumentumobjektum-modelljükben és az interfész-leírónyelvi interfészükben karakterláncokként kezelnek és tesznek közzé, mintha végtelen pontossággal rendelkeznének, és nem tesznek különbséget egész számok és lebegőpontos értékek között; e nyelvek implementációi azonban általában IEEE-754 dupla lebegőpontosra konvertálják ezeket a számokat, mielőtt a kiszámított számjegyeket korlátozott pontossággal megjelenítenék (különösen a szabványos Javascript vagy ECMAScript interfész-kötésekben).

Egyéb kerekítési szabványok

Egyes szakterületek vagy intézmények szabványokat vagy irányelveket adtak ki a kerekítésre vonatkozóan.

Amerikai időjárási megfigyelések

Egy 1966 közepén kiadott irányelvben az Egyesült Államok meteorológiai szövetségi koordinátorának hivatala meghatározta, hogy az időjárási adatokat a legközelebbi kerek számra kell kerekíteni, a "felfelé kerekítés" döntetlenségi szabállyal. Például az 1,5 egész számra kerekítve 2 lesz, a -1,5 pedig -1 lesz. Ezt megelőzően a döntetlen döntő szabály a "nullától félfelé kerekítés" volt.

Negatív nulla a meteorológiában

Egyes meteorológusok "-0"-t írhatnak, hogy 0,0 és -0,5 fok közötti (kizárólagos) hőmérsékletet jelezzenek, amelyet egész számra kerekítettek. Ezt a jelölést akkor használják, ha a negatív előjelet fontosnak tartják, függetlenül attól, hogy milyen kicsi a nagyságrend; például a Celsius skálán a hőmérséklet kerekítésekor, ahol a nulla fok alatti érték fagyást jelent. []

Kapcsolódó oldalak

Kérdések és válaszok

K: Mit jelent a "kerekítés" szó?


V: A kerekítés egy számértéket egy másik, közel azonos, de rövidebb, egyszerűbb vagy egyértelműbb alakú értékkel való helyettesítése.

K: Mi a példa a kerekítésre?


V: A kerekítésre példa lehet a 23,74 USD 24 USD-re kerekítése, a 312/937 tört 1/3-ra kerekítése, és a 2 {\displaystyle {\sqrt {2}} kifejezés 1,41-re kerekítése.

K: Miért kerekítjük a számokat?


V: Azért kerekítjük a számokat, hogy olyan értéket kapjunk, amelyet könnyebb leírni és kezelni, mint az eredetit. A kerekítés azért is történhet, hogy jelezzük egy kiszámított szám pontosságát.

K: Milyen lehetséges problémák merülnek fel a kerekítéssel kapcsolatban?


V: A kerekítés eredményeként némi kerekítési hiba léphet fel, és bizonyos esetekben a számítások során idővel felhalmozódó hibák miatt értelmetlenné teheti az eredményt. Ezenkívül a transzcendens matematikai függvények pontos kerekítése nehézségekbe ütközhet, mivel nem lehet előre tudni, hogy hány extra számjegyet kell kiszámítani annak eldöntéséhez, hogy felfelé vagy lefelé kell-e kerekíteni.

K: Hogyan kapcsolódik a kerekítés a kvantáláshoz?


V: A kerekítés sok hasonlóságot mutat a kvantálással, amely akkor fordul elő, amikor fizikai mennyiségeket kell számokkal vagy digitális jelekkel kódolni.

AlegsaOnline.com - 2020 / 2023 - License CC3