Pi-Berechnungscode Golf [geschlossen]


17

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.


5
@hvd Warum denkst du sollte disqualifiziert werden? Es passt zu den Spezifikationen ...
Dr. Belisarius

5
@hvd acos (-1). Ich gewinne!
Level River St

4
Das sieht komisch aus, inkonsistent. Die Berechnung von π muss aus der Division eines Kreises durch seinen Durchmesser oder einer anderen Operation bestehen, die π ergibt. Wenn wir akzeptieren , tun 355/113 - was nichts mit π außer Glück zu tun hat -, wie @ace, dann logisch sollten wir tun akzeptieren 3,14159 .
Nicolas Barbulesco

7
Ich verstehe nicht, warum die Leute diese Frage mögen. Dies ist eine der unklarsten und uninteressantesten Fragen, die ich hier gesehen habe. Der einzige Unterschied zwischen dieser und hallo Welt ist, dass dies etwas mit Pi zu tun hat.
Cruncher

8
Um diese Frage interessant zu machen, braucht es eine Bewertungsfunktion, die Ziffern von Pi pro Byte Code belohnt.
Ben Jackson

Antworten:


56

Python3, 7

Läuft in der interaktiven Shell

355/113

Ausgabe: Auf 3.14159292035398256 Nachkommastellen korrigieren

Und 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


12
mhmh - das ist eigentlich eine vielsprachige Antwort. Funktioniert auch in Smalltalk!
Blabla999

7
Blasphemie! Es ist kaum eine Berechnung!
24.

3
Nun, es ist eine Unterteilung, und ihre Präzision erfüllt die Anforderung ... (und selbst die Bibel ist weniger genau; Sie würden diese Lästerung nicht als "Blasphemie" bezeichnen - oder? 3 * ;-)
blabla999

29
Der unangenehme Moment, als ich dies als ernsthafte Antwort schrieb, aber jeder es als Witz interpretiert ...
user12205

20
Am besten bewertete Antwort: 355/113. Der niedrigste gestimmt Antwort: 3+.14159. Ich sehe eigentlich keinen großen Unterschied.
Primo

49

PHP - 132 127 125 124 Bytes

Grundlegende Monte-Carlo-Simulation. Alle 10 Millionen Iterationen wird der aktuelle Status ausgegeben:

for($i=1,$j=$k=0;;$i++){$x=mt_rand(0,1e7)/1e7;$y=mt_rand(0,1e7)/1e7;$j+=$x*$x+$y*$y<=1;$k++;if(!($i%1e7))echo 4*$j/$k."\n";}

Danke an cloudfeet und zamnuts für Vorschläge!

Beispielausgabe:

$ php pi.php
3.1410564
3.1414008
3.1413388
3.1412641
3.14132568
3.1413496666667
3.1414522857143
3.1414817
3.1415271111111
3.14155092
...
3.1415901754386
3.1415890482759
3.1415925423731

5
Auf eine Antwort, die wirklich rechnet!
Blabla999

Ich weiß nichts über PHP, aber in JS können Sie so etwas tun: Das $j+=$x*$x+$y*$y<=1;würde Ihnen vier Bytes sparen.
Cloudfeet

1
Auch $k+=1/4;und print $j/$kkönnte auf $k++;und print 4*$j/$kfür ein anderes Byte reduziert werden .
Cloudfeet

@cloudfeet - Änderungen vorgenommen, bestätigter Code läuft immer noch gleich. Vielen Dank!

2
@MarkC - Konzeptionell werden Pfeile zufällig in einem Rechteck von 0,0 bis 1,1 geworfen. Diejenigen, die kleiner oder gleich Abstand 1 von 0,0 sind, werden als innen, sonst als außen betrachtet. Die Form dieses Abstands 1 ist zufällig ein Viertelkreis oder π / 4. Die [Anzahl der Pfeile innerhalb des Viertelkreises] / [Gesamtzahl der Pfeile] nähert sich π / 4, wenn die Anzahl der Proben zunimmt.

