wir alle lieben pi



  • Andrey schrieb:

    klar kann man das. pi ist das doppelte der kleinsten positiven nullstelle vom cosinus.

    mir ist keine andere möglichkeit bekannt, cosinus auszurechnen, ausser mit einer taylorreihe. Die taylorreihe hat einentlich unendlich viele summanten, und dann noch mit unendlich großen potenzen. wie soll man bei so einer funktion eine nullstelle finden??? 😕

    PI hat unendlich viele Stellen, wie soll man die Zahl jemals ausrechnen?!? 😮 😉



  • 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...



  • Andrey schrieb:

    mir ist keine andere möglichkeit bekannt, cosinus auszurechnen, ausser mit einer taylorreihe.

    Nicht mal Taschenrechner machen das per Taylorreihe, sondern mit irgendwelchen anderen Algorithmen (google zB nach CORDIC). Schon die trigonometrische Definition am Einheitskreis liefert eine geometrische Berechnungsvorschrift, die ohne die Kentnisse von Reihenentwicklungen auskommt ...

    Die taylorreihe hat einentlich unendlich viele summanten, und dann noch mit unendlich großen potenzen. wie soll man bei so einer funktion eine nullstelle finden???

    Schau dir die Reihe halt an, dann wirst Du feststellen, daß die Gleider erwartungsgemäß eine Nullfolge bilden und, haha, auch die Summe aller Gleider größer N konvergieren. Du mußt also die Taylorreihe nur bis zum N-1-ten Gleid ausrechnen und bist dann nur ein selbstgewähltes epsilon (das von N abhängt) vom korrekten Ergebnis weg. Zugegebenermaßen dürfte das numerisch nicht besonders clever sein, aber deine grundsätzliche Abneigung verstehe ich nicht.



  • Fall es jemand interessiert, die Folge die gegen e strebt ist:

    1 + 1/2! + 1/3! + 1/4! + ...



  • aber deine grundsätzliche Abneigung verstehe ich nicht

    ach quatsch, was für "abneigung" 😉 , ich verstehe im moment einfach nicht ganz, was der jucks will, was solls, ich bin ja kein mathespezialist hier... 🤡

    Nicht mal Taschenrechner machen das per Taylorreihe, sondern mit irgendwelchen anderen Algorithmen (google zB nach CORDIC).

    naja, wenn man sich die initialisierung (bei wikipedia) anschaut, sieht man, dass da alles voller vorberechneter sin cos & tan werte ist, die nur geschickt miteinander kombiniert werden. auf ergebnisse der taylorreihe kann man da immer noch nicht verzichten, nur, man berechnet die eben nicht zur laufzeit, sondern brennt eine tabelle mit werten in die hardware rein 👍
    (aber trotzdem danke für's stichwort, war durchaus interessant sich sowas mal durchzulesen 🙂 hab ja vorher nicht gewusst, wie ein taschenrechner funktioniert :p )

    Du mußt also die Taylorreihe nur bis zum N-1-ten Gleid ausrechnen und bist dann nur ein selbstgewähltes epsilon (das von N abhängt) vom korrekten Ergebnis weg.

    so, das verstehe ich nicht ganz (wegen einer wissenslücke: was war nochmal eine Nullfolge? 🙄 ) wäre cool wenn du evtl. eine rechnung posten würdest, wie man aus der taylorreihe auf PI kommen kann 🤡 👍



  • phyll schrieb:

    Fall es jemand interessiert, die Folge die gegen e strebt ist:

    1 + 1/2! + 1/3! + 1/4! + ...

    ja, das ist die taylorreihenentwicklung für x=1, damit kann man allgemein werte von e^x berechnen. e^1 ist halt einfach e...



  • Andrey schrieb:

    Nicht mal Taschenrechner machen das per Taylorreihe, sondern mit irgendwelchen anderen Algorithmen (google zB nach CORDIC).

    naja, wenn man sich die initialisierung (bei wikipedia) anschaut, sieht man, dass da alles voller vorberechneter sin cos & tan werte ist, die nur geschickt miteinander kombiniert werden. auf ergebnisse der taylorreihe kann man da immer noch nicht verzichten, nur, man berechnet die eben nicht zur laufzeit, sondern brennt eine tabelle mit werten in die hardware rein 👍
    (aber trotzdem danke für's stichwort, war durchaus interessant sich sowas mal durchzulesen 🙂 hab ja vorher nicht gewusst, wie ein taschenrechner funktioniert :p )

    Wo auch immer die Werte herkommen ... wie gesagt, da gibt es viele Möglichkeiten. Male einen Einheitskreis auf Karopapier, zeichne eine Gerade unter dem Winkel phi durch den Ursprung, trage nach Definition (also die Projektion auf die x-Achse) den Cosinus an und zähle die Kästchen. Jetzt verfeinere systematisch dein Karopapier, dann kannste den Cosinus durch Kästchenabzählen ermitteln. Zugegebenermaßen, dafür braucht man Wissen über Winkel.

    Du mußt also die Taylorreihe nur bis zum N-1-ten Gleid ausrechnen und bist dann nur ein selbstgewähltes epsilon (das von N abhängt) vom korrekten Ergebnis weg.

    so, das verstehe ich nicht ganz (wegen einer wissenslücke: was war nochmal eine Nullfolge? 🙄 ) wäre cool wenn du evtl. eine rechnung posten würdest, wie man aus der taylorreihe auf PI kommen kann 🤡 👍

    Du willst es doch nur näherungsweise, oder?

    Dann brichst Du die Reihenentwicklung des Cosinus an irgendeiner Stelle einfach ab[1]; dann hast Du im wesentlichen eine Polynomfunktion, deren kleinste Nullstelle >0 sollte sich mit einem üblichen numerischen Verfahren zur Nullstellensuche finden lassen und schon hast Du einen Näherungswert für pi/2 gefunden.

    [1]: Das ist natürlich der Knackpunkt, wieso man abbrechen darf und wann man abbrechen sollte, um vernünftige Ergebnisse zu bekommen. Als erstes zeigt man dazu, daß die Reihenentwicklung für cos(x) für alle x konvergiert und, daß sie tatsächlich gegen cos(x) konvergiert (... hier alles eher Quark, da man den Cosinus oft über die Reihenentwicklung *definiert*), dann schätzt man für die Taylorreihe das Restglied, also den Fehler zwischen Originalfunktion und der abgebrochener Reihe, ab und hat eigentlich alle Informationen, die man braucht.



  • also, wie ich das jetzt verstanden habe, schlägst du vor, die taylorreihe einfach irgendwo abzuhacken (okay, für kleine x muss man wirklich nicht bis hunderterpotenzen rechnen, um was vernünftiges rauszubekommen) und dann wiederum mit iterativen näherungsverfahren (newtonverfahren oder sowas in der art) die nullstelle von dieser funktion zu bestimmen.
    In der tat, dies wäre wahrscheinlich schneller, als mit meinem geometrischen ansatz mit zwei wurzeln pro iteration. 👍
    okay, hast gewonnen^^ 😃



  • 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 👍


Anmelden zum Antworten