Kode Perhitungan Pi Golf [ditutup]

17

Tantangan

Anda harus menghitung pi dalam panjang terpendek yang Anda bisa. Setiap bahasa dipersilakan untuk bergabung dan Anda dapat menggunakan rumus apa saja untuk menghitung pi. Itu harus dapat menghitung pi ke setidaknya 5 tempat desimal. Terpendek, akan diukur dalam karakter. Persaingan berlangsung selama 48 jam. Mulai.


Catatan : Pertanyaan serupa ini menyatakan bahwa PI harus dihitung menggunakan seri 4 * (1 - 1/3 + 1/5 - 1/7 + ...). Pertanyaan ini tidak memiliki batasan ini, dan pada kenyataannya banyak jawaban di sini (termasuk yang paling mungkin menang) tidak valid dalam pertanyaan lain itu. Jadi, ini bukan duplikat.

poseidon
sumber
5
@ hvd Mengapa menurut Anda harus didiskualifikasi? Ini sesuai dengan spesifikasi ...
Dr. belisarius
5
@ hvd acos (-1). Saya menang!
Level River St
4
Ini terlihat aneh, tidak konsisten. Menghitung π harus membagi lingkaran dengan diameternya, atau pemberian operasi lain π. Jika kita menerima melakukan 355/113 - yang tidak ada hubungannya dengan π kecuali keberuntungan -, seperti @ace, maka secara logis kita harus menerima melakukan 3.14159 .
Nicolas Barbulesco
7
Saya tidak mengerti mengapa orang menyukai pertanyaan ini. Ini adalah salah satu pertanyaan paling tidak jelas dan tidak menarik yang pernah saya lihat di sini. Satu-satunya perbedaan antara dunia ini dan halo, adalah bahwa ini ada hubungannya dengan Pi.
Cruncher
8
Untuk membuat pertanyaan ini menarik, dibutuhkan fungsi penilaian yang memberikan penghargaan berupa pi per byte kode.
Ben Jackson

Jawaban:

56

Python3, 7

Berjalan di shell interaktif

355/113

Output:, 3.1415929203539825koreksi ke 6 tempat desimal

Dan akhirnya saya punya solusi yang mengalahkan APL!

Oh, dan jika Anda bertanya-tanya, rasio ini disebut 密 率 (secara harfiah "rasio tepat"), dan diusulkan oleh ahli matematika Cina Zu Chongzhi (429-500 AD). Artikel wikipedia terkait dapat ditemukan di sini . Zu juga memberikan rasio 22/7 sebagai "rasio kasar", dan dia dikenal sebagai ahli matematika pertama yang mengusulkan bahwa 3.1415926 <= pi <= 3.1415927

pengguna12205
sumber
12
mhmh - itu sebenarnya jawaban polyglot. Bekerja di Smalltalk juga!
blabla999
7
Penghujatan! Ini bukan perhitungan!
mniip
3
baik, itu adalah divisi, dan presisi itu memenuhi persyaratan ... (dan bahkan Alkitab kurang akurat; Anda tidak akan melabeli penistaan ​​itu - kan? 3 * ;-)
blabla999
29
Momen canggung ketika saya menulis ini sebagai jawaban serius tetapi semua orang menafsirkannya sebagai lelucon ...
user12205
20
Tertinggi sebagai jawaban: 355/113. Terendah sebagai jawaban: 3+.14159. Saya tidak melihat banyak perbedaan, sungguh.
primo
49

PHP - 132 127 125 124 byte

Simulasi dasar Monte-Carlo. Setiap 10 juta iterasi, ia mencetak status saat ini:

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";}

Terima kasih kepada cloudfeet dan zamnuts untuk sarannya!

Output sampel:

$ 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