31

J 6

{:*._1

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:

      +/(4*_1&^%>:@+:)i.1e6
 3.14159

12
Mit anderen Worten ist dies atan(0) + pi. Ich denke nicht, dass die Verwendung von trigonometrischen Funktionen und pi selbst als "Berechnung" gelten sollte.
Jason C

@JasonC Arg( dh das Argument einer komplexen Zahl) ist keine trigonometrische Funktion, obwohl die Werte denen von
arctangent

1
@mniip Ja, das ist es. Es ist nur ein Synonym für atan (na ja, atan2) für den Real- und Imaginärteil. Wie Sie dort sehen können, ist es per Definition genau gleich atan(0) + pi.
Jason C

25

Perl, 42 Bytes

map{$a+=(-1)**$_/(2*$_+1)}0..9x6;print$a*4

Es berechnet π mit der Leibniz-Formel :

Leipniz Formel

999999 wird als größtes n verwendet , um die Genauigkeit von fünf Dezimalstellen zu erhalten.

Ergebnis: 3.14159165358977


Das ist cool! Es hat mich dazu inspiriert, eines in Java 8 zu schreiben.
David Conrad

19

Piet, viele Codels

Nicht meine Antwort, aber dies ist die beste Lösung, die ich für dieses Problem gesehen habe:

Pi-Approximation in Piet

Meines Wissens addiert es die Pixel im Kreis und dividiert durch den Radius und dann noch einmal. Das ist:

A = πr²  # solve for π
π = A/r²
π = (A/r)/r

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


Könnten Sie erklären, was es tatsächlich tut? (Ich kenne die allgemeine Idee hinter Piet, aber eine Erklärung, wie dieses spezielle Programm funktioniert, wäre eine schöne Ergänzung zu Ihrer Antwort).
Plannapus

Ich weiß nicht wirklich Piet, aber ich denke , das ist buchstäblich auf den Bereich des roten Kreises misst und dann dividiert durch den doppelten Radius, die Lösung für π = A / (r * r)
Nicht ,

Nun, der Bereich ist ziemlich klar, denn wenn der Zeiger in den roten Kreis eintritt, zählt er die Anzahl der Codels im roten Bereich und schiebt ihn beim Verlassen zum Stapel (da der Austrittspunkt dunkelrot ist, also keine Farbtonänderung, sondern einen Schritt dunkler) ), es ist der Teil "Teilen durch den Radius im Quadrat", den ich nur schwer verstehen konnte.
Plannapus

1
@plannapus Der Radius ist in der dunkelroten Linie, die sich von der oberen linken Ecke bis zur Hälfte des linken Randes erstreckt (im Bild schwer zu erkennen), "fest codiert". Piet ist schwer zu folgen , aber der Kern ist Farbblöcke ein Wert ihrer Umgebung (Linie an der linken Kante hat gleiche haben R Pixel, Kreis hat Bereich Pixel), und das Material dazwischen ist nur ein Bündel von Stack und arithmetische Operationen. Programme starten oben links. Der Text oben rechts ist im Wesentlichen ein Kommentar.
Jason C

2
@ JasonC ah natürlich! Der Kreis berührt sowohl die obere als auch die untere Seite, so dass die dunkelrote Linie, die von der oberen Seite zur exakten Mitte abfällt, der Radius ist! Clever!
Plannapus

18

TECHNISCH BERECHNE ICH, 9

0+3.14159

TECHNISCH BERECHNE ICH NOCH, 10

PI-acos(1)

Ich berechne so hart, 8

acos(-1)

Ich versehentlich PI, 12

"3.14"+"159"

Und technisch stinkt diese Antwort.


31
Also Header, viel großer Titel, sehr schmerzhaft für meine Augen, wow.
Pierre Arlaud

1
Pluzz Wan für viel Lulz, danke
Jonathan Van Matre

Hey Baby, willst du meine Taylor-Serie erweitern?
Jason C


