Mathematik: Ein einfaches Pi-Programm in TurboPascal
Released by matroid on Di. 25. März 2003 19:17:40 [Statistics]
Written by Hans-Juergen - 4944 x read [Outline] Printable version Printer-friendly version -  Choose language   
Mathematik

\(\begingroup\)
Ein einfaches Pi-Programm in TurboPascal5.0 für 1000 Stellen in einer Sekunde (bei 500 MHz Taktfrequenz) ist:

Es beruht auf der Darstellung

\big\pi=3+(1*1)/(8*1*3)*(3 + (3*3)/(8*2*5)*(3 + (5*5)/(8*3*7)*(3 + ...))) #(*)

Sie ähnelt einer Formel von Rabinowitz und Wagon [1],[2],[3], doch konvergiert (*) doppelt so schnell wie diese. Auch scheint (*) neu zu sein und wird weder in dem Buch [3] mit reichhaltiger Formelsammlung noch in dem 60-Seiten-PDF-Dokument[4] erwähnt.



Das Programm ist deshalb besonders einfach, weil es nur zwei Prozeduren enthält, die das schriftliche Multiplizieren und Dividieren nachahmen, und es wird nur ein Array benötigt. Weitere Einzelheiten siehe Pascal-Programme für Pi.

Zum Testen des Programms markiere man es, bringe es mit "Kopieren" in die Zwischenablage und speichere es neu unter dem Namen pi1k.txt als Text-Datei ab. Dann läßt es sich wie ein normales TurboPascal-Programm starten (jedenfalls mit TP5.0).

Literatur:
[1] Rabinowitz S. and Wagon S., A spigot algorithm for pi,
    American Mathematical Monthly 102(1995), p. 195-203
[2] http://www.jjj.de/hfloat/spigot.txt
[3] Jörg Arndt, Christoph Haenel: Pi, Springer Verlag,
    2. Aufl., 2000
[4] Gérard Sookahet: Formules et Algorithmes pour évaluer Pi,
     gersoo.free.fr/docs/docs.html


Hans-Jürgen Caspar

Trennlinie

Program pi1k;{1000 Stellen von Pi}
uses crt,dos;const n=1000;
Var i,j,k:integer;c,d,q,u,x:word;
a:array[1..n+1] of word;
procedure divi(y:word);
begin
  c:=0;
  for j:=1 to n+1 do
  begin
  x:=a[j]+c;q:=x div y;a[j]:=q;
  d:=x-y*q;c:=10*d;
  end;
end;
procedure mult(y:word);
begin
  for j:=1 to n+1 do a[j]:=y*a[j];
  for j:=n+1 downto 2 do
  begin
  u:=a[j] div 10;a[j-1]:=a[j-1]+u;
  a[j]:=a[j] mod 10;
  end;
end;
Begin
  clrscr; write(' ');
  k:=trunc(n*ln(10)/ln(4));
  for i:=k downto 1 do
  begin
  divi(8);divi(i);mult(2*i-1);divi(2*i+1);
  mult(2*i-1);a[1]:=a[1]+3;
  end;
  for i:=1 to n+1 do
  begin
  write(a[i]);
  if i=1 then write('.');
  if (i mod 6=0) then write(' ');
  if wherex=80 then write('   ');
  end;
  write('... (1000 Stellen)');
  repeat until keypressed;
End.


\(\endgroup\)
Get link to this article Get link to this article  Printable version Printer-friendly version -  Choose language     Kommentare zeigen Comments  
pdfFür diesen Artikel gibt es keine pdf-Datei


Arbeitsgruppe Alexandria Dieser Artikel ist im Verzeichnis der Arbeitsgruppe Alexandria eingetragen:
: Interessierte Studenten :: Numerik :: Informatik :: Mathematik :
Ein einfaches Pi-Programm in TurboPascal [von Hans-Juergen]  
Berechnung von Pi in TurboPascal
[Die Arbeitsgruppe Alexandria katalogisiert die Artikel auf dem Matheplaneten]

 
 
Aufrufzähler 4944
 
Aufrufstatistik des Artikels
Insgesamt 162 externe Seitenaufrufe zwischen 2012.01 und 2021.08 [Anzeigen]
DomainAnzahlProz
http://google.de12174.7%74.7 %
http://google.fr116.8%6.8 %
https://google.com95.6%5.6 %
https://google.de84.9%4.9 %
http://google.ch31.9%1.9 %
http://search.conduit.com10.6%0.6 %
http://www.searchmobileonline.com10.6%0.6 %
https://www.startpage.com10.6%0.6 %
http://www.bing.com10.6%0.6 %
http://de.search.yahoo.com10.6%0.6 %
http://nortonsafe.search.ask.com10.6%0.6 %
https://www.bing.com10.6%0.6 %
http://r.duckduckgo.com10.6%0.6 %
http://google.kz10.6%0.6 %
http://suche.web.de10.6%0.6 %

Häufige Aufrufer in früheren Monaten
Insgesamt 128 häufige Aufrufer [Anzeigen]
DatumAufrufer-URL
2012-2017 (61x)http://google.de/url?sa=t&rct=j&q=
2013-2014 (11x)http://google.fr/url?sa=t&rct=j&q=
201203-03 (10x)http://google.de/url?sa=t&rct=j&q=turbo pascal 1000 nachkommastellen
201211-11 (9x)http://google.de/url?sa=t&rct=j&q=pi berechnen programm fortran
2020-2021 (9x)https://google.com/
2020-2021 (8x)https://google.de/
201206-06 (8x)http://google.de/url?sa=t&rct=j&q=rechenprogramme für pi
201201-01 (7x)http://google.de/url?sa=t&rct=j&q=turbo pascal schriftliches dividieren
201202-02 (5x)http://google.de/url?sa=t&rct=j&q=turbo pascal einfaches programm

