[C] Pi berechnen

Azi

Erfahrenes Mitglied
Soweit ich weiß läuft Dev-C++ damit, welches ich benutze. Und wie kann ich jetzt CLN installieren?
 

Azi

Erfahrenes Mitglied
Ich glaub, bei mir läuft nichts, Dev-C++ nutzt irgendeinen Teil vo MinGW. Gut, ich installier es mal. Muss ich denn jetzt alle Pakete herunterladen? Wäre recht aufwendig, es dürften 100 sein...
 
Steht doch alles auf der Download-Seite:

http://www.mingw.org/download.shtml#hdr8 hat gesagt.:
MSYS is a self contained, win32 style installation package. To install it, simply download the MSYS .exe file and then execute the file. Once you've executed the installation package accept the License, look at the changes, choose the install directory, select if you want icons, etc. and when you are done you should have a working MSYS environment to execute your configure scripts in. If you need autoconf, automake, libtool, cvs, etc. you will want to also install the msysDTK package. Similar to MSYS, the download is an installation binary. It will default the directory location to your MSYS installation assuming that you've installed MSYS which you need to do anyway as the package is dependent on it.
 

Azi

Erfahrenes Mitglied
Nach 3,5 Stunden hab ich die Installation abgebrochen, das hat einfach zu lange gedauert. Ich hab schließlich noch andere Dinge zu tun.

Gibt es vielleicht noch eine andere Möglichkeit?

Ich hab mal gelesen, dass man auch Strings benutzen kann. Wie soll das gehen? Wenn das wirklich so ist, dann wäre es nett, wenn man mir es am Besipiel 10/3 zeigt.
 

deepthroat

Erfahrenes Mitglied
Hi.
Azi hat gesagt.:
Nach 3,5 Stunden hab ich die Installation abgebrochen, das hat einfach zu lange gedauert. Ich hab schließlich noch andere Dinge zu tun.
Was hast du da gemacht? MSYS zu installieren dauert doch max. 'ne Minute?! :confused:
Azi hat gesagt.:
Ich hab mal gelesen, dass man auch Strings benutzen kann. Wie soll das gehen? Wenn das wirklich so ist, dann wäre es nett, wenn man mir es am Besipiel 10/3 zeigt.
Das geht indem du Arithmetische Operationen auf für Strings implementierst. Z.B. eine Addition könntest du ja wie in der Schule durchführen (schriftliche Addition), die Multiplikation könntest du auf die Addition zurückführen (ist aber natürlich sehr langsam). Usw.

Gruß
 

Azi

Erfahrenes Mitglied
deepthroat hat gesagt.:
Hi.Was hast du da gemacht? MSYS zu installieren dauert doch max. 'ne Minute?! :confused:
Das kompilieren vom CLN hat solange gedauert...
deepthroat hat gesagt.:
Das geht indem du Arithmetische Operationen auf für Strings implementierst. Z.B. eine Addition könntest du ja wie in der Schule durchführen (schriftliche Addition), die Multiplikation könntest du auf die Addition zurückführen (ist aber natürlich sehr langsam).
Langsam ist nicht so gut, erst recht nicht, wenn man 1000000 Stellen von Pi ausrechnen möchte...

Edit: Bei der Suche nach Algorithmen zur Berechnung von Pi sah ich oft ein E, wie hier:
http://www.uni-leipzig.de/~sma/pi_einfuehrung/ausblickpics/gesch15sw.gif
kann mir das vielleicht mal jemand erklären? Unser Mathelehrer ist derzeit krank...
 
Zuletzt bearbeitet:

TimN

Erfahrenes Mitglied
Zu dem "E" auf dem Bild:
wenn ich mich nicht täusche, ist das ein Summenzeichen (oder wie auch immer man das nennt)
Das "funktioniert" so:
Du rehnest den Term hinter dem E aus, wobei du n=0 setzt. Dann rechnest du das gleiche für n=1 aus. Jetzt die beiden Zahlen addieren. Dann für n=4, n=5, ..... (bis unendlich^^ das steht über dem Zeichen...)



PS: korrigiert mich, falls ich mich täusche...
 

deepthroat

Erfahrenes Mitglied
Naja, das E ist aber natürlich kein E sondern ein großes, griechisches Sigma bzw. S.

Azi hat gesagt.:
Langsam ist nicht so gut, erst recht nicht, wenn man 1000000 Stellen von Pi ausrechnen möchte...
Kommt drauf an, wie oft du das machen möchtest - wenn es nur ein paar Mal gebraucht wird (oder sogar nur einmal) würde das immer noch ausreichen.

Gruß
 

Azi

Erfahrenes Mitglied
Ganz so selten wird es nicht gebraucht, bei meinem jetzigen Code mehrere Millionen male. Aber ich kann ja sowieso nicht alle Stellen ausrechnen, das Problem liegt ja an der mangelnden Anzahl der Stellen. Meine jetzige Methode ist übrigens etwa 50 mal schneller als die im ersten Thread, aber das nur mal so nebenbei. Das ist auch nichts besonderes, die oben war nur besonders langsam :). Ich zeigs euch mal:
C:
/*
  2
pi    1      1
__  = __  +  __
       2       2
6     1      2     ...

*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main(int argc, char** argv)
{
if(argc == 2){
              int i=atoi(argv[1]);
              double counter;
              double Zeit1=clock();
              double pi=0;
              printf("\nEs wird gerechnet");
              for(counter=1;counter<=i;counter++)
              {
               pi=pi+1/pow(counter,2);
              }
              pi=pi*6;
              pi=sqrt(pi);
              double Zeit2=clock();
              double Zeit3=(Zeit2-Zeit1)/CLOCKS_PER_SEC;
              double BM=Zeit3*86400/i;
              printf("\n\n\n%1.3f Sekunden bei %d Rechenschritten",Zeit3,i);
              printf("\Faktor ist %1.16f",BM);
              printf("\n\n\n\tPi ist %1.16f\n\n\n",pi);
              }         
else{
     printf("pi [Genauigkeit]");
     }
return 0;
}
In Zeile 31 steht "\ n A z i F a k t o r", (ohne Leerzeichen) aber den Teil " n A z i" (ohne Leerzeichen) streicht der aus irgend einem Grunde...

Und mal der Geschwindigkeitsvergleich:

Version 1:
Code:
12247.343 Sekunden bei 1410065408 Rechenschritten
AziFaktor ist 0.7504406740258109


       Pi ist 3.1415926528785243

Version 2:
Code:
226.125 Sekunden bei 1410065408 Rechenschritten
AziFaktor ist 0.0138555274735170


        Pi ist 3.1415926449781995

Hoffentlich gibt es eine andere Methode als das CLN...