π (Kreiszahl)/Nichtnumerische Berechnungsverfahren

Diese Berechnung nutzt den Zusammenhang aus, dass in der Flächenformel des Kreises enthalten ist, dagegen nicht in der Flächenformel des umschreibenden Quadrats.
Die Formel für den Flächeninhalt des Kreises mit Radius lautet
- ,
der Flächeninhalt des Quadrates mit Seitenlänge errechnet sich als
- .
Für das Verhältnis der Flächeninhalte eines Kreises und seines umschreibenden Quadrats ergibt sich also
- .
Damit lässt sich als das Vierfache dieses Verhältnisses schreiben:
- .

Als Beispiel ist ein Algorithmus angegeben, in dem die Flächenformel demonstriert wird, mit der näherungsweise berechnet werden kann.
Man legt dazu über das Quadrat ein Gitter und berechnet für jeden einzelnen Gitterpunkt, ob er auch im Kreis liegt. Das Verhältnis der Gitterpunkte innerhalb des Kreises zu den Gitterpunkten innerhalb des Quadrats wird mit 4 multipliziert. Die Genauigkeit der damit gewonnenen Näherung von hängt von der Gitterweite ab und wird mittels kontrolliert. Mit erhält man z. B. 3,16 und mit bereits 3,1428. Für das Ergebnis 3,14159 ist allerdings schon zu setzen, was sich durch den zweidimensionalen Lösungsansatz auf die Zahl der notwendigen Rechenvorgänge in quadratischer Form niederschlägt.
// Ergibt für r = 10: 3.1_6 (genauer Wert 3.1_415926535...)
// Ergibt für x = 1000: 3.141_676 (genauer Wert 3.141_5926535...)
// Ergibt für x = 100000: 3.1415926_932 (genauer Wert 3.1415926_535...)
function approximiere_pi(r)
quadrat := r^2
innerhalb := 0
for x := 0 to r-1 do
for y := 0 to r-1 do
if (x+0.5)^2 + (y+0.5)^2 <= quadrat then
innerhalb++
return 4.0 * innerhalb / quadrat

Dieses Programm summiert die Fläche des Kreises aus im Verhältnis zum Radius sehr schmalen Streifen. Es verwendet die Gleichungen
und sowie .
// Ergibt für n = 100: 3.14_0417031779046 (genauer Wert 3.14_15926535...)
// Ergibt für n = 1000000: 3.14159265_2413558 (genauer Wert 3.14159265_35...)
n := 1000000 // halbe Anzahl der Streifen
s := 0 // Summe der Flächeninhalte
for x := -1 to +1 step 1/n:
// Flächeninhalt des Streifens an der Stelle x hinzuaddieren.
// Die Höhe des Streifens wird exakt in der Mitte des Streifens gemessen.
s += sqrt(1 - x*x)
// Die 2 steht für die obere plus die untere Hälfte, die 1/n ist die Breite des Streifens.
pi := s * 2 / n
Die x-Koordinaten der untersuchten Fläche gehen von bis .
Da Kreise rund sind und dieser Kreis sein Zentrum auf den Koordinaten hat, liegen die y-Koordinaten ebenfalls im Bereich von bis .
Das Programm teilt die zu untersuchende Fläche in 2 Millionen schmale Streifen auf.
Jeder dieser Streifen hat dieselbe Breite, nämlich .
Die Oberkante eines jeden Streifens ist jedoch unterschiedlich und ergibt sich aus der obigen Formel zu , im Code wird das als sqrt(1 - x*x) geschrieben.
Die Höhe eines jeden Streifens geht von der Oberkante bis zur Unterkante. Da die beiden Kanten bei Kreisen gleich weit von der Mittellinie entfernt sind, ist die Höhe genau das Doppelte der Kantenlänge, daher die 2 im Code.
Nach dem Durchlaufen der for-Schleife befindet sich in der Variablen s der Flächeninhalt des Kreises mit Radius 1. Um aus dieser Zahl den Wert von Pi zu ermitteln, muss diese Zahl gemäß der Formel noch durch geteilt werden. In diesem Beispiel ist , daher ist das im Programmcode weggelassen.
Viermal genauer (da die Steifen besser zentriert sind) und doppelt so schnell (nun sind linke und rechte Hälfte auch noch identisch und brauchen nur einmal berechnet zu werden), aber nicht mehr der Grafik „Kreisflächen-Integration“ entsprechend, rechnet:
// Ergibt für n = 100: 3.141_9368579 (genauer Wert 3.141_5926535...)
// Ergibt für n = 1000000: 3.141592653_934 (genauer Wert 3.141592653_589...)
n := 1000000 // halbe Anzahl der Streifen
s := 0 // Summe der Flächeninhalte
for x := 0.5/n to +1 step 1/n:
// Flächeninhalt des Streifens an der Stelle x hinzuaddieren.
// Die Höhe des Streifens wird exakt in der Mitte des Streifens gemessen.
s += sqrt(1 - x*x)
// Die 4 steht für die anderen drei Quadranten, die 1/n ist die Breite des Streifens.
pi := s * 4 / n

