» »

[Naloga] Eulerjevo število

[Naloga] Eulerjevo število

Volk| ::

Rabil bi nekaj formul za izracun Eulerjevega števila.
Vem da je bedasto...toda rabil bi formulo(e) da jo sprogramiram...naloga za šolo...

edit: se opravicujem ce sem zgresil temo
  • spremenilo: snow ()

Matek ::

Bolje ispasti glup nego iz aviona.

Zgodovina sprememb…

  • odbrisal: Matek ()

Volk| ::

To sem videl...sem upal da bom najdo kako bolj "enostavno" formulo.
Le kak naj izracunam limito v C :O
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

hamax ::



namesto x vstavis 1 in imas preprosto formulo za e ;)

Matek ::

Saj tiste limite ne mores nikakor izracunati. Zadeva je pac iracionalno stevilo, tako da se v vsakem primeru uporablja priblizek. V wiki clanku mas neskoncno zaporedje, katerega vsota je e (pa tudi hamax ti ga je prilepil zgoraj), noben problem ga ni spravit v kodo, potem pa das zadevo v for zanko s par tisoc ponovitvami, ko postanejo reci dovolj majhne, da je tvoj priblizek kul. Ce hoces se bolj smiselno resitev, preverjaj stevilo, ki ga pristejes v vsakem koraku in imej zadevo v while zanki, ki se prekine, ko je to stevilo dovolj majhno, tako da bos lahko nadzoroval na koliko decimalk natancno je zadeva izracunana.
Bolje ispasti glup nego iz aviona.

Zgodovina sprememb…

  • spremenil: Matek ()

Volk| ::

Evo, sprogramiral sem prvo.
Zdaj se moram sprogramirat da mi program izracuna limito...huh...ta bo tezka..
skoda da ni v knjiznici math.h
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

Volk| ::

Je ze nekaj casa kaj sem hodil k matematiki. Kako se racuna limita?
KLIK
Torej, da lahko sprogramiram tole.
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

sverde21 ::

e je število, ki ga dobimo tako, da limitiramo tisti izraz proti neskončno... Torej bolj kot je n velik bolj natančen e dobiš. Tako da lahko vstaviš kot n eno poljubno število, ki je pametno da je precej veliko (saj tako dobiš natančnejši približek e-ja) in izračunaš e.

Example koda v Javi:
class euler {
	public static void main(String[] args) {
		System.out.println(e());
	}
	
	private static double e() {
		double n = 1000000L;
		
		return Math.pow(1 + 1 / n, n);
	}
}
<?php echo `w`; ?>

kihc ::

svedre: tvoje rešitev je s performančnega stališča katastrofalna (na faxu bi najbrž dobu 0 pik).

Morš dat v zanko, pa seštevaš elemente; s tem da se vsak naslednji element od prejšnjega razlikuje le za faktor 1/n.
x

Volk| ::

Kaj pa neskoncni ulomek? Tudi s tem se da zracunat, kaj?
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

kihc ::

Števila e se ne da natančno izračunat (tako kot pi ima tudi e neskončno decimalk).

Ti pač seštevaš ulomke dokler ne dobiš natančosti kot je želiš (recimo, če želiš 5 decimalk natančno, seštevaš dokler ni en ulomek manjši od 0,000001, ko imaš ta pogoj izpolnjen, nehaš prištevat).
x

Volk| ::

Vem kaj je e, bolj mi je problem sestevat neskoncni ulomek. Ravno gledam kako to gre.
Torej na zacetku imam 2 kateremu pristejem naslednji ulomke ki je 1/?....in tako dalje...
kaj je tisti '?'
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

netanyahu ::

Lažje kot z računanjem neskončnega ulomka boš vrednost dobil z izračunom limite ali ene od preprostih neskončnih vsot. Člene vsote enostavno seštevaš v zanki.

// http://en.wikipedia.org/wiki/Representations_of_e
class E {
    public static void main(String[] args) {
        double e;
        System.out.printf("%16s %16s\n", "priblizek", "|priblizek - e|");

        // prava vrednost
        {
            e = Math.E;
            System.out.printf("%.14f %.14f\n", e, Math.abs(e-Math.E));
        }

        // e = lim {n->inf} (1 + 1/n)^n
        {
            double n = 1e6;
            e = Math.pow(1 + 1/n, n);
            System.out.printf("%.14f %.14f\n", e, Math.abs(e-Math.E));
        }

        // e = sum {k=0..inf} (1 / (k!))
        {
            e = 0;
            int n = 15, kf = 1;
            for(int k=0; k<=n; k++) {
                e += 1 / (double)kf;
                kf *= (k+1);
            }
            System.out.printf("%.14f %.14f\n", e, Math.abs(e-Math.E));
        }

        // e = sum {k=1..inf} (k^4 / (15*(k!)))
        {
            e = 0;
            int n = 15;
            double kf = 1;
            for(int k=1; k<=n; k++) {
                e += (k*k*k*k) / (15 * kf);
                kf *= (k+1);
            }
            System.out.printf("%.14f %.14f\n", e, Math.abs(e-Math.E));
        }


    }
}


