Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
piccola Forumaš(ica)
Pridružen/a: 30. 11. 2009. (15:39:50) Postovi: (D7)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:35 uto, 25. 10. 2011 Naslov: |
|
|
Moze, s time da faktorijele brzo rastu, pa je mozda bolje umjesto [tt]int[/tt] koristiti [tt]double[/tt]. Takodjer, puno je bolje u konkretnom slucaju racunati bez funkcije:
[code:1]fakt = 1;
n = 1;
xp = x;
x2 = x*x;
while (fabs(opci_clan) >= 5e-5) {
sum += opci_clan = xp / fakt;
fakt *= 2*n*(2*n+1);
++n;
xp *= -x2;
}[/code:1]
Pisano napamet, pa oprezno da nema kakva greska, no stvar se zapravo svodi na to da je
[tex]a_{n+1} = \frac{-x^2}{2n(2n+1)}a_n[/tex], za sve [tex]n > 1[/tex] (pri cemu je [tex]a_n[/tex] opci clan niza koji se sumira).
Moze, s time da faktorijele brzo rastu, pa je mozda bolje umjesto int koristiti double. Takodjer, puno je bolje u konkretnom slucaju racunati bez funkcije:
Kod: | fakt = 1;
n = 1;
xp = x;
x2 = x*x;
while (fabs(opci_clan) >= 5e-5) {
sum += opci_clan = xp / fakt;
fakt *= 2*n*(2*n+1);
++n;
xp *= -x2;
} |
Pisano napamet, pa oprezno da nema kakva greska, no stvar se zapravo svodi na to da je
[tex]a_{n+1} = \frac{-x^2}{2n(2n+1)}a_n[/tex], za sve [tex]n > 1[/tex] (pri cemu je [tex]a_n[/tex] opci clan niza koji se sumira).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
piccola Forumaš(ica)
Pridružen/a: 30. 11. 2009. (15:39:50) Postovi: (D7)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 22:38 uto, 25. 10. 2011 Naslov: |
|
|
Naravno, moze i bolje (zaboravih napomenuti prvi put), ako se direktno iskoristi formula koju sam dao. Umjesto
[code:1] sum += opci_clan = xp / fakt;
fakt *= 2*n*(2*n+1);
++n;
xp *= -x2;[/code:1]
se stavi
[code:1] sum += opci_clan *= -x2 / (2*n*(2*n+1));
++n;[/code:1]
Na Numerickoj matematici cete uciti (ili ste ucili) zasto je ovako bolje (hint: manja sansa za overflow).
Ima tu jos mjesta za sitna poboljsanja (npr. onih 2 iz nazivnika direktno ugurati u [tt]x2[/tt]), no ovako bi trebalo biti u redu.
Ne znam gdje ti ovo treba, no ispravna implementacija bi [tt]x[/tt] prvo gurnula u raspon [tex]\left[-\frac{\pi}{2}, \frac{\pi}{2}\right][/tex], da brojke ne podivljaju za po apsolutnoj vrijednosti velike vrijednosti [tt]x[/tt]-a.
Naravno, moze i bolje (zaboravih napomenuti prvi put), ako se direktno iskoristi formula koju sam dao. Umjesto
Kod: | sum += opci_clan = xp / fakt;
fakt *= 2*n*(2*n+1);
++n;
xp *= -x2; |
se stavi
Kod: | sum += opci_clan *= -x2 / (2*n*(2*n+1));
++n; |
Na Numerickoj matematici cete uciti (ili ste ucili) zasto je ovako bolje (hint: manja sansa za overflow).
Ima tu jos mjesta za sitna poboljsanja (npr. onih 2 iz nazivnika direktno ugurati u x2), no ovako bi trebalo biti u redu.
Ne znam gdje ti ovo treba, no ispravna implementacija bi x prvo gurnula u raspon [tex]\left[-\frac{\pi}{2}, \frac{\pi}{2}\right][/tex], da brojke ne podivljaju za po apsolutnoj vrijednosti velike vrijednosti x-a.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
|