sumber
5
Untuk jawaban yang benar-benar menghitung!
blabla999
Tidak tahu tentang PHP, tetapi di JS Anda dapat melakukan sesuatu seperti: $j+=$x*$x+$y*$y<=1;yang akan menghemat empat byte.
cloudfeet
1
Juga $k+=1/4;dan print $j/$kdapat dikurangi menjadi $k++;dan print 4*$j/$kuntuk byte lain.
cloudfeet
@cloudfeet - Perubahan yang dilakukan, kode yang dikonfirmasi masih berjalan sama. Terima kasih!
2
@MarkC - Secara konseptual itu melempar anak panah secara acak dalam persegi panjang 0,0 hingga 1,1. Yang kurang dari atau sama dengan jarak 1 dari 0,0 dianggap di dalam, selain di luar. Bentuk jarak ini 1 terjadi menjadi seperempat lingkaran atau π / 4. [Jumlah anak panah di dalam lingkaran kuartal] / [jumlah anak panah] akan mendekati 4/4 saat jumlah sampel meningkat.
31

J 6

{:*._1

Penjelasan: *.memberikan panjang dan sudut bilangan kompleks. Sudut -1 adalah pi. {:mengambil ekor daftar [panjang, sudut]

Hanya untuk seri-perlahan-konvergen-fettishists, selama 21 byte, seri Leibniz:

      +/(4*_1&^%>:@+:)i.1e6
 3.14159
jpjacobs
sumber
12
Dengan kata lain, ini atan(0) + pi. Saya tidak berpikir penggunaan fungsi trigonometri dan pi itu sendiri harus dihitung sebagai "perhitungan".
Jason C
@JasonC Arg( maksudnya , argumen bilangan kompleks) bukan fungsi trigonometrik, meskipun memiliki nilai yang mirip dengan arctangent
mniip
1
@mniip Ya, benar. Itu hanya sinonim untuk atan (well, atan2) pada bagian nyata dan imajiner. Seperti yang Anda lihat di sana, persis sama, menurut definisi, untuk atan(0) + pi.
Jason C
25

Perl, 42 byte

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

Ini menghitung π menggunakan rumus Leibniz :

Formula Leipniz

999999 digunakan sebagai n terbesar untuk mendapatkan ketepatan lima angka desimal.

Hasil: 3.14159165358977

Heiko Oberdiek
sumber
Ini keren! Itu mengilhami saya untuk menulis satu di Jawa 8.
David Conrad
19

Piet, banyak kode

Bukan jawaban saya, tapi ini solusi terbaik yang pernah saya lihat untuk masalah ini:

Aproksimasi pi di Piet

Pemahaman saya adalah bahwa ia menambahkan piksel dalam lingkaran dan membaginya dengan jari-jari, dan sekali lagi. Itu adalah:

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

Pendekatan yang lebih baik dalam pikiran saya adalah sebuah program yang menghasilkan gambar ini pada ukuran yang sewenang-wenang dan kemudian menjalankannya melalui juru bahasa Piet.

Sumber: http://www.dangermouse.net/esoteric/piet/samples.html

Charles
sumber
Bisakah Anda menjelaskan apa yang sebenarnya dilakukannya? (Saya tahu ide umum di balik Piet tetapi penjelasan tentang cara kerja program khusus ini akan menjadi tambahan yang bagus untuk jawaban Anda).
plannapus
Saya tidak benar-benar tahu Piet, tapi saya pikir ini benar-benar mengukur luas lingkaran merah dan kemudian membaginya dengan jari-jari dua kali, memecahkan untuk π = A / (r * r)
Bukan karena Charles
Nah area ini cukup jelas, ketika ketika pointer memasuki lingkaran merah itu menghitung jumlah codels di area merah dan mendorongnya ke stack ketika keluar (karena titik keluarnya merah gelap, maka tidak ada perubahan rona tapi satu langkah lebih gelap ), itu adalah bagian "membagi dengan jari-jari kuadrat" yang sulit saya mengerti.
plannapus
1
@plannapus Jari-jari "hard-coded" di garis merah gelap memanjang dari sudut kiri atas ke setengah di ujung kiri (sulit untuk melihat pada gambar). Piet sulit untuk diikuti tetapi intinya adalah blok warna memiliki nilai yang sama dengan area mereka (garis di tepi kiri memiliki r piksel, lingkaran memiliki piksel area ), dan hal-hal di antaranya hanya sekelompok tumpukan dan operasi aritmatika. Program dimulai di kiri atas. Teks di kanan atas pada dasarnya adalah komentar.
Jason C
2
@JasonC ah tentu saja! Lingkaran menyentuh kedua sisi atas dan bawah sehingga garis merah gelap turun dari sisi atas ke tengah tepat diperlukan jari-jari! Pintar!
plannapus
18

Secara teknis AKU MENGHITUNG, 9

0+3.14159

TEKNIS AKU MASIH HITUNG, 10

PI-acos(1)

AKU MENGHITUNG SEGERA, 8

acos(-1)

SAYA AKAN PI, 12

"3.14"+"159"

Dan secara teknis, jawaban ini bau.

Jason C
sumber
31
Jadi tajuk, gelar yang jauh lebih besar, sangat menyakitkan untuk mataku, wow.
Pierre Arlaud
1
pluzz ingin banyak lulz, terima kasih
Jonathan Van Matre
Hei sayang, ingin memperluas seri Taylor saya?
Jason C
@SimonT Anda tidak menjawab pertanyaan saya tentang seri Taylor. Tetapi ketika Anda sedang memikirkannya, lihat komentar saya pada pertanyaan dan sebagian besar jawaban lain di sini. : P
Jason C
14

APL - 6

2ׯ1○1

Keluaran 3.141592654. Itu menghitung dua kali arcsine dari 1.

Solusi 13-char adalah:

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

Ini output 3.141591654untuk saya, yang cocok dengan presisi yang diminta.
Ia menggunakan + 4/1 - 4/3 + 4/5 - 4/7 ...seri sederhana untuk menghitung.

mniip
sumber
1
Wow, itu konvergensi yang lambat!
Pikiran pertama saya adalah "mengapa tidak ¯2○¯1?" (Yaitu acos -1). Tapi itu memberikan perkiraan yang kompleks pada repl.it ( 3.1415926425236J¯1.1066193467303274e¯8). Ada yang tahu kenapa? Apakah semua implementasi melakukan itu?
James Wood
+1 untuk solusi kedua Anda. 2 * asin(1)sedikit curang.
Jason C
@ JamesWood Saya tidak tahu APL tetapi jika saya harus menebak saya akan mengatakan itu mencoba melakukan sqrt(1-theta^2)(yang muncul dalam banyak identitas trigonometri) di beberapa titik dan kehilangan beberapa presisi di suatu tempat, berakhir dengan sedikit negatif 1-theta^2.
Jason C
1
Yang aneh adalah bahwa masih ada bagian imajiner kecil untuk acos -0.75. Tidak mungkin menghitungnya 1 - 0.75 ^ 2negatif.
James Wood
14

J - 5 byte

|^._1

Ini artinya |log(-1)|.

desir
sumber
Penggunaan cerdas Identitas Euler.
primo
1
Keren, jawaban identitas aljabar lain. Tentang sepintar ln(e^(42*pi))/42atau pi*113/113.
Jason C
Juga bekerja di TI-BASIC
Timtech
1
(Sama sekali tidak berhubungan, saya berharap kita bisa menggunakan LaTeX pada codegolf.)
Jason C
1
(Jawaban untuk pertanyaan yang sama sekali tidak terkait, saya dapatkan dengan google chart, misalnya di sini .) Pada topik, ini adalah jawaban yang paling baik, dan dengan demikian seharusnya diterima.
primo
14

Google Calculator, 48

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

Mengambil sepotong mentega, melakukan perhitungan lanjutan, membuat pi keluar darinya. Saya pikir karena semua orang melakukan jawaban matematika sederhana, saya akan menambahkan jawaban yang sedikit lebih unik.

Contoh

Danny
sumber
3
Ini stick of butterlucu dan lucu tapi ini pada dasarnya adalah pi*x/x+y-yidentitas aljabar lain .
Jason C
10
Ada begitu banyak cara yang lebih baik untuk membuat pi menggunakan sebatang mentega
Bukan berarti Charles
Sudahkah Anda mencoba membuat mentega dengan tongkat pi?
mbomb007
12

Oktaf, 31

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

Menghitung luas seperempat lingkaran dengan jari-jari 2, melalui integrasi numerik.

octave:1> quad(inline("sqrt(4-x^2)"),0,2)
ans =     3.14159265358979
dcsohl
sumber
1
Bagus! +1 saat suara saya diisi ulang.
Jason C
11

Mathematica 6

180N@° 
-->3.14159
Belisarius
sumber
10

Python, 88

Solusi:

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

Contoh output dalam shell Python:

>>> print s
3.14159265359

Berhasil menghindari impor. Dapat dengan mudah ditukar dengan menggunakan pustaka Desimal presisi acak; cukup ganti 3.dengan Decimal('3'), atur presisi sebelum dan sesudah, lalu unary plus hasilnya untuk mengubah presisi.

Dan tidak seperti seluruh banyak jawaban di sini, benar-benar menghitung π bukan mengandalkan built-in konstanta atau fakery matematika, yaitu math.acos(-1), math.radians(180), dll

amcgregor
sumber
9

bahasa assembly x86 (5 karakter)

fldpi

Apakah ini memuat konstanta dari ROM atau benar-benar menghitung jawabannya tergantung pada prosesor (tetapi pada setidaknya beberapa, itu benar-benar menghitung, tidak hanya memuat nomor dari ROM). Untuk meletakkan segala sesuatunya dalam perspektif, itu terdaftar sebagai mengambil 40 siklus clock pada 387, yang agak lebih masuk akal jika itu hanya memuat nilai dari ROM.

Jika Anda benar-benar ingin memastikan perhitungan, Anda bisa melakukan sesuatu seperti:

fld1
fld1
fpatan
fimul f

f dd 4

[untuk 27 karakter]

Jerry Coffin
sumber
1
Bisakah Anda jelaskan?
Nicolas Barbulesco
Dan, pada beberapa prosesor, perhitungan apa yang akan fldpidilakukan?
Nicolas Barbulesco
1
Saya tidak berpikir menggunakan perintah yang memuat pi (atau bahkan menghitungnya berdasarkan pada implementasi orang lain atau implementasi fungsi trig yang ada sama sekali) benar-benar diperhitungkan dalam semangat "menghitung" apa pun (faktor "omg assembler" tidak t benar-benar mengubah itu). Mungkin port ini ke implementasi assembler terpendek mungkin, dan itu bisa disebut "perhitungan".
Jason C
2
@JasonC: Kedengarannya seperti gagasan yang sepenuhnya sewenang-wenang bagi saya, dengan tidak lebih masuk akal daripada saya memutuskan bahwa orang harus menerapkan penambahan, pengurangan, penggandaan dan pembagian sendiri jika mereka ingin menggunakannya.
Jerry Coffin
3
@JerryCoffin Alih-alih berargumen teknis, cukuplah untuk mengatakan bahwa keduanya asin(-1)tidak fldpiterlalu menarik atau kreatif. Tidak banyak tujuan dalam berlomba untuk melihat bahasa favorit siapa yang memiliki nama terpendek untuk fungsi trigonometri dan konstanta pi yang telah ditentukan.
Jason C
8

bc -l, 37 byte

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

Saya tidak melihat jawaban lain menggunakan produk Wallis , jadi karena namanya dinamai sesuai nama saya ( dosen Sejarah Matematika saya mendapat tendangan besar dari itu), saya tidak bisa menolak.

Ternyata itu adalah algoritma yang cukup bagus dari perspektif golf, tetapi tingkat konvergensinya buruk - mendekati 1 juta iterasi hanya untuk mendapatkan 5 tempat desimal:

$ 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 byte

Sebagai alternatif, kita dapat menggunakan Newton-Raphson untuk menyelesaikan sin(x)=0, dengan perkiraan awal 3. Karena ini menyatu dalam beberapa iterasi, kita cukup meng-kode 2 iterasi, yang memberikan 10 tempat desimal:

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

Rumus berulang menurut Newton-Raphson adalah:

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

sin'=== cosdan cos(pi)=== -1, jadi kami cukup memperkirakan cosistilah untuk mendapatkan:

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

Keluaran:

$ bc -l<<<'x=3+s(3);x+s(x)'
3.14159265357219555873
$ 
Trauma Digital
sumber
+1 sekarang lebih seperti itu!
Jason C
@JasonC Apa pendapat Anda tentang aplikasi Newton-Raphson untuk menyelesaikan dosa (x) = 0 (lihat edit)?
Digital Trauma
6

python - 47 45

pi sebenarnya sedang dihitung tanpa fungsi trigonometri atau konstanta.

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

hasil:

>>> a
3.1415907719167966
qwr
sumber
Harus dapat menyimpan byte dengan menjatuhkan nol setelah tempat desimal untuk interpretasi float paksa. :) Poin bonus untuk singkatnya, tapi saya suka milik saya untuk akurasi sewenang-wenang dan pemanfaatan memori yang lebih rendah. (Diedit untuk menggaruk ide kurung; Saya melihat apa yang terjadi di sana dan tes terisolasi saya tidak menangkap masalah.)
amcgregor
Uh ... tidak. Setelah modifikasi Anda ini tidak lagi memberikan hasil yang valid. (265723 ≭ π) Anda masih perlu periode, hanya saja tidak tertinggal nol.
amcgregor
@ amcgregor menggunakan python 3?
qwr
Saya lakukan, meskipun saya terutama mengembangkan di bawah 2.7 dan membuat kode saya berfungsi di keduanya. Namun pada instalasi Mac 10.9 python3 kode Anda menyebabkan kesalahan segmentasi.
amcgregor
@ amcgregor Saya baru saja mengujinya, itu bekerja untuk saya (python 3.3.4)
qwr
6

C, 99

Langsung menghitung area / r ^ 2 lingkaran.

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;}

