Efni 70 af 91· Hugbúnaðarverkfræði og stafræn afhending
Nákvæm úthlutun kostnaðar upp á eyri
Að skipta heildarupphæð — sameiginlegum styrk, innviðareikningi, tölu fjárlagaáhrifa — milli nokkurra viðtakenda með einföldum prósentureikningi skilar reglulega hlutum sem leggjast ekki saman í upprunalegu heildina. Nákvæm úthlutun upp á eyri er lagfæringin: aðferð með heiltölum/tugum, sem vinnur í minnstu gjaldmiðilseiningum (sentum), og tryggir að hlutirnir leggist nákvæmlega saman í heildina, sama hversu ójafnt hún deilist. Sérhver hugbúnaðarverkfræðingur sem þarf að stemma af skiptan heildarupphæð upp á sent — laun, styrkgreiðslur, gjaldfærsla sameiginlegrar þjónustu — þarf þetta mynstur, ekki fljótandi prósentur.
Hvers vegna það skiptir máli
Þetta er nefnt, grundvallarmynstur í hugbúnaðarverkfræði stórfyrirtækja: Patterns of Enterprise Application Architecture (2002) eftir Martin Fowler skjalfestir Money og Allocate einmitt vegna þess að „skiptu 100 $ á þrjá“ er vandi sem einfaldur kóði fer stöðugt rangt með, og hljóðlega — villan kemur í ljós þegar einhver stemmir bækurnar af og finnur hlutina senti of litla (eða of stóra) miðað við heildina. Í heilsuhagfræði og fjármálum NHS er þetta ekki fræðilegt: heildartölur fjárlagaáhrifa eru skiptar milli staða, ára eða sviða; sameiginlegur innviða- og leyfiskostnaður er úthlutaður milli deilda eftir starfsmannafjölda eða starfsemishlutdeild. Sérhver slík skipting verður að ganga upp nákvæmlega, því fjármálastjóri sem fær hluta sem leggjast ekki saman í heildina hættir að treysta öllu líkaninu.
Stærðfræðin
Einföld (biluð) aðferð:
hluti_i = round(heild × hlutur_i / Σ hluta) — námundar hvern hluta sjálfstætt
Nákvæm aðferð (stærsti afgangur / „largest remainder allocation“):
1. grunnur_i = floor(heild_í_minnstu_einingum × hlutur_i / Σ hluta) — aðeins heilar minnstu einingar (sent)
2. afgangur = heild_í_minnstu_einingum − Σ grunnur_i — sent sem eftir eru, alltaf < fjöldi viðtakenda
3. úthlutaðu 1 aukalegri minnstu einingu til hvers af `afgangur` viðtakendum með
stærsta brotaafganginn úr skrefi 1, þar til afgangurinn er uppurinn
Niðurstaða: Σ hluti_i == heild, alltaf, samkvæmt smíði.
Nákvæma aðferðin námundar aldrei hluta einn og sér — hún námundar alla úthlutunina í einni aðgerð, sem er það sem gerir summuóbreytuna gilda.
Dæmi útreiknað
Skiptu 100,00 $ jafnt á þrjá (hlutir = [1, 1, 1]).
Einföld aðferð: 100,00 $ ÷ 3 = 33,333… $, námundað sjálfstætt að næsta senti gefur 33,33 $ fyrir hvern viðtakanda. Samtals: 33,33 $ × 3 = 99,99 $ — eitt sent hefur horfið og engin ein lína er „nógu röng“ til að sjást við skoðun.
Nákvæm aðferð: grunnur = 33,33 $ fyrir alla þrjá (9.999 minnstu einingar samtals úr floor(10.000 / 3) = 3.333 sentum hver), og eftir stendur 1 sent (10.000 − 9.999). Það eina sent sem eftir er fer til þess viðtakanda sem hefur stærsta brotaafganginn í deilingunni — hver nákvæmlega er innra jafnteflisatriði, ekki eitthvað sem kallari á að reiða sig á. Tveir viðtakendur enda með 33,33 $ og einn með 33,34 $, og hlutirnir þrír leggjast saman í nákvæmlega 100,00 $.
Þetta er nákvæmlega sá reikningur sem fjárlagaáhrifagreining þarfnast hvenær sem heildartölu fjárlagaáhrifa þarf að skipta milli staða, hópa eða fjárhagsára og stemma aftur við birtu heildina — sjá gjaldmiðlaörugga kostnaðarsamantekt fyrir hliðarvandann að leggja saman marga slíka línuliði án reks.
Tengsl við hugbúnaðarverkfræði
Þetta er bókstaflega „Money-mynstrið“ úr hugbúnaðararkitektúr stórfyrirtækja — grundvallar, nefnt mynstur fyrir nákvæmlega þennan villuflokk, ekki einstakt bragð. Raunveruleg bilun í fjárhagsafstemmingu hefur farið í loftið vegna nákvæmlega þessa villuflokks: prósentuskiptingar reiknaðar í f64, námundaðar á hvern viðtakanda og aldrei bornar saman við upprunalegu heildina. Það tengist beint einingu þessa safns um heildareignarkostnað, sem leggur nú saman venjulegan fljótandi kostnað yfir ár og kosti — sami nákvæmnisagi gildir hvenær sem TCO- eða fjárlagaáhrifaheild verður að vera úthlutuð fremur en aðeins samanlögð.
Gildrur
- Prósenta-svo-námunda í stað stærsta afgangs: úthlutun með fljótandi prósentum og námundun hvers viðtakanda sjálfstætt, sem magnar námundunarvillu og leggst sjaldan saman í heildina, sérstaklega yfir marga viðtakendur.
- Að horfa framhjá veldisvísum minnstu gjaldmiðilseininga: að gera ráð fyrir að allir gjaldmiðlar hafi 2 aukastafi — japanskt jen hefur 0, sumir gjaldmiðlar hafa 3 — handsmíðuð prósentuskipting harðkóðar yfirleitt 2 og bilar hljóðlega fyrir aðra gjaldmiðla; nákvæm úthlutunarrútína les veldisvísinn úr gjaldmiðlinum sjálfum (ISO 4217).
- Endurúthlutun á þegar úthlutuðum afgangi: að keyra úthlutunarrútínuna aftur á það sem eftir er af fyrri úthlutun, án idempotency-athugana, sem getur tvíinnskrifað sama sentið á sama viðtakanda.
Heimildir
- Fowler M. "Patterns of Enterprise Application Architecture." Addison-Wesley, 2002 — the
MoneyandAllocatepatterns. - ISO 4217 — currency and funds code standard, which defines each currency's minor-unit exponent.