Eine Methode zur Bestimmung von ist die statistische Methode. Für die Berechnung lässt man zufällige Punkte auf ein Quadrat „regnen“ und berechnet, ob sie innerhalb oder außerhalb eines einbeschriebenen Kreises liegen. Der Anteil der innen liegenden Punkte ist approximiert .
Diese Methode ist ein Monte-Carlo-Algorithmus; die Genauigkeit der nach einer festen Schrittzahl erreichten Näherung von lässt sich daher nur mit einer Irrtumswahrscheinlichkeit angeben. Durch das Gesetz der großen Zahlen steigt jedoch im Mittel die Genauigkeit mit der Schrittzahl.
Der Algorithmus für diese Bestimmung ist:
// Ergibt für tropfenzahl = 100: 3._32 (genauer Wert 3._1415926535...)
// Ergibt für tropfenzahl = 1000000: 3.141_104 (genauer Wert 3.141_5926535...)
// Ergibt für tropfenzahl = 10000000000: 3.1415_884288 (genauer Wert 3.1415_926535...)
function approximiere_pi(tropfenzahl)
innerhalb := 0 // zählt die Tropfen innerhalb des Kreises
for i := 1 to tropfenzahl do // so oft wiederholen, wie es Tropfen gibt
x := random(0.0 ..< 1.0) // zufälligen Tropfen im Quadrat [0,0] bis (1,1) erzeugen
y := random(0.0 ..< 1.0)
if x^2 + y^2 <= 1.0 then // wenn der Tropfen innerhalb des Kreises liegt …
innerhalb++ // Zähler erhöhen
return 4.0 * innerhalb / tropfenzahl
Die 4.0 im Code ergibt sich daraus, dass in der Tröpfchensimulation nur die Anzahl für einen Viertelkreis berechnet wurde.
Um daraus die (hochgerechnete) Anzahl für einen ganzen Kreis zu bekommen, muss die berechnete Anzahl noch mit 4 multipliziert werden.
Da die Zahl Pi das Verhältnis zwischen der Kreisfläche und dem Quadrat des Radius ist, muss die so erhaltene Zahl noch durch das Quadrat des Radius geteilt werden. Der Radius ist in diesem Fall 1, daher kann das Teilen weggelassen werden.

Eine weitere auf Wahrscheinlichkeiten beruhende und ungewöhnliche Methode ist das Buffonsche Nadelproblem, von Georges-Louis Leclerc de Buffon (1733 vorgetragen, 1777 veröffentlicht). Buffon warf Stöcke über die Schulter auf einen gekachelten Fußboden. Anschließend zählte er, wie oft sie die Fugen trafen. Eine praktikablere Variante beschrieb Jakow Perelman im Buch Unterhaltsame Geometrie. Man nehme eine ca. 2 cm lange Nadel – oder einen anderen Metallstift mit ähnlicher Länge und Durchmesser, am besten ohne Spitze – und zeichne auf ein Blatt Papier eine Reihe dünner paralleler Striche, die um die doppelte Länge der Nadel voneinander entfernt sind. Dann lässt man die Nadel sehr häufig (mehrere hundert- oder tausendmal) aus einer beliebigen, aber konstanten Höhe auf das Blatt fallen und notiert, ob die Nadel eine Linie schneidet oder nicht. Es kommt nicht darauf an, wie man das Berühren eines Striches durch ein Nadelende zählt. Die Division der Gesamtzahl der Nadelwürfe durch die Zahl der Fälle, in denen die Nadel eine Linie geschnitten hat, nähert sich (stochastisch) mit zunehmender Zahl der Würfe an die Formel
an, wobei die Länge der Nadeln und den Abstand der Linien auf dem Papier bezeichnet. Daraus ergibt sich leicht eine Näherung für .[1] Die Nadel kann dabei auch gebogen oder mehrfach geknickt sein, wobei in diesem Fall auch mehr als ein Schnittpunkt pro Wurf möglich ist und entsprechend mehrfach gezählt werden muss. In der Mitte des 19. Jahrhunderts kam der Schweizer Astronom Rudolf Wolf durch 5000 Nadelwürfe auf einen Wert von .[2] Das Verfahren hat als analoges Verfahren (schneidet die Nadel die Linie?) ein Genauigkeitsproblem durch Ablesefehler.
- ↑ Ehrhard Behrends, Peter Gritzmann, Günter M. Ziegler: und Co., Kaleidoskop der Mathematik. Springer-Verlag, Berlin/Heidelberg 2008, ISBN 978-3-540-77888-2, S. 157.
- ↑ Rudolf Wolf: Handbuch der Astronomie, ihrer Geschichte und Litteratur. F. Schulthess, Zürich 1890, Band 1, S. 128. (Digitalisat)