Fungsi ini akan menghitung pi dengan menghitung jumlah piksel dalam lingkaran jari-jari rkemudian membaginya dengan r*r(sebenarnya hanya menghitung satu kuadran). Dengan r10000, akurat ke 5 tempat desimal (3.1415904800). Parameter ke fungsi diabaikan, saya hanya menyatakan mereka di sana untuk menghemat ruang.

Jason C
sumber
6

Javascript, 43 36

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

xmenjadi zeta(2)=pi^2/6begitu sqrt(6*x)=pi. (47 karakter)

Setelah menggunakan properti distributif dan menghapus kurung keriting dari forloop yang Anda dapatkan:

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

(43 karakter)

Ia mengembalikan:

3.14159169865946

Edit:

Saya menemukan cara yang lebih singkat menggunakan produk Wallis:

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

(36 karakter)

Ia mengembalikan:

3.141591082792245
Jens Render
sumber
6

Python, Riemann zeta (58 41 char)

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

Atau luang dua karakter, tetapi gunakan scipy

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

Sunting : Disimpan 16 karakter (!) Berkat amcgregor

Evpok
sumber
1
Dapat berpotensi menghindari mathimpor dan sqrtpanggilan dengan memutar ke eksponensial sebagai gantinya:(6*sum(n**-2 for n in range(1,9**9)))**0.5
amcgregor
5

