www.mikrocontroller.net

Forum: Offtopic Algorithmus Pi-Berechnung


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte für Testzwecke ein Scripte oder ein kleines C-Programm 
schreiben, das auf einem Server ausgeführt werden kann und Pi berechnen 
kann.

Ich weiß, dass es einen ganzen Haufen von Verfahren und Algorithmen 
gibt, mit denen man Näherungswerte berechnen kann.

Meint ihr es ist möglich in abmessbarer Zeit ein eigenes Verfahren zu 
entwickeln oder ein existierendes Verfahren zu verändern, das würde das 
ganze ein bisschen interessanter machen.

Danke,
Max

: Gesperrt durch Moderator
Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke du wirst wohl keine neues Verfahren erfinden, also macht es 
mehr sinn ein vorhandens zu verstehen.

Z.b. das hier (nicht auf meinen mist gewachsen)
int f[9814],b,c=9814,g,i;long a=1e4,d,e,h;
main(){for(;b=c,c-=14;i=printf("%04d",e+d/a),e=d%a)
while(g=--b*2)d=h*b+a*(i?f[ b ]:a/5),h=d/--g,f[ b ]=d%g;}

Autor: Fuzzy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein schönes Buch, das auch C-Algorithmen hat ist:

Pi,Algorithmen,Computer, Arithmetik
von Jörg Arndt und Christoph Haenel, Springer 1998.
ISBN: 3540634193

Sicher gibt es auch schon neuere Auflagen.

Gruß
MAX

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

warum kompliziert, wenn doch PI schon on Board ist:

pi=atan(1.0)*4.0;

Sinus + Cosinus sind bei 45 Grad gleich; also ist der Tangens dann 1 und 
der Arkustangens von 1 im Bogenmaß ein Viertel von PI.

zugegeben: die anderen Verfahren sind origineller

Grüsse
Franz

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike schrieb:
> http://de.wikipedia.org/wiki/Leibniz-Reihe

Eine Herausforderung für jeden Rechner. Die Konvergenz ist so mies, daß 
sie nur theoretisch vorliegt. Wer schafft, damit π auf 1000 
Nachkommastellen zu bestimmen, ist ein Gott :-)

Franz schrieb:
> pi=atan(1.0)*4.0;

Der Weg ist das Ziel. Ansonsten
  pi = M_PI;

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

Ganz nett, hatte ich mal auf nem C64 um π auf 1024 Binärstellen zu 
bestimmen. Allerdings bekommt man damit nur die Stellen im 16er-System, 
die mühsam ins Dezimalsystem umgerechnet weren müssen.

Gute Konvergenz haben auch Ramanujan-Reihen wie

Da 0-te Glied der Entwicklung approximiert π bis auf einen Fehler von 
~0.000000076.

Johann

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
355 / 113

(auf 6 Stellen genau)

Blackbird

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bäh. Wer wird denn auf Konvergenz wert legen, wenn man ein wenig Spass 
mit Algorithmen haben kann.

Hast du schon Folgendes ins Auge gefasst:

Gegeben sei ein kreisrunder Teich. An diesen Teich legst du ein Quadrat 
an. Dann nimmst du viele, viele Steine und lässt sie zufällig auf diese 
Konstruktion fallen (wobei alle Abwürfe nur innerhalb des Quadrats 
stattfinden). Du zählst, wieviele Steine du abgeworfen hast und wie oft 
es Platsch gemacht hat. Aus dem Verhältnis dieser beiden Zahlen kann man 
Pi berechnen. Je mehr Abwürfe, desto genauer wird das Ergebnis.

(Für den Computer genügt es, wenn man nur einen Viertelkreis im ersten 
Quadranten betrachtet und das umschliessende Quadrat dementsprechend 
verkleinert)


Edit: Seh gerade, dass der Thread schon himmelalt ist. Der OP wird wohl 
nicht mehr hier herumhängen.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blackbird schrieb:
> 355 / 113
>
> (auf 6 Stellen genau)

Und wie geht's weiter? Ich wüsste nicht, daß die Kettenbruchentwicklung 
von Pi inzwischen bekannt wäre ausser eben die empirisch berechneten 
Reihenglieder.

