Die Herausforderung
Sie müssen pi in der kürzesten Länge berechnen, die Sie können. Jede Sprache kann teilnehmen und Sie können jede Formel verwenden, um pi zu berechnen. Es muss in der Lage sein, pi mit mindestens 5 Dezimalstellen zu berechnen. Kürzeste, würde in Zeichen gemessen. Der Wettbewerb dauert 48 Stunden. Start.
Hinweis : Diese ähnliche Frage besagt, dass PI unter Verwendung der Reihe 4 * (1 - 1/3 + 1/5 - 1/7 +…) berechnet werden muss. Diese Frage unterliegt nicht dieser Einschränkung, und in der Tat wären viele Antworten hier (einschließlich der wahrscheinlichsten zu gewinnen) in dieser anderen Frage ungültig. Das ist also kein Duplikat.
code-golf
pi
approximation
Poseidon
quelle
quelle
Antworten:
Python3, 7
Läuft in der interaktiven Shell
Ausgabe: Auf
3.1415929203539825
6 Nachkommastellen korrigierenUnd schließlich habe ich eine Lösung, die APL schlägt!
Oh, und für den Fall, dass Sie sich fragen, wird dieses Verhältnis als 密 密 (wörtlich "genaues Verhältnis") bezeichnet und vom chinesischen Mathematiker Zu Chongzhi (429-500 n. Chr.) Vorgeschlagen. Einen verwandten Wikipedia-Artikel finden Sie hier . Zu gab das Verhältnis 22/7 auch als "grobes Verhältnis" an, und er ist bekanntermaßen der erste Mathematiker, der 3.1415926 <= pi <= 3.1415927 vorschlägt
quelle
355/113
. Der niedrigste gestimmt Antwort:3+.14159
. Ich sehe eigentlich keinen großen Unterschied.PHP -
132127125124 BytesGrundlegende Monte-Carlo-Simulation. Alle 10 Millionen Iterationen wird der aktuelle Status ausgegeben:
Danke an cloudfeet und zamnuts für Vorschläge!
Beispielausgabe:
quelle
$j+=$x*$x+$y*$y<=1;
würde Ihnen vier Bytes sparen.$k+=1/4;
undprint $j/$k
könnte auf$k++;
undprint 4*$j/$k
für ein anderes Byte reduziert werden .J 6
Erklärung:
*.
Gibt die Länge und den Winkel einer komplexen Zahl an. Der Winkel von -1 ist pi.{:
Nimmt das Ende der Liste [Länge, Winkel]Nur für die langsam konvergierenden Serien-Fettishisten, für 21 Bytes, eine Leibniz-Serie:
quelle
atan(0) + pi
. Ich denke nicht, dass die Verwendung von trigonometrischen Funktionen und pi selbst als "Berechnung" gelten sollte.Arg
( dh das Argument einer komplexen Zahl) ist keine trigonometrische Funktion, obwohl die Werte denen vonatan(0) + pi
.Perl, 42 Bytes
Es berechnet π mit der Leibniz-Formel :
999999 wird als größtes n verwendet , um die Genauigkeit von fünf Dezimalstellen zu erhalten.
Ergebnis:
3.14159165358977
quelle
Piet, viele Codels
Nicht meine Antwort, aber dies ist die beste Lösung, die ich für dieses Problem gesehen habe:
Meines Wissens addiert es die Pixel im Kreis und dividiert durch den Radius und dann noch einmal. Das ist:
Ein besserer Ansatz für mich ist ein Programm, das dieses Bild in einer beliebigen Größe generiert und es dann über einen Piet-Interpreter ausführt.
Quelle: http://www.dangermouse.net/esoteric/piet/samples.html
quelle
TECHNISCH BERECHNE ICH, 9
TECHNISCH BERECHNE ICH NOCH, 10
Ich berechne so hart, 8
Ich versehentlich PI, 12
Und technisch stinkt diese Antwort.
quelle
APL - 6
Ausgänge
3.141592654
. Es wird der doppelte Arkussinus von 1 berechnet.Eine 13-Zeichen-Lösung wäre:
Das ergibt
3.141591654
für mich die gewünschte Präzision. Zur Berechnungwird jedoch die einfache
+ 4/1 - 4/3 + 4/5 - 4/7 ...
Reihe verwendet.quelle
¯2○¯1
?" (Dh acos -1). Dies ergibt jedoch eine komplexe Annäherung an repl.it (3.1415926425236J¯1.1066193467303274e¯8
). Irgendeine Idee warum? Tun das alle Implementierungen?2 * asin(1)
ist allerdings ein bisschen schummeln.sqrt(1-theta^2)
irgendwann (was in vielen Trigger-Identitäten auftaucht) und irgendwo an Präzision verloren hat, was zu einem leicht negativen Ergebnis führte1-theta^2
.acos -0.75
. Es gibt keine Möglichkeit1 - 0.75 ^ 2
, negativ zu sein.J - 5 Bytes
Das heißt
|log(-1)|
.quelle
ln(e^(42*pi))/42
oderpi*113/113
.Google-Rechner, 48
Nimmt ein Stück Butter, führt fortgeschrittene Berechnungen durch und macht Pi daraus. Ich dachte, da alle anderen einfache mathematische Antworten machten, würde ich eine etwas einzigartigere hinzufügen.
Beispiel
quelle
stick of butter
ist süß und lustig, aber das ist im Wesentlichen noch eine anderepi*x/x+y-y
algebraische Identität.Oktave, 31
Berechnet die Fläche eines Viertelkreises mit Radius 2 durch numerische Integration.
quelle
Mathematica 6
quelle
Python, 88
Lösung:
Beispielausgabe in der Python-Shell:
Verwaltet, um Importe zu vermeiden. Kann einfach ausgetauscht werden, um die Dezimalbibliothek mit beliebiger Genauigkeit zu verwenden. ersetzen Sie einfach
3.
mitDecimal('3')
, stellen Sie die Präzision vor und nach, dann einstellige und das Ergebnis zu konvertieren Präzision.Und im Gegensatz zu einer ganzen Menge der Antworten hier tatsächlich berechnet π statt auf der Berufung integrierte Konstanten oder Mathematik fakery, das heißt
math.acos(-1)
,math.radians(180)
etc.quelle
x86-Assemblersprache (5 Zeichen)
Ob dies eine Konstante aus dem ROM lädt oder die Antwort tatsächlich berechnet, hängt jedoch vom Prozessor ab (aber zumindest von einigen wird tatsächlich eine Berechnung durchgeführt und nicht nur die Zahl aus dem ROM geladen). Um die Dinge ins rechte Licht zu rücken: Auf einer 387 werden 40 Taktzyklen benötigt. Dies ist mehr als sinnvoll, wenn nur der Wert aus dem ROM geladen wird.
Wenn Sie wirklich eine Berechnung sicherstellen möchten, können Sie Folgendes tun:
[für 27 Zeichen]
quelle
fldpi
?asin(-1)
nochfldpi
besonders interessant sind oder kreativ. Es macht nicht viel Sinn zu konkurrieren, um herauszufinden, wessen Lieblingssprache den kürzesten Namen für vordefinierte Triggerfunktionen und Pi-Konstanten hat.bc -l, 37 Bytes
Ich sehe keine anderen Antworten für das Wallis-Produkt . Da es nach meinem Namensvetter benannt ist (mein Dozent für Geschichte der Mathematik hatte einen großen Kick davon), konnte ich nicht widerstehen.
Es stellt sich heraus, dass der Algorithmus aus der Sicht des Golfsports ziemlich gut ist, aber die Konvergenzrate ist miserabel - er nähert sich 1 Million Iterationen, um nur 5 Dezimalstellen zu erhalten:
bc -l, 15 Bytes
Alternativ können wir Newton-Raphson verwenden, um
sin(x)=0
mit einer Anfangsnäherung von 3 zu lösen . Da dies in so wenigen Iterationen konvergiert, codieren wir einfach 2 Iterationen hart, was 10 Dezimalstellen ergibt:Die iterative Formel nach Newton-Raphson lautet:
sin'
===cos
undcos(pi)
===-1
, also approximieren wir einfach dencos
Begriff, um zu erhalten:Ausgabe:
quelle
Python -
4745pi wird tatsächlich ohne Triggerfunktionen oder Konstanten berechnet.
Ergebnis:
quelle
C 99
Berechnet direkt die Fläche / r ^ 2 eines Kreises.
Diese Funktion berechnet pi, indem sie die Anzahl der Pixel in einem Radiuskreis zählt und
r
dann durch dividiertr*r
(tatsächlich berechnet sie nur einen Quadranten). Mitr
10000 ist es auf 5 Dezimalstellen genau (3.1415904800). Die Parameter der Funktion werden ignoriert, ich habe sie nur dort deklariert, um Platz zu sparen.quelle
Javascript,
4336x
wirdzeta(2)=pi^2/6
sosqrt(6*x)=pi
. (47 Zeichen)Nachdem Sie die distributive Eigenschaft verwendet und die geschweiften Klammern aus der
for
Schleife entfernt haben, erhalten Sie:(43 Zeichen)
Es gibt zurück:
Bearbeiten:
Mit dem Wallis-Produkt habe ich einen noch kürzeren Weg gefunden:
(36 Zeichen)
Es gibt zurück:
quelle
Python, Riemann Zeta (
5841 Zeichen)Oder ersparen Sie sich zwei Zeichen, aber verwenden Sie scipy
Bearbeiten : Dank amcgregor wurden 16 (!) Zeichen gespeichert
quelle
math
Import und densqrt
Aufruf vermeiden , indem stattdessen zur Potenzierung(6*sum(n**-2 for n in range(1,9**9)))**0.5
Javascript: 99 Zeichen
Nach der Formel von Simon Plouffe aus dem Jahr 1996 funktioniert dies mit einer Genauigkeit von 6 Nachkommastellen:
Diese längere Variante (130 Zeichen) hat eine bessere Genauigkeit, 15 Nachkommastellen:
Ich habe dies anhand meiner zwei Antworten auf diese Frage gemacht .
quelle
Rubin,
545049Online-Version zum Testen.
Eine andere Version ohne Array (50 Zeichen):
Online-Version zum Testen.
quelle
a=__import__;reduce(a('operator').__add__,a('itertools').imap(lambda e:(-1.0)**e/(2*e+1)*4,xrange(9**6)))
Angaben 105 Zeichen (nach Verwendung einiger Trivial-Code-Komprimierungstricks): - Beachten Sie die Verwendung von xrange / imap. In Python 3 können Sie dies vermeiden. Grundsätzlich möchte ich nicht, dass Ihr gesamter RAM verbraucht wird, wenn Sie eine Liste mit so vielen Einträgen erstellen.TI CAS, 35
quelle
Perl - 35 Bytes
Erzeugt volle Gleitkommapräzision. Eine Ableitung der verwendeten Formel ist an anderer Stelle zu sehen .
Beispielnutzung:
Willkürliche Präzisionsversion
Bei Bedarf erweitern. Die Länge der Iteration (z. B.
-329..-1
) sollte so angepasst werden, dass sie ungefähr log 2 (10) ≈ 3.322 mal der Anzahl der Stellen entspricht.Oder verwenden Sie
bigint
stattdessen:Dies läuft deutlich schneller, enthält jedoch kein Dezimalzeichen.
quelle
C # 192
Ausgänge:
Keine Mathematik beteiligt. Schlägt einfach die aktuelle Version von TeX nach und analysiert das resultierende HTML primitiv. Irgendwann wird es laut Wikipedia π .
quelle
Python 3 Monte Carlo (103 Zeichen)
quelle
Game Maker Language, 34
Nimmt an, dass alle nicht initialisierten Variablen 0 sind. Dies ist in einigen Versionen von Game Maker Standard.
Ergebnis:
quelle
float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}
ist kürzer als dieser1e8
statt 999999for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)
, um ein Byte zu speichern (oder alternativfor(i=1;i++<1e8;)
)?Java -
8355Kürzere Version dank Navin.
Alte Version:
quelle
180
mitpi/180
.R : 33 Zeichen
Hoffentlich folgt dies den Regeln.
quelle
Rubin, 82
Verwendet eine Formel, die ich nicht wirklich verstehe und die ich nur kopiert habe. : P
Ausgabe:
3.1415926535897913
quelle
Rubin, 12
Ich bin technisch „Berechnung“
pieine Annäherung von pi.quelle
acos(-1)
.JavaScript - 19 Bytes
Calculates the 9th root of 29809.
quelle