Javascript: 99 karakter

Menggunakan rumus yang diberikan oleh Simon Plouffe pada tahun 1996, ini bekerja dengan 6 digit presisi setelah titik desimal:

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)

Varian yang lebih panjang ini (130 karakter) memiliki ketepatan yang lebih baik, 15 digit setelah titik desimal:

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)

Saya membuat ini berdasarkan pada dua jawaban saya untuk pertanyaan ini .

Victor Stafusa
sumber
5

Rubi, 54 50 49

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

Versi online untuk pengujian.

Versi lain tanpa membuat array (50 karakter):

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

Versi online untuk pengujian.

David Herrmann
sumber
Sangat menarik untuk melihat perbedaan bahasa yang dapat diberikan oleh solusi ringkas tersebut. Sebagai contoh, terjemahan Python di atas adalah 105 karakter (setelah menggunakan beberapa trik kompresi kode sepele): a=__import__;reduce(a('operator').__add__,a('itertools').imap(lambda e:(-1.0)**e/(2*e+1)*4,xrange(9**6)))- perhatikan penggunaan xrange / imap; dalam Python 3 Anda dapat menghindari ini; pada dasarnya saya tidak ingin semua RAM Anda terkonsumsi membangun daftar dengan begitu banyak entri.
amcgregor
1
Anda benar sekali. Seringkali sangat nyaman untuk menggunakan (terutama Ruby) Array dan fungsi Enumerable, meskipun itu mungkin benar-benar bukan ide terbaik dalam hal kinerja dan kecepatan ... Metode Range.each alih-alih membuat peta.
David Herrmann
Ya, itu mungkin - hanya satu karakter lagi ...
David Herrmann
Jawaban pertama Anda tidak setepat jawaban kedua.
Josh
Bisakah Anda menguraikannya? Algoritma yang sama, output yang sama untuk saya?
David Herrmann
5

