Zum π-Tag

Auch, wenn ich weiterhin den Tag vor dem Monat schreibe und niemals einen π-Tag erleben werde, weil es weder einen 31.4. noch einen 3.14. gibt, wird der 14. März wegen der US-amerikanischen Datumsschreibweise 3/14 und wegen der weltweiten Strahlkraft der US-amerikanischen Müllkultur als »Pi-Tag« verstanden – und der »Internetgenießer« bekommt allerhand Irrelevantes über die Konstante π zu lesen.

Da möchte ich mich auch nicht länger zurückhalten. Ich habe mich gefragt, wie die Ziffern in der ersten Million Stellen von π verteilt sind. Nach einem beherzten sudo apt install pi¹ in einem Terminalfenster ist es relativ einfach, diese Frage zu beantworten. Dafür ist nach der Installation von pi noch nicht einmal Programmierarbeit erforderlich, es geht alles mit Standardtools aus der Shell heraus:

$ pi 1000000 | tr -d . | sed 's/\(.\)/\1\n/g' | sed '/^$/d' | sort | uniq -c
  99959 0
  99757 1
 100026 2
 100230 3
 100230 4
 100359 5
  99548 6
  99800 7
  99985 8
 100106 9
$ _

Ich hoffe, mit der Klärung dieser Frage, die für mich von erfreulich geringer existenzieller Bedeutung ist, den Erkenntnisfortschritt der Menschheit ein wenig vorangebracht zu haben. ;)

Und sei es nur, weil sich der oder die eine oder andere für die Shell zu interessieren beginnt…

pi 1000000 gibt die erste Million Stellen von π aus. Auf meinem sich zum Antiquitätenhändler vordrängelnden Computer braucht die Berechnung dieser Ziffern rd. dreieinhalb Sekunden; etwas zeitgemäßere Hardware wird wesentlich schneller sein.

Diese Ausgabe wird zur Eingabe von tr -d ., was einfach nur den Dezimalpunkt löscht und die reinen Ziffern ausgibt.

Diese Ausgabe wird zur Eingabe von sed mit einem zugegebenermaßen für Neulinge leicht abschreckenden regulären Ausdruck, der aber nichts weiter macht, als jedes Zeichen durch sich selbst, gefolgt von einem Newline zu ersetzen. Im Ergebnis wird jede Ziffer in einer eigenen Zeile ausgegeben.

Diese Ausgabe wird nochmal zu einer Eingabe von sed, weil am Ende eine leere Einzelzeile dadurch entsteht, dass auch an die letzte Ziffer ein Newline angefügt wurde. Diese leere Zeile wird gelöscht.

Diese Ausgabe wird zur Eingabe von sort und wird in aufsteigender Reihenfolge sortiert wieder ausgegeben.

Und diese Ausgabe wird schließlich zur Eingabe für uniq -c. So werden aufeinanderfolgende Vorkommen der gleichen Zeile gezählt. So landet ein Ergebnis im Terminalemulator. ;)

Man kann durchaus einige hundert Dezimalstellen von π auswendig lernen, und es gibt erstaunlich viele Menschen, die einen solchen Zeitvertreib für eine so gute Idee halten, dass sie einen Teil ihrer begrenzten Lebenszeit mit dieser wenig geistfördernden Anstrengung verleben. Ich halte es allerdings für eine viel bessere Idee, sich mit den rd. dreißig elementaren Tools vertraut zu machen, die man mit jedem richtigen Betrübssystem² zur Verfügung hat – und natürlich mit der Shell, die aus diesen Tools mit dem leicht verständlichen Konzept der pipe (und der Ein-Ausgabeumleitung) ein mächtiges Baukastensystem macht, das einem erstaunlich oft richtige Programmierung erspart. Im Gegensatz zu einer für Alltagsanwendungen überpräzisen Memorierung einer Ziffernfolge kann man mit diesem Wissen oft erstaunlich viel anfangen, und nicht alles ist so sinnlos wie dieses Beispiel. ;)

Und wenn man wirklich einmal sehr viele Stellen von π benötigt, ist ein Programm zur effizienten Berechnung (wie pi) schnell installiert. Alternativ kann man natürlich auch die allwissende Müllhalde befragen.

¹So installiert man bei debianoiden Linuxen.

²Inzwischen sogar für Microsoft Windows von Microsoft selbst geliefert… das ich das noch einmal erleben durfte! Cygwin ist eine ältere Möglichkeit.

Ich mag es so sehr, da muss ich gleich mal zum Facebook klicken...

Dieser Beitrag wurde unter Allgemeines abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Ein Kommentar zu Zum π-Tag

  1. benediktg sagt:

    > Nach einem beherzten sudo apt install pi¹ in einem Terminalfenster

    → bei openSUSE:
    sudo zypper in cln
    (zumindest sagt ›rpm -qf /usr/bin/pi‹, dass pi aus dem Paket cln kommt, und statt ›zypper in‹ geht auch ›zypper install‹)

    ;)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.