Pi mit Perl und C auf beliebig viele Stellen berechnen

Stefan - 24. Oktober 2011

Wohl kaum jemanden mit etwas mathematischem Interesse lässt die faszinierende Zahl Pi kalt. Ich hab mich auch oft gefragt, wie denn auf Computern diese ganzen Millionen Stellen berechnet werden und dachte, dass irgendwelche speziellen Mathe-Bibliotheken eingesetzt würden. Nach etwas Stöbern bin ich aber hier auf eine recht simple Lösung gestoßen; der dortige Pi-berechnen-Algorithmus nach Perl transferiert ergibt diesen Code:

#!/usr/bin/perl -w

use strict;
use integer;

# Anzahl der Stellen
my $num_digits = shift;

# Anzahl der zu berechnenden Terme. 14 Terme ergeben 4 Dezimalstellen, da 2**14 > 10**4
my $terms = ($num_digits / 4) * 14;
print "calculating $terms terms\n";

# Ergebnisstring
my $res = '';

my ($a, $b, $c, $d, $e, $g, @f) = (10000, 0, $terms, 0, 0, 0, (0)x($terms+1));
for (;$b-$c;) {
        $f[$b++]=$a/5;
}
for (; $d=0, $g=$c*2; $c-=14, $res .= sprintf("%.4d",$e+$d/$a), $e=$d%$a) {
        for($b=$c; $d+=$f[$b]*$a,$f[$b]=$d%--$g,$d/=$g--,--$b; $d*=$b) {
        }
}
print "$res\n";

Und so sieht ein Aufruf aus, um die ersten 50 Stellen zu berechnen:

Stefans-Macbook-Air:Pi sf$ perl pi.pl 50
calculating 168 terms
314159265358979323846264338327950288419716939937

Die Berechnung der ersten 10.000 Stellen benötigt auf meinem kleinen Macbook etwa 37 Sekunden. Das C-Programm hinter obigem Link braucht hingegen nur 2,6 Sekunden, ist also etwa 14-mal schneller. Number-Crunching wird wohl nie die Domäne von Perl werden.

Weiterer Lesestoff dazu findet sich u.a. hier:
http://crd.lbl.gov/~dhbailey/
http://www.cs.uwaterloo.ca/~alopez-o/math-faq/mathtext/node12.html

Abgelegt in: IT Stuff

Schreibe einen Kommentar
benötigt
benötigt (wird nicht angezeigt)
optional

Suchen