TI CAS, 35

lim(x*(1/(tan((180-360/x)/2))),x,∞)
Dokter
sumber
1
Saya melihat kembali ini dan saya benar-benar lupa cara kerjanya: P
TheDoctor
5

Perl - 35 byte

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

Menghasilkan presisi titik apung penuh. Derivasi formula yang digunakan dapat dilihat di tempat lain .

Penggunaan sampel:

$ perl pi.pl
3.14159265358979

Versi Presisi Sewenang-wenang

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

Perpanjang sesuai kebutuhan. Panjang iterasi (misalnya -329..-1) harus disesuaikan menjadi sekitar log 2 (10)3,322 kali jumlah digit.

3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211707

Atau, gunakan bigintsaja:

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

Ini berjalan lebih cepat, tetapi tidak termasuk titik desimal.

3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
primo
sumber
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]);}}

Output:

3.14159265

Tidak ada matematika yang terlibat. Hanya mencari versi TeX saat ini dan melakukan beberapa parsing primitif dari html yang dihasilkan. Akhirnya akan menjadi π menurut Wikipedia .

BryanJ
sumber
Saya terlambat 5 tahun, tetapi ini adalah celah standar yang dibuat 4 hari sebelum jawaban ini.
Benjamin Urquhart
5

Python 3 Monte Carlo (103 char)

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
Evpok
sumber
5

