Tema: Re: Skaiciavimo optimizavimas
Autorius: Saulius Sakarauskas
Data: 2010-04-14 00:14:44
Donatas wrote:
> Sveiki,
> 
> turiu situacija, kuri panaši i bankinių palūkanų skaičiavimą kaupiamiesiems 
> indėliams. Esmė tokia.
> Turime DB irašus: Data, Suma. Galima padidinti ir sumažinti Suma (jei 
> sumažinima irašoma su minusu) ir nurodoma data. Reikia skaičiuoti palūkanas 
> kažkokiam periodui, pvz.: mėnesiui, (kad ir 0,2% / dienai) ,bet nuo faktinio 
> likučio TAI dienai. Pvz irašai .:
> 2010-04-01 1000Lt
> 2010-04-05  500Lt
> 2010-04-18  -900Lt
> 
> Reiktųų suskaiciuoti palūkanas 04 mėnesiui (31diena) taip (faktinis likutis 
> x palūkanos x dienų skaičius + ...):
>  1000x0,2x5  + 1500x0,2x14 + 600x0,2x14 = ...
> 
> Kadangi reikia žinoti kiekviena dieną kiek yra palūkanų , neradau kito budo 
> kaip skaičiuoti ir i DB saugoti kiekvienos dienos suskaičiuotas palūkanas, 
> taciau būna, kad reikai perskaiciuoti iš kart pvz už 3 mėn.(tada reikai 
> žinoti tik galutinę palūkanų sumą). Skaičiuojant  kiekvieai dienai užtrunka 
> labai ilgai.  Gal yra koks paprastesnis (optimalesnis) sprendimas tokio 
> pobūdžio skaičiavimams atlikti nei sukti cikla. Nes jei bankai savo 
> kiekvienam klientui taip skaičiuotų užtruktų laaabai ilgai.

   Įdėsiu smulkų komentarą. Taip, skaičiuojant kiekvieną dieną trunka 
ilgai. Bet bankinės sistemos taip ir daro, nes:

   1. Vis tiek kiekvieną dieną reikia raportuoti Lietuvos bankui 
sukauptas palūkanas iš vienos ir iš kitos pusės (čia taip grubiai parašiau).
   2. Bankinė sistema turi būti transakcijinė. T.y. kiekviena istorinė 
operacija turi būti atvaizduota būtent taip, kaip ir įvyko. 
Nepriklausomai, ar dėl kliento kaltės jis vėlavo vieną dieną, ar šiaip 
banko sistema buvo "palūžusi į vakarą". Todėl tokių "nestandartinių" 
variantų gausybė neleidžia parašyti universalios formulės.
   Beje, šiam atvejui "kabina" ne tik istorinės operacijos, bet ir 
gražinimo grafikai. Jeigu bankas klientui jau išsiuntė, kad jam reikės 
mokėti paskolą tokią ir tokią dieną, tai tai jau kaip ir 
įsipareigojimas. Ir jis nesikeičia, jeigu seimas netikėtai sugalvoja 
perkelti poilsio dieną...

   Anyway, patikėk variantų gali būti daug ir įvairių, kad universalios 
formulės nerasi.


   Beje, dar viena smulki ir jau matematinė pastaba. Tarkime tu nori 
sutaupyti, ir palūkanas sudauginti iš karto už kelias dienas. O bankas 
(kita pusė) jas skaičiuos kiekvieną dieną. Kaip manai, ar priskaičiuotų 
palūkanų suma bus lygi ir pirmu, ir antru atveju?
   Iš karto pasakysiu, kad tam tikrais atvejais skiriasi (nes viskas 
apvalinasi iki centų). O pagal apskaitos taisykles reikia skaičiuoti 
kiekvieną dieną atskirai. Tad ar tavo patobulintas algoritmas sugebės 
paskaičiuoti pagal apskaitos taisykles? ;-)

   Tikiuosi, ne per sudėtingai parašiau. ;-)

   Iki,
   Saulius
--

Windows contains FAT.  Use Linux -- you won't ever have to worry
about your weight.

    -- Ewout Stam