Pi ist falsch
Eine gebräuchliche Methode zur Berechnung des Pi ist das Werfen von "Darts" in eine 1x1-Box und das Ermitteln des Bodens im Einheitskreis im Vergleich zur geworfenen Summe:
loop
x = rand()
y = rand()
if(sqrt(x*x + y*y) <= 1) n++
t++
pi = 4.0*(n/t)
Schreiben Sie ein Programm, das so aussieht, als ob es pi korrekt berechnen sollte (unter Verwendung dieser oder anderer gebräuchlicher Methoden zur Berechnung von pi), aber stattdessen tau (tau = 2 * pi = 6.283185307179586 ...) berechnet . Ihr Code muss mindestens die ersten 6 Dezimalstellen enthalten: 6.283185
Der Gewinner wird am 6. Juni gekrönt (eine Woche ab heute).
popularity-contest
underhanded
pi
Kyle Kanos
quelle
quelle
1
aber zurückkehrt2
. Wen täuschen wir hier?Antworten:
JavaScript
Hilfe, ich bin in einer Universumsfabrik gefangen und nicht sicher, was ich tue.
Math.atan2
soll pi mit guten werten zurückgeben, oder?Math.atan2(0, -0)
Gibt pi zurück. Wenn ich es also subtrahiere und addiere, sollte ich immer noch pi haben.quelle
π - (-π)
>>> 0 === -0 ;true ;>>> Math.atan2(0, 0) ;0 ;>>> Math.atan2(0, -0) ;3.141592653589793
BASIC
(Genauer gesagt Chipmunk Basic )
Dies verwendet eine unendliche Reihe , die Nilakantha Somayaji im 15. Jahrhundert entdeckt hat:
Ausgabe
Wenn Sie nicht herausfinden können, was los ist, hier ein paar Tipps:
und
quelle
i
gleichfalse
? Und dann fügst du noch hinzu2
? Und es funktioniert???i == false
denen ähnlich isti == 0
. Der Punkt ist, dass der Anfangswert für den Akkupi
nicht 0 ist…false + 2 == 2
: Dbool
Typ fehlt , und verwenden0
und ungleich Null, um diesen darzustellenfalse
und zutrue
ändern. Nicht, dass es elegant wäre, aber so funktioniert es.C - Die Länge eines halben Einheitskreises
Eine Möglichkeit, π zu berechnen, besteht darin, einfach die Entfernung zu messen, auf die sich der Punkt
(1, 0)
bewegt, wenn er um den Ursprung herum gedreht wird ,(-1, 0)
da dies die Hälfte des Umfangs eines Einheitskreises ( 2π ) ist.Es ist jedoch kein
sin(x)
odercos(x)
erforderlich, da dies durchgeführt werden kann, indem der Ursprung vollständig umrundet und die Entfernung addiert wird, die der Punkt für jeden Schritt zurücklegt . Je kleiner die Größe für jeden Schritt ist, desto genauer ist π .Hinweis: Die Schrittfolge endet, wenn y unter Null liegt (was genau so ist, wie es passiert
(-1, 0)
).Es gibt die folgende Ausgabe:
quelle
length
Makro fehlt ein sqrt. Ist das beabsichtigt?x
undy
sind auch zwischen der Definition und Anruf (ohne Wirkung) getauschtsqrt
wurde versehentlich weggelassen, so dass der Wert von pi als 6,28 gedruckt wurde ... Auch +1 für das Bemerkenx
undy
was ich nicht tat!C
(Dies endete länger als beabsichtigt, aber ich werde es trotzdem posten ...)
Im 17. Jahrhundert veröffentlichte Wallis eine unendliche Reihe für Pi:
(Weitere Informationen finden Sie unter Neue Infinite-Produkte vom Typ Wallis und Katalanisch für π, e und √ (2 + √2). )
Um nun Pi zu berechnen, müssen wir zuerst mit zwei multiplizieren, um den Nenner herauszurechnen:
Meine Lösung berechnet dann die unendlichen Reihen für Pi / 2 und zwei und multipliziert dann die beiden Werte miteinander. Beachten Sie, dass unendliche Produkte bei der Berechnung der Endwerte unglaublich langsam konvergieren.
Ausgabe:
quelle
Java - Nilakantha-Serie
Die Nilakantha-Serie ist gegeben als:
Für jeden Term wird der Nenner also durch Multiplikation aufeinanderfolgender ganzer Zahlen gebildet, wobei der Anfang für jeden Term um 2 steigt. Beachten Sie, dass Sie abwechselnde Terme hinzufügen / subtrahieren.
Nach fünfhundert Begriffen erhalten wir eine vernünftige Schätzung von pi:
quelle
C ++: Madhava von Sangamagrama
Diese unendliche Reihe heißt jetzt Madhava-Leibniz :
Beginnen Sie mit der Quadratwurzel von 48 und multiplizieren Sie sie mit dem Ergebnis der Summe von (-3) -k / (2k + 1). Sehr einfach und einfach zu implementieren:
Ausgabe:
quelle
Python - Eine Alternative zur Nilakantha-Serie
Dies ist eine weitere unendliche Reihe zur Berechnung des Pi, die ziemlich einfach zu verstehen ist.
Nehmen Sie für diese Formel 6 und beginnen Sie, abwechselnd Brüche mit Zählern von 2 und Nennern zu addieren und zu subtrahieren, die das Produkt zweier aufeinanderfolgender ganzer Zahlen und ihrer Summe sind. Jede nachfolgende Fraktion beginnt mit einem Anstieg der Ganzzahlensätze um 1. Wenn Sie dies einige Male durchführen, nähern sich die Ergebnisse ziemlich dem pi-Wert.
was 6,283185 ergibt.
quelle
Math.h:
Ausgabe: 6.28
#include "Math.h" ist nicht dasselbe wie #include, aber wenn man sich nur die Hauptdatei ansieht, denkt fast niemand, dass man das überprüfen könnte. Vielleicht offensichtlich, aber ein ähnliches Problem tauchte in einem Projekt auf, an dem ich arbeitete, und blieb lange Zeit unentdeckt.
quelle