Bahasa Game Maker, 34

Mengasumsikan semua variabel tidak diinisialisasi sebagai 0. Ini adalah default di beberapa versi Game Maker.

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

Hasil:

3.14159169865946
Timtech
sumber
sangat bagus. juga, dalam C float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}lebih pendek dari yang ini
izabera
bahkan lebih pendek dengan 1e8bukannya 999999
izabera
Bisakah Anda menggunakan for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)untuk menyimpan byte (atau sebagai alternatif for(i=1;i++<1e8;))?
mbomb007
@ mbomb007 Sayangnya tidak, GML membutuhkan semua 3 parameter.
Timtech
4

Jawa - 83 55

Versi lebih pendek berkat Navin.

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

Versi lama:

class P{public static void main(String[]a){System.out.print(Math.toRadians(180));}}
TroyAndAbed
sumber
Ini tidak melakukan perhitungan apa pun.
Hosch250
Saya tidak mengerti downvote, meskipun - saya akan menjawab dengan "Math.toRadians (180)". Juga dipertanyakan, siapa yang menghitung pi: kompiler atau program. Tapi itu bukan bagian dari pertanyaan.
blabla999
2
@ user2509848 Itu pasti tidak: itu mengalikan 180oleh pi/180.
AJMansfield
Maksudmu itu mengalikan pi dengan 1? Ini pada dasarnya adalah hal yang sama. Saya tidak downvote, tapi saya pikir itu tidak penting.
Hosch250
1
Bisa lebih pendek: codegolf.stackexchange.com/a/22057/14610
Navin
4

R : 33 karakter

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

Semoga ini mengikuti aturan.

Mark Miller
sumber
3

Ruby, 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

Menggunakan beberapa formula yang tidak saya mengerti dan hanya menyalinnya. : P

Keluaran: 3.1415926535897913

Gagang pintu
sumber
3

Ruby, 12

p 1.570796*2

Aku sedang teknis "menghitung" pi perkiraan pi.

Gagang pintu
sumber
Tidak, Anda tidak menghitung pi secara teknis. Anda secara teknis menghitung 3.141592, yang kebetulan dekat dengan pi, tetapi tidak akan pernah bertemu dengan tepat acos(-1).
wchargin
@Wchar Ok, diedit
Doorknob
3
Saya tidak berpikir keras-coding pi / 2 kemudian mengalikannya dengan 2 benar-benar penting; intinya adalah untuk menghitung pi, tidak mengaburkan literal numerik.
Jason C
3

JavaScript - 19 byte

Math.pow(29809,1/9)

Hitung akar ke- 9 dari 29809 .

3.1415914903890925
primo
sumber