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.
code-golf
pi
approximation
poseidon
sumber
sumber
Jawaban:
Python3, 7
Berjalan di shell interaktif
Output:,
3.1415929203539825
koreksi ke 6 tempat desimalDan 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
sumber
355/113
. Terendah sebagai jawaban:3+.14159
. Saya tidak melihat banyak perbedaan, sungguh.PHP -
132127125124 byteSimulasi dasar Monte-Carlo. Setiap 10 juta iterasi, ia mencetak status saat ini:
Terima kasih kepada cloudfeet dan zamnuts untuk sarannya!
Output sampel:
sumber
$j+=$x*$x+$y*$y<=1;
yang akan menghemat empat byte.$k+=1/4;
danprint $j/$k
dapat dikurangi menjadi$k++;
danprint 4*$j/$k
untuk byte lain.J 6
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:
sumber
atan(0) + pi
. Saya tidak berpikir penggunaan fungsi trigonometri dan pi itu sendiri harus dihitung sebagai "perhitungan".Arg
( maksudnya , argumen bilangan kompleks) bukan fungsi trigonometrik, meskipun memiliki nilai yang mirip dengan arctangentatan(0) + pi
.Perl, 42 byte
Ini menghitung π menggunakan rumus Leibniz :
999999 digunakan sebagai n terbesar untuk mendapatkan ketepatan lima angka desimal.
Hasil:
3.14159165358977
sumber
Piet, banyak kode
Bukan jawaban saya, tapi ini solusi terbaik yang pernah saya lihat untuk masalah ini:
Pemahaman saya adalah bahwa ia menambahkan piksel dalam lingkaran dan membaginya dengan jari-jari, dan sekali lagi. Itu adalah:
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
sumber
Secara teknis AKU MENGHITUNG, 9
TEKNIS AKU MASIH HITUNG, 10
AKU MENGHITUNG SEGERA, 8
SAYA AKAN PI, 12
Dan secara teknis, jawaban ini bau.
sumber
APL - 6
Keluaran
3.141592654
. Itu menghitung dua kali arcsine dari 1.Solusi 13-char adalah:
Ini output
3.141591654
untuk saya, yang cocok dengan presisi yang diminta.Ia menggunakan
+ 4/1 - 4/3 + 4/5 - 4/7 ...
seri sederhana untuk menghitung.sumber
¯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?2 * asin(1)
sedikit curang.sqrt(1-theta^2)
(yang muncul dalam banyak identitas trigonometri) di beberapa titik dan kehilangan beberapa presisi di suatu tempat, berakhir dengan sedikit negatif1-theta^2
.acos -0.75
. Tidak mungkin menghitungnya1 - 0.75 ^ 2
negatif.J - 5 byte
Ini artinya
|log(-1)|
.sumber
ln(e^(42*pi))/42
ataupi*113/113
.Google Calculator, 48
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
sumber
stick of butter
lucu dan lucu tapi ini pada dasarnya adalahpi*x/x+y-y
identitas aljabar lain .Oktaf, 31
Menghitung luas seperempat lingkaran dengan jari-jari 2, melalui integrasi numerik.
sumber
Mathematica 6
sumber
Python, 88
Solusi:
Contoh output dalam shell Python:
Berhasil menghindari impor. Dapat dengan mudah ditukar dengan menggunakan pustaka Desimal presisi acak; cukup ganti
3.
denganDecimal('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)
, dllsumber
bahasa assembly x86 (5 karakter)
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:
[untuk 27 karakter]
sumber
fldpi
dilakukan?asin(-1)
tidakfldpi
terlalu 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.bc -l, 37 byte
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:
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:Rumus berulang menurut Newton-Raphson adalah:
sin'
===cos
dancos(pi)
===-1
, jadi kami cukup memperkirakancos
istilah untuk mendapatkan:Keluaran:
sumber
python -
4745pi sebenarnya sedang dihitung tanpa fungsi trigonometri atau konstanta.
hasil:
sumber
C, 99
Langsung menghitung area / r ^ 2 lingkaran.
Fungsi ini akan menghitung pi dengan menghitung jumlah piksel dalam lingkaran jari-jari
r
kemudian membaginya denganr*r
(sebenarnya hanya menghitung satu kuadran). Denganr
10000, akurat ke 5 tempat desimal (3.1415904800). Parameter ke fungsi diabaikan, saya hanya menyatakan mereka di sana untuk menghemat ruang.sumber
Javascript,
4336x
menjadizeta(2)=pi^2/6
begitusqrt(6*x)=pi
. (47 karakter)Setelah menggunakan properti distributif dan menghapus kurung keriting dari
for
loop yang Anda dapatkan:(43 karakter)
Ia mengembalikan:
Edit:
Saya menemukan cara yang lebih singkat menggunakan produk Wallis:
(36 karakter)
Ia mengembalikan:
sumber
Python, Riemann zeta (
5841 char)Atau luang dua karakter, tetapi gunakan scipy
Sunting : Disimpan 16 karakter (!) Berkat amcgregor
sumber
math
impor dansqrt
panggilan dengan memutar ke eksponensial sebagai gantinya:(6*sum(n**-2 for n in range(1,9**9)))**0.5
Javascript: 99 karakter
Menggunakan rumus yang diberikan oleh Simon Plouffe pada tahun 1996, ini bekerja dengan 6 digit presisi setelah titik desimal:
Varian yang lebih panjang ini (130 karakter) memiliki ketepatan yang lebih baik, 15 digit setelah titik desimal:
Saya membuat ini berdasarkan pada dua jawaban saya untuk pertanyaan ini .
sumber
Rubi,
545049Versi online untuk pengujian.
Versi lain tanpa membuat array (50 karakter):
Versi online untuk pengujian.
sumber
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.TI CAS, 35
sumber
Perl - 35 byte
Menghasilkan presisi titik apung penuh. Derivasi formula yang digunakan dapat dilihat di tempat lain .
Penggunaan sampel:
Versi Presisi Sewenang-wenang
Perpanjang sesuai kebutuhan. Panjang iterasi (misalnya
-329..-1
) harus disesuaikan menjadi sekitar log 2 (10) ≈ 3,322 kali jumlah digit.Atau, gunakan
bigint
saja:Ini berjalan lebih cepat, tetapi tidak termasuk titik desimal.
sumber
C # 192
Output:
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 .
sumber
Python 3 Monte Carlo (103 char)
sumber
Bahasa Game Maker, 34
Mengasumsikan semua variabel tidak diinisialisasi sebagai 0. Ini adalah default di beberapa versi Game Maker.
Hasil:
sumber
float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}
lebih pendek dari yang ini1e8
bukannya 999999for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)
untuk menyimpan byte (atau sebagai alternatiffor(i=1;i++<1e8;)
)?Jawa -
8355Versi lebih pendek berkat Navin.
Versi lama:
sumber
180
olehpi/180
.R : 33 karakter
Semoga ini mengikuti aturan.
sumber
Ruby, 82
Menggunakan beberapa formula yang tidak saya mengerti dan hanya menyalinnya. : P
Keluaran:
3.1415926535897913
sumber
Ruby, 12
Aku sedang teknis "menghitung"
piperkiraan pi.sumber
acos(-1)
.JavaScript - 19 byte
Hitung akar ke- 9 dari 29809 .
sumber