Berechnung der Zahl PI mit C geschlossen 

  • Ersteller Ersteller Freelancers
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
F

Freelancers

Bin gerade dabei C zu lernen und als Aufgabe ist es die Zahl PI möglichst genau zu berechnen mit wenig Code.
So habe schon gegoogle und habe diverse Lösung gefunden, leider aber ziemlich kommentarlos. (d.h. verstehe den Code überhaupt nicht)

Z.B soll dieser Code PI bis zu 800 Stellen genau berechnen
/********************************************
int a=10000,b,c=2800,d,e,f[2801],g;
main()
{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*a,f=d%--g,d/=g--,--b;d*=b);
}
/*******************************************

Bei mir unter Visual C++ macht er Fehler, bei mein Kumpel mit Eclipse funktioniert er. Kann jemand mir erklären was der Code überhaupt tut?

Bin offen gegenüber alternativ Vorschläge zur Berechnung von Pi.
 
Falsche Herangehensweise.
Du bist dabei C zu lernen.
Also mach das auch. :-)
Google lieber nach mathematische Algorithmen zur Berechnung von PI.
Und wenn du da was gefunden hast, programmierst du das in C.
Und dann denkst du drüber nach wie man das vielleicht kürzer machen könnte
und wo man was "verbessern" könnte.
Denn dieser Code so wie er da ist, ist reiner Müll.
Kategorie: Funstyle.
Motto: Guckt mal was ich kann.
Nutzen: 0
:-)

P.S.:
Achja ganz vergessen. Der Code berechnet PI, falls dir das was hilft. LoL
 
Falsche Herangehensweise.
Du bist dabei C zu lernen.
Also mach das auch. :-)
Google lieber nach mathematische Algorithmen zur Berechnung von PI.
Und wenn du da was gefunden hast, programmierst du das in C.
Und dann denkst du drüber nach wie man das vielleicht kürzer machen könnte
und wo man was "verbessern" könnte.
Denn dieser Code so wie er da ist, ist reiner Müll.
Kategorie: Funstyle.
Motto: Guckt mal was ich kann.
Nutzen: 0
:-)

P.S.:
Achja ganz vergessen. Der Code berechnet PI, falls dir das was hilft. LoL

hi,
also ich muss mich stelzi anschliessen... zum lernen von c bringt es echt nix quellcode zu kopieren. so lernt man nicht zu programmieren. vorallem ist c eine recht "kontraintuitive" sprache. probiere es lieber selber, denn der code ist wirklich schrott... ohne kommentare und nix.... der programmierstil ist auch wirklich schlecht. so wird selbst in softwarefirmen nicht gearbeitet. falls du probleme mit c hast immer her damit. als kleinen tip:

Galileo Computing :: C von A bis Z

schau dir mal das openbook an. ist kostenlos und eigentlich gut fuer anfaenger geeignet.

so long

norf
 
Hallo,

einen code mit dieser "einrückung" bin ich nicht gewillt zu analysieren ... -> debuggen :-)

cul8r

Peter


int a= 10000,
b,
c= 2800,
d,
e,
f[2801],
g;

main() {
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 * a, f= d % --g, d/= g--, --b; d*= b);
}

PPS: for (i= 0; i < 10 ; i++) {foo}

/*Diese Schleife würde von 0 bis 9 foo auswerten*/

tip: schau dir mal operatoren und deren auswertungsreihenfolge an!
tip2: da du diesen code nicht verstehst solltest du mit etwas anderem anfangen ,-)
PPPS: es gibt nicht ohne grund doku-richtlinien :-)
PPPPS: meine einrückung ist auch nicht wirklich optimal ;-)


... alleine schon, daß es ordentlich und ansi konform wäre folgendes hp zu deklarieren:

int main (void) {
...
return 0;
}

cul8r Peter
 
nimm diesen Code hier:

Code:
#include 
#include 
#include 

using namespace std;

// die Konstanten LDBL_EPSILON und LDBL_DIG sind aus cfloat
// und geben die kleinste darstellbare Zahl und die Anzahl
// von Dezimalstellen von "long double" an.

// Algorithmus aus:
// "Handbook of Algorithms and Data Structures" G.H.Gonnet

long double pi()
{
const long double epsilon = LDBL_EPSILON * 5;
long double a, b, t, x, tempa;

a = 1;
b = sqrt(0.5);
t = 0.25;
x = 1;
while ((a - b) > epsilon) {
tempa = a;
a = (a + b) / 2;
b = sqrt(tempa * b);
t = t - x * pow(a - tempa, 2);
x = 2 * x;
}

return pow(a + b, 2.0) / (4 * t);
}

int main(void)
{
cout.precision(LDBL_DIG - 2); // Anzahl Nachkommastellen einstellen
cout }

Dein Code da oben ist für einen Anfänger ungeeignet und läuft so in vc++ nicht, da eine int main() immer einen Wert zurückgegen muss.

cya chicken :lego:
 
Btw, der Code ist C++ und nicht C :-D
Aber die benötigten Änderungen dürften nicht alzu gross sein, das es wieder C ist *g*
 
... hmm ... hmm ... fehlt in deinem main

int main(void)
{
cout.precision(LDBL_DIG - 2); // Anzahl Nachkommastellen einstellen
cout }

nicht etwa ein return statement ... da ja ein int zurückgegeben werden sollte ?

cul8r Peter
 
@PeterKroll: bitte unterlasse doppelposts, sonst :gelb:!

thx && ceeyaa.mex
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

S
Antworten
1
Aufrufe
6K
K
  • Gesperrt
  • geschlossen 
Antworten
3
Aufrufe
811
L
Antworten
8
Aufrufe
3K
Antworten
1
Aufrufe
1K
McKilroy
M
Zurück
Oben Unten