PI_Algorithmus
-
Moin,
kennt ihr einen (möglichst schnellen) Algorithmus um PI auszurechnen???thx
Glamdring
-
const long double pi = 3.1415926535897932384626433832795029L; // :D
Achso, du meinst auf beliebig viele Stellen? Sag das doch.
-
Joa, ich meine auf beliebig viele stellen
Ich kenne drei Algorithmen, von denen ich zwei programmiert habe.
Beim einen kam 2,nochwas raus, beim anderen 10001. Hier meine Implementierungen (zugegeben nicht besonders sauber ):long double PI(__int64 n) { /* // Algorithmus von Euler long double erg = 0; for(__int64 i=1; i<=n; ++i) { erg += 1/(i*i); } erg *= 6; erg = sqrt(erg); return erg; */ // Algorithmus von Leibniz long double erg = 0; __int64 i = 1; while (i < n) { erg += 1/i; i += 2; erg -= 1/i; i += 2; } return i; }
Wenn ich eine der Funktiopnen dann mit 10000 aufrufe kommen beim ersten 2 Komma nochwas und beim zweiten 10001 raus.
Der dritte Algorithmus den ich kenne ist der von Vieta, den konnte ich aber bisher nicht umsetzen.
mfg
Glamdring
-
zur leibnitz gibts da noch mehr:
pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 -... oder
pi^2 / 6 = 1/1^2 + 1/2^2 + 1/3^2 + 1/4^2 ... oder
pi^2 / 8 = 1/1^2 + 1/3^2 + 1/5^2 + 1/7^2 ...EDIT:
das Wallisische Produkt gibts auch:
pi/2 = 2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7...
-
Glamdrink schrieb:
Joa, ich meine auf beliebig viele stellen
Dann sind deine Ansätze aber allesamt zum Scheitern verurteilt, long double hat eben nur begrenzte Stellen.
-
Is mir schon bewusst, aber leider komm ich ja nichtmal auf drei, also brauche ich noch keine größeren Datentypen (kennt jemand geeignete Klassen? MTL?).
Außerdem habe ich den zweiten Algorithmus falsch geschrieben (sonst käm ja ungefähr 3 raus).mfg
Glamdring