Pi salah
Metode komputasi pi yang umum adalah dengan melemparkan "anak panah" ke dalam kotak 1x1 dan melihat tanah mana dalam satuan lingkaran dibandingkan dengan total yang dilemparkan:
loop
x = rand()
y = rand()
if(sqrt(x*x + y*y) <= 1) n++
t++
pi = 4.0*(n/t)
Tulislah sebuah program yang kelihatannya harus menghitung pi dengan benar (menggunakan pi ini atau metode umum lainnya dalam menghitung pi) tetapi hitung tau (tau = 2 * pi = 6.283185307179586 ...) sebagai gantinya. Kode Anda harus menghasilkan setidaknya 6 desimal pertama: 6.283185
Pemenang dimahkotai 6 Juni (satu minggu dari hari ini).
popularity-contest
underhanded
pi
Kyle Kanos
sumber
sumber
1
tetapi mengembalikan2
. Siapa yang kita bodohkan di sini?Jawaban:
JavaScript
Tolong, saya terjebak di pabrik alam semesta , dan saya tidak yakin apa yang saya lakukan.
Math.atan2
seharusnya mengembalikan pi dengan nilai bagus, kan?Math.atan2(0, -0)
mengembalikan pi, jadi jika saya kurangi, dan tambahkan, saya harus tetap memiliki pi.sumber
π - (-π)
>>> 0 === -0 ;true ;>>> Math.atan2(0, 0) ;0 ;>>> Math.atan2(0, -0) ;3.141592653589793
DASAR
(Lebih khusus, Chipmunk Basic )
Ini menggunakan seri tak terbatas yang ditemukan oleh Nilakantha Somayaji di abad ke-15:
Keluaran
Jika Anda tidak tahu apa yang sedang terjadi, berikut adalah beberapa petunjuk:
dan
sumber
i
samafalse
? Dan kemudian Anda menambahkannya2
? Dan itu berhasil ???i == false
yang mirip dengani == 0
. Intinya adalah bahwa nilai awal untuk akumulatorpi
bukanlah 0 ...false + 2 == 2
: Dbool
tipe, dan menggunakan0
dan tidak nol untuk mewakilifalse
dan secaratrue
berulang. Bukannya elegan, tapi hei, begitulah cara kerjanya.C - Panjang setengah lingkaran unit
Salah satu cara untuk menghitung π adalah hanya untuk mengukur jarak titik
(1, 0)
perjalanan ketika berputar di sekitar asal untuk(-1, 0)
karena akan setengah keliling lingkaran satuan (yang 2π ).Namun, tidak ada
sin(x)
ataucos(x)
diperlukan karena ini dapat dilakukan dengan melangkah di sekitar titik asal dan menambahkan jarak yang ditempuh titik untuk setiap langkah . Semakin kecil ukuran untuk setiap langkah, semakin akurat π yang akan Anda dapatkan.Catatan: Langkah ini akan berakhir ketika y di bawah nol (yang sama seperti saat melewati
(-1, 0)
).Ini memberikan output sebagai berikut:
sumber
length
Makro Anda tidak memiliki sqrt. Apakah itu dimaksudkan?x
dany
juga bertukar antara definisi dan panggilan (tanpa efek)sqrt
itu sengaja dihilangkan sehingga nilai dari pi dicetak sebagai 6,28 ... Juga 1 untuk memerhatikanx
dany
yang saya tidak!C
(Ini akhirnya lebih panjang dari yang dimaksudkan, tapi aku akan mempostingnya ...)
Pada abad ke-17, Wallis menerbitkan seri tak terbatas untuk Pi:
(Lihat Produk Infinite Jenis Wallis dan Catalan Baru untuk π, e, dan √ (2 + √2) untuk informasi lebih lanjut)
Sekarang, untuk menghitung Pi, pertama-tama kita harus mengalikan dua dengan faktor faktor penyebut:
Solusi saya kemudian menghitung deret tak terhingga untuk Pi / 2 dan dua dan kemudian mengalikan kedua nilai tersebut bersama-sama. Perhatikan bahwa produk tak terbatas sangat lambat untuk berkumpul ketika menghitung nilai akhir.
keluaran:
sumber
Seri Java - Nilakantha
Seri Nilakantha diberikan sebagai:
Jadi untuk setiap istilah, penyebut dikonstruksikan dengan mengalikan bilangan bulat berurutan, dengan awal naik 2 setiap istilah. Perhatikan bahwa Anda menambahkan / mengurangi istilah bergantian.
Setelah lima ratus istilah, kami mendapatkan estimasi pi yang masuk akal:
sumber
C ++: Madhava of Sangamagrama
Seri tak terbatas ini sekarang dikenal sebagai Madhava-Leibniz :
Mulailah dengan akar kuadrat dari 48 dan kalikan dengan hasil dari jumlah (-3) -k / (2k +1). Sangat mudah dan sederhana untuk diimplementasikan:
Keluaran:
sumber
Python - Sebuah Alternatif untuk seri Nilakantha
Ini adalah seri tak hingga untuk menghitung pi yang cukup mudah dimengerti.
Untuk rumus ini, ambil 6 dan mulai berganti-ganti antara menambah dan mengurangi pecahan dengan pembilang 2 dan penyebut yang merupakan produk dari dua bilangan bulat berturut-turut dan jumlah mereka. Setiap fraksi berikutnya mulai set bilangan bulatnya naik sebesar 1. Lakukan ini bahkan beberapa kali dan hasilnya mendekati pi.
yang memberi 6,283185.
sumber
Math.h:
Output: 6.28
#include "Math.h" tidak sama dengan #include, tetapi hanya dengan melihat file utama, hampir tidak ada yang berpikir untuk memeriksanya. Jelas mungkin, tetapi masalah serupa muncul dalam proyek yang sedang saya kerjakan, dan tidak terdeteksi untuk waktu yang lama.
sumber