Karl heinz Buchegger schrieb:
> Hast du schon Folgendes ins Auge gefasst:
>
> Gegeben sei ein kreisrunder Teich. An diesen Teich legst du ein Quadrat
> an. Dann nimmst du viele, viele Steine und lässt sie zufällig auf diese
> Konstruktion fallen (wobei alle Abwürfe nur innerhalb des Quadrats
> stattfinden). Du zählst, wieviele Steine du abgeworfen hast und wie oft
> es Platsch gemacht hat. Aus dem Verhältnis dieser beiden Zahlen kann man
> Pi berechnen. Je mehr Abwürfe, desto genauer wird das Ergebnis.

Oder das: Nimm eine Stecknadel und lass sie auf einen Dielenboden 
fallen, dessen Planken den Abstand haben wie die Länge der Stecknadel.

Lass die Stecknadel immer wieder auf den Boden fallen und zähle, wie 
groß die Wahrscheinlichkeit ist, daß sie über einer Ritze liegt. Nimm 
den Kehrwert, multipliziere mit 2 und du hast Pi.

Johann

Autor: Alm-Öhi (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Oh Mann, Ihr habt nix besseres zu tun, als das Rad immer wieder neu zu 
erfinden...
Nehmt einfach pi=3,14159... und gut ist!

Oder wär das:
Kreisumfang = Kreisdurchmesser*3+20%
Dann ist halt pi=3,2

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alm-Öhi schrieb:
> Oh Mann, Ihr habt nix besseres zu tun, als das Rad immer wieder neu zu
> erfinden...
> Nehmt einfach pi=3,14159... und gut ist!

Darum gehts doch gar nicht :-)
In diesem Fall ist der Weg das Ziel!