@ SimonT Du hast meine Frage zur Taylor-Serie nicht beantwortet. Aber während Sie darüber nachdenken, lesen Sie meine Kommentare zu der Frage und die meisten anderen Antworten hier. : P
Jason C

14

APL - 6

2ׯ1○1

Ausgänge 3.141592654. Es wird der doppelte Arkussinus von 1 berechnet.

Eine 13-Zeichen-Lösung wäre:

--/4÷1-2×⍳1e6

Das ergibt 3.141591654für mich die gewünschte Präzision. Zur Berechnung
wird jedoch die einfache + 4/1 - 4/3 + 4/5 - 4/7 ...Reihe verwendet.


1
Wow, das ist eine langsame Konvergenz!

Mein erster Gedanke war "warum nicht ¯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?
James Wood

+1 für Ihre zweite Lösung. 2 * asin(1)ist allerdings ein bisschen schummeln.
Jason C

@JamesWood Ich kenne APL nicht, aber wenn ich raten müsste, würde ich sagen, dass es versucht hat, eine zu tun 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ührte 1-theta^2.
Jason C

1
Merkwürdig ist, dass es immer noch einen winzigen Imaginärteil dafür gibt acos -0.75. Es gibt keine Möglichkeit 1 - 0.75 ^ 2, negativ zu sein.
James Wood

14

J - 5 Bytes

|^._1

Das heißt |log(-1)|.


Clevere Verwendung der Euler-Identität.
Primo

1
Cool, eine andere algebraische Identitätsantwort. Etwa so schlau wie ln(e^(42*pi))/42oder pi*113/113.
Jason C

Funktioniert auch in TI-BASIC
Timtech

1
(Völlig unabhängig, ich wünschte, wir könnten LaTeX für Codegolf verwenden.)
Jason C

1
(Antwort auf völlig verwandte Frage komme ich mit Google Charts z. B. hier zurecht.) Zum Thema ist dies die sortest Antwort und sollte daher akzeptiert worden sein.
Primo

14

Google-Rechner, 48

stick of butter*(26557.4489*10^-9)/millimeters^3

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


3
Das stick of butterist süß und lustig, aber das ist im Wesentlichen noch eine andere pi*x/x+y-yalgebraische Identität.
Jason C

10
Es gibt so viele bessere Möglichkeiten , Pi mit einem Stück Butter zuzubereiten
nicht dass Charles

Haben Sie versucht, Butter mit einem Stock Pi zu machen?
mbomb007

12

Oktave, 31

quad(inline("sqrt(4-x^2)"),0,2)

Berechnet die Fläche eines Viertelkreises mit Radius 2 durch numerische Integration.

octave:1> quad(inline("sqrt(4-x^2)"),0,2)
ans =     3.14159265358979

1
Nett! +1 wenn meine Stimmen aufgeladen werden.
Jason C


10

Python, 88

Lösung:

l=q=d=0;t,s,n,r=3.,3,1,24
while s!=l:l,n,q,d,r=s,n+q,q+8,d+r,r+32;t=(t*n)/d;s+=t
print s

Beispielausgabe in der Python-Shell:

>>> print s
3.14159265359

Verwaltet, um Importe zu vermeiden. Kann einfach ausgetauscht werden, um die Dezimalbibliothek mit beliebiger Genauigkeit zu verwenden. ersetzen Sie einfach 3.mit Decimal('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.


9

x86-Assemblersprache (5 Zeichen)

fldpi

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:

fld1
fld1
fpatan
fimul f

f dd 4

[für 27 Zeichen]


1
Kannst du bitte erklären ?
Nicolas Barbulesco

Und was würde die Berechnung auf einigen Prozessoren bewirken fldpi?
Nicolas Barbulesco

1
Ich denke nicht, dass die Verwendung eines Befehls, der pi lädt (oder sogar basierend auf der Implementierung eines anderen oder vorhandenen Triggerfunktionsimplementierungen berechnet), wirklich zählt, um irgendetwas zu "berechnen" (der "omg assembler" -Faktor tut es nicht). das ändere ich wirklich). Portieren Sie dies möglicherweise auf die kürzest mögliche Assembler-Implementierung, und es kann als "Berechnung" bezeichnet werden.
Jason C

