Pi (π) berech­nen am Welt Pi Tag mit der PowerS­hell

Heute ist der 14.03.2021, der Welt Pi Tag (Pi-​​Day).

Der Grund für die­sen Tag liegt an der eng­li­schen Schreib­weise des Datums.

Monat /​ Tag = 03/​14 = 3,14 = Pi auf 2 Stel­len gerun­det.

Das Zei­chen Pi sel­ber kann man mit der PowerS­hell als Cha­rac­ter erzeu­gen: [CHAR]960

Basie­rend auf dem Arti­kel vom Heise Newsti­cker habe ich das dort beschrie­bene Script für einen Raspberry Pico in die PowerS­hell Welt por­tiert.

Da die Kreis­zahl Pi eine irra­tio­nale Zahl ist, kann sie nicht als Bruch dar­ge­stellt wer­den und des­we­gen auch nicht berech­net wer­den. Man kann sich ihr nur durch ver­schie­dene Metho­den annä­hern.

Die hier genutzte Methode nennt sich die Monte-​​Carlo Methode. Man nimmt ein Qua­drat mit einer Kan­ten­länge von 1 und malt einen Kreis in das Qua­drat. Danach berech­net man zufäl­lige Punkte in dem Qua­drat und bestimmt, ob der Punkt im Kreis oder außer­halb vom Kreis ist.

Das Ver­hält­nis von Tref­fern in der Kreis­flä­che zu der Gesamt­zahl von Durch­läu­fen ergibt 1/​4 π.

Zuerst wür­feln wir eine x und eine y Koor­di­nate zwi­schen  0 und 1 aus.

Dafür bie­tet die PowerS­hell den Befehl Get-​​Randon, den ich vor lan­ger Zeit auch hier beschrie­ben habe. Ich nutze den maxi­ma­len Adress­raum eines INT32 Wer­tes.

$x = (Get-​​Random –Mini­mum 0 –Maxi­mum ([Int32]::MaxValue)) /​ ([Int32]::MaxValue)
$y = (Get-​​Random –Mini­mum 0 –Maxi­mum ([Int32]::MaxValue)) /​ ([Int32]::MaxValue)

Mit dem Satz des Pytha­go­ras prü­fen wir, ob die Koor­di­nate inner­halb des Krei­ses vom Qua­drat mit der Kan­ten­länge 1 besteht.

Wenn x² + y² klei­ner gleich 1 ist, dann ist die Koor­di­nate inner­halb des Krei­ses

[MATH]::pow($x,2) + [MATH]::pow($y,2)) –le 1

Jetzt muss das ganze noch als Loop lau­fen mit einer do {} until Schleife.

Die Abbruch­be­din­gung ist eine belie­bige Taste: [console]::KeyAvailable

So kann man das Script solange lau­fen las­sen, wie man möchte.

Als Aus­gabe habe ich Write-​​Progress gewählt, da die PowerS­hell nicht immer wie­der in die glei­che Zeile schrei­ben kann.

$pi = ($imkreis*4/$zaehler)
Write-​​Progress –Activity „Durch­lauf $zaeh­ler – $([char]960): $pi“

Nach 329104 Durch­läu­fen hat die Annä­he­rung an f Pi immer­hin schon auf die ers­ten 3 Nach­kom­ma­stel­len gestimmt. Ich lasse es aber noch wei­ter­lau­fen …

 

Und hier das ganze Script

Viel Spaß beim Nach­pro­gram­mie­ren und Happy Pi Day 🙂

Was den­ken Sie?