wir alle lieben pi



  • Andrey schrieb:

    hier geht es darum nicht, ein paar stellen hin oder her... wenn du PI als einen grenzwert einer iteration angibst, reicht es schon.
    aber das, was jucks vorgeschlagen hat, ist meiner meinung nach nicht berechenbar, egal wie schnell der rechner ist...

    ich schlage vor, dass du mit deinen stäbchen und viel sand die nullstelle des bei n abgebrochenen taylorpolynoms ausrechnest, und n so lange erhöhst, bis pi genau genug ist. falls du was anderes gemeint hast, habe ich dich falsch verstanden.



  • Andrey schrieb:

    @CStoll:
    mal eine frage nebenbei: wenn ich jetzt PI auf 100 stellen genau berechnen wollte, nur mit C++ an sich und einem gewöhnlichen rechner mit float=4byte, ohne irgendwelche zusatzbibliotheken für supergenaue zahlen, wäre das möglich? ich meine nähmlich irgendwo gesehen zu haben, dass man in c++ einfach so "quad" analog zu "double" definieren kann, mit vierfacher genauigkeit. (wie) geht das? 😕

    thx im voraus

    Klar geht das. Weil es mich selbst interessiert hat, habe ich gesucht und bin auf diesen Schnippsel bemerkenswerten Code gestoßen:

    #include<iostream>
    int main(){
    	int a=10000, b=0, c=2800, d, e, f[2801], g;
    	for( ; b-c ; ) f[b++]=a/5;
    	for ( ; d=0 , g=c*2; c-=14, printf("%.4d",e+d/a), e=d%a)
    		for( b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b);
    	return 0;
    }
    

    Es ist sogar äußerst kurz, aber leider auch extrem kryptisch. Ich habe keine Ahnung, was es tut, aber es spuckt mir 800 Stellen von Pi in 15ms aus. (Die letzte Stelle ist falsch gerundet.)

    http://titanos.de/iso-c++/cpp:pi



  • also, ich habe die methode mit der abgebrochenen taylorreihe anfangs nicht so gut gefunden, weil ich mir folgendes gedacht hab:
    -man kann zwar für ein bestimmtes n, wo die folge abbricht, eine nullstelle unendlich genau berechnen, doch wenn mans dann genauer haben will, muss man von anfang an mit einem viel größeren n anfangen.

    ich habe dabei ausser acht gelassen, dass es bei meiner methode nicht viel anders ist: zwar wird PI als ein grenzwert beschrieben, aber die verwendeten wurzelfunktionen lassen sich auch nur durch sehr viele iterationen annähern

    => es ist in beiden fällen nicht so, dass man beliebig genaue ergebnisse bekommt, wenn man eine rechnung lange genug fortsetzt. Irgendwann ist man gezwungen, die rechnung komplett neuanzufangen (in einem fall wegen wurzeln, in dem anderen wegen zu kleinen n)
    😃
    naja, ist eh egal, wen interessierts heute? 🙂



  • Falls dir die Hexdezimal- oder Binärdarstellung genügt, kannst du mit der BBP-Formel die n-te Stelle berechnen, ohne die n-1 Stellen davorzu kennen.

    http://de.wikipedia.org/wiki/Bailey-Borwein-Plouffe-Formel



  • ohje... dat ist ja was total schräges 😮
    aber möglicherweise ist es besser, als alles, was hier bisher vorgeschlagen wurde...



  • Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).



  • Gute idee... 💡 die sogenannte Leibniz-reihe kann man verwenden, aber die soll sau langsam konvergieren, für 5 nachkommastellen bräuchte man schon 1000000 folgenglieder zusammenaddieren 😃
    aber ⚠ wenn man mit dieser reihe rechnet, kann man nur ein einziges mal anfangen, und das ergebnis immer weiter verbessern! das ist der entscheidende vorteil gegenüber den bisherigen methoden 👍



  • CStoll schrieb:

    Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).

    Äh, und acos(0)=pi/2 ist falsch oder wie?



  • warum falsch... geht doch genausogut... die ganzen funktionen hängen eh eng miteinander zusammen=> fast dasselbe



  • Genausogut?

    Entwickelt doch mal 2*arccos(x) um x = 0.

    Der erste Koeffizient ist schonmal 2*arccos(0). Hm. Moment mal. Den Wert wollen wir ja haben!

    Um es kurz zu machen, MuPad sagt

    >> taylor(2*arccos(x),x=0)
    
                                       3      5
                                      x    3 x       7
                           PI - 2 x - -- - ---- + O(x )
                                       3    20
    

    Halte ich nicht für vorteilhaft, um Pi zu berechnen. Aber es kann sicherlich noch andere passende Reihen geben.



  • Zum Beispiel arcsin(x)...

    >> taylor(2*arcsin(x),x=0,15)
    
              3      5      7       9       11        13        15
             x    3 x    5 x    35 x    63 x     231 x     143 x        17
       2 x + -- + ---- + ---- + ----- + ------ + ------- + ------- + O(x  )
              3    20     56     576     1408      6656      5120
    

    Für x = 1.



  • ja, arcsin arccos... meine güte, n halbes pi hin ein halbes pi her 😉
    aber mit der taylorreihe geht es auf jedn fall ganz gut 👍



  • EinPhysiker schrieb:

    Genausogut?

    Entwickelt doch mal 2*arccos(x) um x = 0.

    Der erste Koeffizient ist schonmal 2*arccos(0). Hm. Moment mal. Den Wert wollen wir ja haben!

    😃
    wenn Du atan(x) um 1 entwickelst klappt atan(1) auch nicht. Du mußt natürlich um nen anderen Punkt entwickeln wo Du Pi nicht brauchst.



  • Daniel E. schrieb:

    CStoll schrieb:

    Wenn ihr schon mit Taylor-Reihen kommt, solltest ihr vielleicht mal die richtige Reihenentwicklung verwenden: Pi = 4*atan(1).

    Äh, und acos(0)=pi/2 ist falsch oder wie?

    Ich hatte auch schon überlegt, ob ich "pi=2*asin(1)" auch erwähnen sollte - aber die Taylor-Entwicklung des Arcus-Sinus gilt nur für |x| < 1. (bei x=1 ist er nicht differenzierbar)

    Aber du kannst ja gerne zur Grenzwertentwicklung überrgehen und pi = 2*lim(x->1) asin(x) ermitteln.


Anmelden zum Antworten