2
@JasonC: Klingt für mich nach einer völlig willkürlichen Idee, und es ist nicht realer, als zu entscheiden, dass Menschen Additionen, Subtraktionen, Multiplikationen und Divisionen selbst durchführen müssen, wenn sie sie verwenden wollen.
Jerry Coffin

3
@JerryCoffin Statt technischen Details zu argumentieren, es genügt zu sagen , dass weder asin(-1)noch fldpibesonders 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.
Jason C

8

bc -l, 37 Bytes

for(p=n=2;n<7^7;n+=2)p*=n*n/(n*n-1);p

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:

$ time bc -l<<<'for(p=n=2;n<7^7;n+=2)p*=n*n/(n*n-1);p'
3.14159074622629555058

real    0m3.145s
user    0m1.548s
sys 0m0.000s
$ 

bc -l, 15 Bytes

Alternativ können wir Newton-Raphson verwenden, um sin(x)=0mit 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:

x=3+s(3);x+s(x)

Die iterative Formel nach Newton-Raphson lautet:

x[n+1] = x[n] - ( sin(x[n]) / sin'(x[n]) )

sin' === cos und cos(pi)=== -1, also approximieren wir einfach den cosBegriff, um zu erhalten:

x[n+1] = x[n] + sin(x[n])

Ausgabe:

$ bc -l<<<'x=3+s(3);x+s(x)'
3.14159265357219555873
$ 

+1 jetzt ist es eher so!
Jason C

@JasonC Wie beurteilen Sie die Anwendung von Newton-Raphson zur Lösung von sin (x) = 0 (siehe Bearbeiten)?
Digital Trauma

6

Python - 47 45

pi wird tatsächlich ohne Triggerfunktionen oder Konstanten berechnet.

a=4
for i in range(9**6):a-=(-1)**i*4/(2*i+3)

Ergebnis:

>>> a
3.1415907719167966

Sollte in der Lage sein, ein Byte zu speichern, indem die Null nach der Dezimalstelle für die erzwungene Float-Interpretation gelöscht wird. :) Bonuspunkte für die Kürze, aber ich mag meine für willkürliche Genauigkeit und geringere Speichernutzung. (Bearbeitet, um die Idee in Klammern zu verkratzen; ich sehe, was dort vor sich geht, und mein
Einzeltest hat

Oh nein. Nach Ihrer Änderung gibt dies keine gültige Ausgabe mehr. (265723 ≭ π) Sie brauchen immer noch die Periode, nur nicht die nachgestellte Null.
Amcgregor

@amcgregor Python 3 verwenden?
Qwr

Das tue ich, obwohl ich hauptsächlich unter 2.7 entwickle und meinen Code in beiden Versionen zum Laufen bringe. Bei der Standardinstallation von Mac 10.9 python3 verursacht Ihr Code jedoch einen Segmentierungsfehler.
Amcgregor

@amcgregor Ich habe es gerade getestet, es funktioniert für mich (Python 3.3.4)
qwr

6

C 99

Berechnet direkt die Fläche / r ^ 2 eines Kreises.

double p(n,x,y,r){r=10000;for(n=x=0;x<r;++x)for(y=1;y<r;++y)n+=x*x+y*y<=r*r;return(double)n*4/r/r;}

Diese Funktion berechnet pi, indem sie die Anzahl der Pixel in einem Radiuskreis zählt und rdann durch dividiert r*r(tatsächlich berechnet sie nur einen Quadranten). Mit r10000 ist es auf 5 Dezimalstellen genau (3.1415904800). Die Parameter der Funktion werden ignoriert, ich habe sie nur dort deklariert, um Platz zu sparen.


6

Javascript, 43 36

x=0;for(i=1;i<1e6;i++){x+=1/i/i};Math.sqrt(6*x)

xwird zeta(2)=pi^2/6so sqrt(6*x)=pi. (47 Zeichen)

Nachdem Sie die distributive Eigenschaft verwendet und die geschweiften Klammern aus der forSchleife entfernt haben, erhalten Sie:

x=0;for(i=1;i<1e6;i++)x+=6/i/i;Math.sqrt(x)

(43 Zeichen)

Es gibt zurück:

3.14159169865946

Bearbeiten:

Mit dem Wallis-Produkt habe ich einen noch kürzeren Weg gefunden:

x=i=2;for(;i<1e6;i+=2)x*=i*i/(i*i-1)

(36 Zeichen)

Es gibt zurück:

3.141591082792245

6

Python, Riemann Zeta (58 41 Zeichen)

(6*sum(n**-2for n in range(1,9**9)))**0.5

Oder ersparen Sie sich zwei Zeichen, aber verwenden Sie scipy

import scipy.special as s
(6*s.zeta(2,1))**0.5

Bearbeiten : Dank amcgregor wurden 16 (!) Zeichen gespeichert


1
Kann möglicherweise den mathImport und den sqrtAufruf vermeiden , indem stattdessen zur Potenzierung (6*sum(n**-2 for n in range(1,9**9)))**0.5
gewechselt wird

5

Javascript: 99 Zeichen

Nach der Formel von Simon Plouffe aus dem Jahr 1996 funktioniert dies mit einer Genauigkeit von 6 Nachkommastellen:

function f(k){return k<2?1:f(k-1)*k}for(y=-3,n=1;n<91;n++)y+=n*(2<<(n-1))*f(n)*f(n)/f(2*n);alert(y)

Diese längere Variante (130 Zeichen) hat eine bessere Genauigkeit, 15 Nachkommastellen:

function e(x){return x<1?1:2*e(x-1)}function f(k){return k<2?1:f(k-1)*k}for(y=-3,n=1;n<91;n++)y+=n*e(n)*f(n)*f(n)/f(2*n);alert(y)

Ich habe dies anhand meiner zwei Antworten auf diese Frage gemacht .


5

Rubin, 54 50 49

p (0..9**6).map{|e|(-1.0)**e/(2*e+1)*4}.reduce :+

Online-Version zum Testen.

Eine andere Version ohne Array (50 Zeichen):

x=0;(0..9**6).each{|e|x+=(-1.0)**e/(2*e+1)*4}; p x

Online-Version zum Testen.


Es ist interessant zu sehen, welche Sprachunterschiede solche kompakten Lösungen bieten können. Zum Beispiel beträgt die Python-Übersetzung der obigen 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.
Amcgregor

1
Du hast absolut recht. Es ist oft sehr praktisch (insbesondere Rubys) Array- und Enumerable-Funktionen zu verwenden, obwohl dies in Bezug auf Leistung und Geschwindigkeit möglicherweise nicht die beste Idee ist Range.each-Methode, anstatt eine Karte zu erstellen.
David Herrmann

Ja, es ist möglich - nur ein Zeichen mehr ...
David Herrmann

Ihre erste Antwort ist nicht so präzise wie Ihre zweite.
Josh

Könnten Sie bitte näher darauf eingehen? Gleicher Algorithmus, gleiche Ausgabe für mich?
David Herrmann

5

TI CAS, 35

lim(x*(1/(tan((180-360/x)/2))),x,∞)

1
Ich habe darauf zurückgesehen und ich vergesse völlig, wie es funktioniert: P
TheDoctor

5

Perl - 35 Bytes

$\=$\/(2*$_-1)*$_+2for-46..-1;print

Erzeugt volle Gleitkommapräzision. Eine Ableitung der verwendeten Formel ist an anderer Stelle zu sehen .

Beispielnutzung:

$ perl pi.pl
3.14159265358979

Willkürliche Präzisionsversion

use bignum a,99;$\=$\/(2*$_-1)*$_+2for-329..-1;print

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.

3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211707

Oder verwenden Sie bigintstattdessen:

use bigint;$\=$\/(2*$_-1)*$_+2e99for-329..-1;print

Dies läuft deutlich schneller, enthält jedoch kein Dezimalzeichen.

3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

5

C # 192

class P{static void Main(){var s=(new System.Net.WebClient()).DownloadString("http://www.ctan.org/pkg/tex");System.Console.WriteLine(s.Substring(s.IndexOf("Ver&shy;sion")+21).Split(' ')[0]);}}

Ausgänge:

3.14159265

Keine Mathematik beteiligt. Schlägt einfach die aktuelle Version von TeX nach und analysiert das resultierende HTML primitiv. Irgendwann wird es laut Wikipedia π .


Ich bin 5 Jahre zu spät, aber dies ist eine Standardlücke , die 4 Tage vor dieser Antwort erstellt wurde.
Benjamin Urquhart

5

Python 3 Monte Carlo (103 Zeichen)

from random import random as r
sum(1 for x,y in ((r(),r()) for i in range(2**99)) if x**2+y**2<1)/2**97

5

Game Maker Language, 34

Nimmt an, dass alle nicht initialisierten Variablen 0 sind. Dies ist in einigen Versionen von Game Maker Standard.

for(i=1;i<1e8;i++)x+=6/i/i;sqrt(x)

Ergebnis:

3.14159169865946

Sehr schön. Auch in C float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}ist kürzer als dieser
Izabera