Autor: Arno H. (arno_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider wurden wesentliche Vereinfachungen nicht konsequent durchgesetzt:
http://de.wikipedia.org/wiki/Indiana_Pi_Bill

Arno

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist auch noch eine schöne Beziehung mit PI (von Euler).

Das Problem ist hier die Wurzel.

avr

Autor: R. M. (exp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
https://home.comcast.net/~davejanelle/mandel.html

ist auch ganz witzig, habs mal schnell implementiert:

public class PI_Generator
{
  static long N = 10000000000L;
  static double epsilon = 0.0000001;

  //C-Werte checken nach Zn+1 = Zn^2 + C, Zo = 0
    public static long checkC(double reC,double imC)
    {
        double reZ=0,imZ=0,reZ_minus1=0,imZ_minus1=0;
        long iterationen;
        for (iterationen=0;iterationen<N;iterationen++)
        {
            imZ=2*reZ_minus1*imZ_minus1+imC;
            reZ=reZ_minus1*reZ_minus1-imZ_minus1*imZ_minus1+reC;
            if (reZ*reZ+imZ*imZ>4)
              return iterationen;
            reZ_minus1=reZ;
            imZ_minus1=imZ;
        }
        return iterationen;
    }

    public static void main(String[] args)
    {
      System.out.println(epsilon * checkC(-0.75,epsilon));
    }
}

Autor: Sid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da es ja hier grad so schön um PI geht:

Ich habe mal gelesen/gehört, dass das Verhältnis zwischen Länge und 
Luftlinienentfernung von Quelle/Mündung bei größeren Flüssen 3.14 ist. 
Kann das jemand bestätigen?


Die Methode von Karl-Heinz heisst übrigens Monte-Carlo-Algorithmus. ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sid schrieb:
> Da es ja hier grad so schön um PI geht:
>
> Ich habe mal gelesen/gehört, dass das Verhältnis zwischen Länge und
> Luftlinienentfernung von Quelle/Mündung bei größeren Flüssen 3.14 ist.
> Kann das jemand bestätigen?

Google findet vieles dazu

zb
http://www.nensch.de/story/2005/11/22/19417/736

Autor: Autor (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Also, ich hab jetz im Kopf:
3,141592653989793238462643383279
Kein Witz, soweit weiß ich Pi auswendig.
Es gibt aber Leute, die davon ein paartausend Stellen wissen.
Und wer die 3,14 ganz genau haben will,
-> http://www.aip.de/~wasi/PI/Pibel/pibel_10mio.pdf

Autor: 3.14 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei der Begriff Luftlinie auch interpretationsbedürftig ist. Die kann 
man nämlich nicht einfach auf einer Karte mit dem Lineal abmessen, weil 
es auf die Kartenprojektion, das verwendete Modell des 
Rotationselipsoids der Erde usw ankommt. Bei kurzen Strecken meist 
vernachlässigbar aber hier geht es ja um lange Flüsse.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor schrieb:
> Also, ich hab jetz im Kopf:
> 3,141592653989793238462643383279
> Kein Witz, soweit weiß ich Pi auswendig.

Nö, offenbar nicht :-)

Ich hatte als Gedächtnisübung mal e (ist einfacher zu berechnen als Pi) 
auf 300 Stellen auswendig gelernt. Ging recht flott in ca. einem Tag, 
war aber recht flüchtig. Hängen geblieben ist's nur bis
  2.71828182845904523536
(glaub ich zumindest mal)

Johann

Autor: Pi_thagoras (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnt Ihr mir nur noch bitte die LETZTE Stelle von Pi verraten. Die habe 
ich jetz nicht mehr im Kopf.  :-)

duck weg

Autor: Zausel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gerne mal wissen wie beim Kosmos CP1
(http://de.wikipedia.org/wiki/Kosmos_CP1) die Zahl PI berechnet wurde. 
Leider habe ich die Anleitung für das Speicher-Modul CP3 nicht, dort 
soll dieser Algorithmus stehen. Sorry , ich wollte diesen Thread nicht 
kapern, aber ich denke meine Frage passt ein bischen zum Thema. Oder 
soll ich einen neuen Thread aufmachen?

Autor: Autor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, Tippfehler:
3,141592653589...
statt      |
3,141592653989...

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3.1415926535897932384626433832795028841971693993751058209749445923078164 
062862\
089986280348253421170679821480865132823066470938446095505822317253594081 
284811\
174502841027019385211055596446229489549303819644288109756659334461284756 
482337\
867831652712019091456485669234603486104543266482133936072602491412737245 
870066\
063155881748815209209628292540917153643678925903600113305305488204665213 
841469\
519415116094330572703657595919530921861173819326117931051185480744623799 
627495\
673518857527248912279381830119491298336733624406566430860213949463952247 
371907\
021798609437027705392171762931767523846748184676694051320005681271452635 
608277\
857713427577896091736371787214684409012249534301465495853710507922796892 
589235\
420199561121290219608640344181598136297747713099605187072113499999983729 
780499\
510597317328160963185950244594553469083026425223082533446850352619311881 
710100\
031378387528865875332083814206171776691473035982534904287554687311595628 
638823\
537875937519577818577805321712268066130019278766111959092164201989380952 
572010\
654858632788659361533818279682303019520353018529689957736225994138912497 
217752\
834791315155748572424541506959508295331168617278558890750983817546374649 
393192\
550604009277016711390098488240128583616035637076601047101819429555961989 
467678\
374494482553797747268471040475346462080466842590694912933136770289891521 
047521\
620569660240580381501935112533824300355876402474964732639141992726042699 
227967\
823547816360093417216412199245863150302861829745557067498385054945885869 
269956\
9092721079750930296

Cheers
Detlef

Autor: Peter Müller (kapulis)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
3,141592653989793238462643383279 ist FALSCH! ich kenne den wert zwar nur 
bis 3,1415926535898 (letzte Zahl gerundet) auswendig, aber ich weiß, 
dass an der 10. Nachkommastelle also nach der "3" eine "5" steht!

Beitrag #4047637 wurde von einem Moderator gelöscht.
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Peter Müller schrieb:
> ist FALSCH!

Das schrieb Johann bereits vor 6 Jahren, für diese Weisheit hättest
du den Thread nicht ausgraben müssen, zumal nur wenig weiter oben
schon ein sehr viel genauerer Wert niedergeschrieben worden ist.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.