Poslať Str Okt 16, 2013 6:40 pm

Re: 3. sada domácich zadaní

Jeden komentar k ulohe "Sínus a Taylorov rad". Tato uloha mala uvedene hodnotenie 1+1 bod, ale (zamerne) nebolo specifikovane, co konkretne znamena ten +1 za co najefektivnejsie riesenie. Skusim teda o tom napisat nieco viacej. Tato uloha bola na prvy pohlad velmi jednoducha uloha, ktora spocivala vo vyhodnoteni nejakeho matematickeho sumacneho vyrazu pre zadane hodnotu x a n. Jedna z veci, ktoru bolo treba si uvedomit pri rieseni tejto ulohy, je skutocnost, ze jednotlive typy ciselnych premennych maju obmedzeny rozsah. Ak ste teda pocitali faktorial ako hodnotu typu int, vedeli ste vyraz vypocitat len pre male hodnoty n (do 12) - uz hodnota 13! sa do premennej typu int nezmesti. Za taketo riesenie vas pocka 0.5 boda. Pre vacsie hodnoty n (trebars n=40) tadial cesta nevedie (dokonca aj rozsah longu je malo). Spravne spravili preto ti, ktory faktorial (i ked na ukor straty presnosti) pocitali v premennej typu double. Na tych caka 1 bod.

Za co je ten bonusovy bod? Ten bod je pre tych, ktori si uvedomili, ze nemusia nanovo pocitat faktorial (pripadne mocninu alebo cely clen) pre kazdy jeden clen vyrazu. Konkretne, ze vedia vyuzit to, co uz vypocitali. Priklad: (n+2)! = (n+2)*(n+1)*n! Dokonca najidealnejsie riesenie je vypocitat aktualny clen vynasobenim predosleho clena inym vhodnym vyrazom (recnicka otazka: akym?).

Mnohi pouzivali Math.pow - ale ako efektivna je tato funkcia? Co ak je tam zlozity vypocet?

A este jeden technicky komentar: Viacero ludi ratalo (-1)^i cez metodu Math.pow alebo for-cyklom (i krat vynasobili -1). Zo stredoskolskej matematiky by ale malo byt jasne, ze (-1)^i=1 ak i je parne a (-1)^i=-1 ak i je neparne. Stacil tam preto obycajny if s testom parity i-cka (alebo finta so striedanim znamienok).