Citat:
djoka_l: PMF-ovac će ti napisati program za nalaženje lokalnog maksimuma u prostoru koji predstavlja graf sa 100,000 čvorova i milion veza koristeći algoritam sa paralelizacijom (video sopstvenim očima), ali će zato da napiše program za izračunavanje kamate bez korišćenja EXP funkcije, nego umesto toga će EXP razviti u Tejlorov (ili Maklorenov) red jer mu bibliotečka funkcija nije dovoljno tačna (i to sam video svojim očima).
Od te funkcije nećeš napraviti tačniju kao takvu. Ako ti treba nešto drugo, što je izvedeno iz nje, kao

,
za to je loše koristiti bibliotečku funkciju exp, već treba koristiti expm1(x)/x. Ako ti pak treba

,
e onda ti ni expm1 neće pomoći da dobiješ zadovoljavajuću tačnost u okolini nule, pa ti treba razvoj u red. Međutim, ne vidim da to ima veze sa kamatom. Ako je kamatna stopa k, a glavnica g, onda je kamata posle n perioda ukamaćivanja (ne mora biti ceo broj) sa neprekidnim ukamaćivanjem biti

,
gde su expm1 i logp1 bibliotečke funkcije koje izračunavaju funkcije matematički definisane kao logp1(x)=log(1+x) i expm1(x)=exp(x)-1, a koje nisu implementirane preko funkcija log i exp, već imaju zasebnu implementaciju koja je tačna (onoliko koliko taj tip dopušta) u okolini nule. Pravljene su baš za to. Osim toga, ako kamatne stope nisu blizu nule i broj perioda ukamaćivanja nije manji od jedinice, onda se mogu koristiti i obične funkcije exp i log, jer ta formula ima problem samo u okolini nule.
Citat:
djoka_l: FON-ovca možeš da naučiš šta radi EXPLAIN PLAN komanda, ali ne možeš da ga naučiš kako da optimizuje upit. I to sam morao da popravljam iza FON-ovca, upit koji se izvršavao sat vremena sam skratio na 30 sekundi.
Pošalji ga kod mene da ga naučim. Te optimizacije se obično svode na:
1. U uslovu
Code:
A AND B AND C
rasporediti uslove A, B i C tako da se prvo ispituju oni koji imaju kratku proveru, a od onih sa kratkom prvoerom prvo one za koje je verovatnoća da imaju vrednost FALSE velika. Zapravo, ako su verovatnoće da iskazi imaju vrednost FALSE (ako su nezavisni) p1, p2 i p3, a vremena potrebna za izvršavanje t1, t2 i t3, treba izabrati redosled kojim se minimizuje p1*t1+(1-p1)*p2*(t1+t2)+(1-p1)*(1-p2)p3*(t1+t2+t3), ali je to često teško računati jer tačne vrednosti parametara nisu poznate.
Slična priča važi i za OR, samo što tamo treba prvo da idu uslovi koji se brzo proveravaju, a od onih koji se brzo proveravaju prvo one kod kojih je verovatnije da imaju vrednost TRUE.
2. Optiomizacija na osnovu zakona relacione algebre i predikatskog računa (ima ih nekoliko). Na primer, kod
Code:
FORALL X FORALL Y P
FORALL X i FOPRALL Y mogu da zamene mesta, a obzirom da su u suštini AND-ovi, može se primeniti ideja iz tačke 1.
Koliko sam čuo, orakl odavno automatski primenjuje one optimizacije iz ove grupe koje se mogu efikasno sprovesti automatski. Ova prethodna ne može jer ne zna u kojoj će varijant ranije da nastupi FALSE.
U ovu grupu spada i izbacivanje ugnježdenog SELECT-a da ne bude ugnježden itd.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.