noch kürzer mit 1e8statt 999999
izabera

Könnten Sie verwenden for(i=1;i<1e8;)x+=6/i/i++;sqrt(x), um ein Byte zu speichern (oder alternativ for(i=1;i++<1e8;))?
mbomb007

@ mbomb007 GML benötigt leider nicht alle 3 Parameter.
Timtech,

4

Java - 83 55

Kürzere Version dank Navin.

class P{static{System.out.print(Math.toRadians(180));}}

Alte Version:

class P{public static void main(String[]a){System.out.print(Math.toRadians(180));}}

Dies führt keine Berechnung durch.
Hosch250

Ich verstehe die Ablehnung nicht, obwohl - ich hatte mit "Math.toRadians (180)" geantwortet. Es ist auch fraglich, wer pi berechnet: der Compiler oder das Programm. Aber das war nicht Teil der Frage.
blabla999

2
@ user2509848 Das tut es mit Sicherheit: Es multipliziert 180mit pi/180.
AJMansfield

Du meinst, es multipliziert pi mit 1? Es ist im Wesentlichen dasselbe. Ich habe es nicht abgelehnt, aber ich denke nicht, dass es wirklich zählt.
Hosch250


4

R : 33 Zeichen

sqrt(8*sum(1/seq(1,1000001,2)^2))
[1] 3.141592

Hoffentlich folgt dies den Regeln.


3

Rubin, 82

q=1.0
i=0
(0.0..72).step(8){|k|i+=1/q*(4/(k+1)-2/(k+4)-1/(k+5)-1/(k+6))
q*=16}
p i

Verwendet eine Formel, die ich nicht wirklich verstehe und die ich nur kopiert habe. : P

Ausgabe: 3.1415926535897913


3

Rubin, 12

p 1.570796*2

Ich bin technisch „Berechnung“ pi eine Annäherung von pi.


Nein, Sie berechnen pi technisch nicht. Sie berechnen technisch 3.141592, was zwar nahe an pi liegt, aber niemals genau konvergiert acos(-1).
wchargin

@ Wchar Ok, bearbeitet
Türklinke

3
Ich denke nicht, dass es wirklich wichtig ist, pi / 2 hart zu codieren und dann mit 2 zu multiplizieren. es geht darum, pi zu berechnen und kein numerisches Literal zu verschleiern.
Jason C

3

JavaScript - 19 Bytes

Math.pow(29809,1/9)

Calculates the 9th root of 29809.

3.1415914903890925
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.