Izpis:
       priblizek  |priblizek - e|
2,71828182845905 0,00000000000000
2,71828046909575 0,00000135936329
2,71828183008457 0,00000000162553
2,71828182823340 0,00000000022564

kihc ::

1/2 + 1/2*3 + 1/2*3*4 + 1/2*3*4*5 ...
x

Volk| ::

@kihc
Lahko malo bolj razlozis tole kaj si napisal, prosim?

kihc ::

Ja ulomki, ki te zanimajo gredo takole (na začetku je 1/1 = 1 katero si že štel v tisti dvojki ki si jo omenu): 1/2, naslednji ulomek je 1/(2*3) = 1/6, naslednji ulomek je 1/(2*3*4) = 1/12, itd ...

Nočem ti glihk direkt algoritma zapisat ker pol je brezveze.
x

Volk| ::

1/(2*3*4) = 1/24
Malo si se zmotil. Ok, razumem kako se mnozi in sesteva.
Bom sprogramiral zadevo...se ze itak predolgo ukvarjam s tem.
Hvala
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

kihc ::

1/(2*3*4) = 1/24

:D
x

Volk| ::

Ok, programiranje je bilo lazji del.
Saj bi prilepil kodo, toda sem pozabil(vcasih sem vedel) katere html oznake moram vkljucit da se ahko prikaze koda.
Ce mi bo kdo povedal bom prilepil kodo:D
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

sverde21 ::

@kihc: a ma kakšno vezo kolk bi dobu na faxu za teh 5 vrstic? Rešitev je očitno več, napisal sem tisto, ki se mi zdi najlažja, pa čeprav ni najboljša.
EDIT: spet sem prehitro bral :8) in spregledal da je to naloga... čeprav, zakaj ni moderator dodal pred naslov teme [Naloga], ko je že premikal temo ;)

@Volk|: [ st.koda][ /st.koda] brez presledkov pred [ seveda... če pa imaš kodo v c, php, java, javascript, vb, perl, pascal ali html pa pišeš takole [ st.koda jezik][ /st.koda jezik]
<?php echo `w`; ?>

Zgodovina sprememb…

  • spremenil: sverde21 ()

Volk| ::

        double vsota=1;
	double k=1;
	double i=1;
	for(i;i<=pogoj;i++)
	{
		k*=i;
		double temp= 1/k;
		vsota+= temp;
	
	}
	return vsota;
_______________________________________________________
Izobražen je tisti človek, ki ve, kje bo našel tisto, česar ne ve.

gani-med ::

# En eleganten primer algoritma za računanje števila e v Pythonu
# 1000 decimalk izpljune v trenutku

def steviloe(decimalk):
___e = 10 ** (decimalk + 5)
___sig = u = n = 1
___cnt = 0
___while cnt < 10:
_____e = (e * (u+1))//u
_____u = (n+1)*(u+1)
_____n += 1
_____leastsig = e & 1111

_____if leastsig == sig: cnt += 1
_____else:
_______sig = leastsig
_______cnt = 0

___se = str(e)
___return se[0]+"."+se[1:decimalk+1]

print steviloe(1000)


edit: popravljena poravnava, znak _ zamenjaj s presledkom
(Pythonova kaprica glede poravnave)

še razlaga:
upošteva se dejstvo da je
1 + 1/1! + 1/2! + 1/3!+ 1/4! + 1/5!
mogoče zapisati kot 1+(1+(1+(1+(1+1/5)/4)/3)/2)/1
CO2 is the elixir of life.

Zgodovina sprememb…

  • spremenilo: gani-med ()

snow ::

[ st.koda ] tagi mogoče?

Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

gani-med ::


def steviloe(decimalk):
      e = 10 ** (decimalk + 5)
      sig = u = n = 1
      cnt = 0
      while cnt < 10:
           e = (e * (u+1))//u
           u = (n+1)*(u+1)
           n += 1
           leastsig = e & 1111

           if leastsig == sig: cnt += 1
           else:
                sig = leastsig
                cnt = 0

     se = str(e)
     return se[0]+"."+se[1:decimalk+1]

print steviloe(1000)




## Ja, tole zgleda lepše
CO2 is the elixir of life.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo

[C#]naloga iz metod!

Oddelek: Programiranje
81645 (1478) Ziga Dolhar
»

Java problem

Oddelek: Programiranje
201602 (1300) infiniteLoop
»

[NALOGA][Java] Sinus

Oddelek: Programiranje
81297 (1229) Lukeatluke
»

[java] napaka

Oddelek: Programiranje
91594 (1594) tx-z
»

[Naloga][Java] Ulomki

Oddelek: Programiranje
62653 (2501) SkIDiver

Več podobnih tem