[Top of page]

"Mathematik: Ein einfaches Pi-Programm in TurboPascal" | 7 Comments
The authors of the comments are responsible for the content.

Re: Ein einfaches Pi-Programm in TurboPascal
von: Spock am: Do. 27. März 2003 20:28:48
\(\begingroup\)Hallo Hans-Jürgen

aus der guten alten FORTRAN-Zeit kenne ich die eigentlich sehr effektive Berechnung von Pi über die Beziehung

Pi = 4*arctan(1)

mit einer mehr oder weniger intelligenten numerischen Darstellung der arctan-Funktion.

Hast Du Deine Methode mal mit einer entsprechenden FORTRAN - Routine umgesetzt und mit der dort üblichen Berechnung über den arctan verglichen? Was ist genauer, schneller?

Gruss\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: Ex_Mitglied_40174 am: Fr. 28. März 2003 00:07:34
\(\begingroup\)Hallo Unbekannter (Du nennst nicht Deinen Namen),

die näherungsweise Berechnung von Pi über arctan 1 ist nicht sehr effektiv. Deshalb rechnete man früher viel mit Termen der Form arctan(1/m), m>1. Die von mir verwendete Formel beruht nicht auf dem Arkustangens, sondern auf dem Arkussinus und führt schneller zum Ziel als die oben genannte Formel von [1], die man sich in [2] ansehen kann. Mit FORTRAN hatte ich vor ungefähr 30 Jahren zu tun, danach nicht mehr.

Gruß,
Hans-Jürgen












\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: matroid am: Fr. 28. März 2003 00:10:54
\(\begingroup\)Hi Hans-Jürgen,

er hat schon genannt, aber aufgrund eines noch bestehenden Zufalls oder kleinen Ungenauigkeit werden anonymen Besuchern die Namen der Mitglieder nicht angezeigt.
Der erste Kommentar stammt also von Spock.

Gruß
Matroid\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: Ex_Mitglied_40174 am: Fr. 28. März 2003 14:14:31
\(\begingroup\)Danke, Matroid!

Hallo Spock, ich grüße Dich.
Hans-Jürgen\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: Ex_Mitglied_40174 am: So. 30. März 2003 17:47:13
\(\begingroup\)hat das schonmal jemand in c++ übersetzt?\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: Ex_Mitglied_40174 am: So. 30. März 2003 23:30:08
\(\begingroup\)Noe!

Aber mein Pascal 2 Java compiler hat es geschluckt, und braucht dann fuer die Ausfuaehrung 2 Sekunden auf einen PowerMac G4 mit 400 Mhz und HotSpot VM von Java 1.3
(und O(n) ist n^2, was nicht sehr schoen ist :-(

Marco!
\(\endgroup\)
 

Re: Ein einfaches Pi-Programm in TurboPascal
von: Delastelle am: Mi. 07. Oktober 2009 17:34:34
\(\begingroup\)Hallo Hans-Jürgen! Ich habe das Programm mal in Fortran umgesetzt. \sourceon Fortran program Pi c ************************************************** c Pi-Programm von Hans-Juergen c n = 1000 -> 0.42 Sek (Salford FTN95 auf AMD 2000+) c n = 2000 -> 1.59 Sek (Salford FTN95 auf AMD 2000+) c n = 4000 -> 6.28 Sek (Salford FTN95 auf AMD 2000+) c ************************************************** implicit none parameter (n = 2000) integer a(n+1),i,k,n real t0,t1 call cpu_time(t0) k = n*log(10.0d0)/log(4.0d0) do 100 i = 1,n+1 a(i) = 0 100 continue do 200 i = k,1,-1 call divi(8,a,n) call divi(i,a,n) call mult(2*i-1,a,n) call divi(2*i+1,a,n) call mult(2*i-1,a,n) a(1) = a(1)+3 200 continue c Ausgabe write (*,400) a(1:70) do 300 i = 71,n-70,70 write (*,500) a(i:i+69) 300 continue call cpu_time(t1) print *,'Zeit ',t1 400 format(1X,1I1,'.',9I1,' ',10I1,' ',10I1,' ',10I1,' ',10I1,' ', * 10I1,' ',10I1) 500 format(2X,10I1,' ',10I1,' ',10I1,' ',10I1,' ',10I1,' ',10I1, * ' ',10I1) end c *************** c Division c *************** subroutine divi(y,a,n) implicit none integer a(n+1),j,n,c,x,q,y,d c = 0 do 1000 j = 1,n+1 x = a(j)+c q = x/y a(j) = q d = x-y*q c = 10*d 1000 continue end c *************** c Multiplikation c *************** subroutine mult(y,a,n) implicit none integer a(n+1),j,n,y,u do 2000 j = 1,n+1 a(j) = y*a(j) 2000 continue do 2100 j = n+1,2,-1 u = a(j) / 10 a(j-1) = a(j-1) + u a(j) = mod(a(j),10) 2100 continue end \sourceoff Viele Grüße Ronald\(\endgroup\)
 

 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]