Bermain dengan Pi - Aproksimasi dengan Formula Viete dan Implementasi Menggunakan Haskell
Tentunya anda mengenal bilangan $\pi$, kan? Bilangan ini seringkali diaproksimasi sebagai $\frac{22}{7}$ atau dengan $3.14$. Tapi bagaimana kalau anda butuh lebih banyak digit? Kalau anda hafal beberapa digitnya mungkin anda dapat dengan mudah menyebutkan $\pi$ kira-kira $3.1415926535..$, tapi gimana kalau kita butuh sampai sangat banyak digit?
Ada beberapa metode yang bisa digunakan untuk mengaproksimasi nilai $\pi$. Salah satunya adalah formula Viete yang kita akan bahas di post ini.
Formula yang digunakan adalah
\begin{equation}
\frac{2}{\pi} \approx \prod_{i=1}^n \frac{a_i}{2}
\end{equation}
dengan $a_i = \sqrt{2 + a_{i-1}}$ dan $a_1 = \sqrt{2}$.
Bagaimana untuk $n$ yang besar? Gunakan saja komputer! Di sini saya mengimplementasikan formula Viete dengan menggunakan Haskell. Berikut kodenya :
Sekian, CMIIW.
Referensi :
Viete's Formula - Wikipedia
Ada beberapa metode yang bisa digunakan untuk mengaproksimasi nilai $\pi$. Salah satunya adalah formula Viete yang kita akan bahas di post ini.
Formula yang digunakan adalah
\begin{equation}
\frac{2}{\pi} \approx \prod_{i=1}^n \frac{a_i}{2}
\end{equation}
dengan $a_i = \sqrt{2 + a_{i-1}}$ dan $a_1 = \sqrt{2}$.
Bagaimana untuk $n$ yang besar? Gunakan saja komputer! Di sini saya mengimplementasikan formula Viete dengan menggunakan Haskell. Berikut kodenya :
sq2 n = do if (n == 1) then sqrt 2 else sqrt (2+(sq2 (n-1))) piApprox :: Integer -> Double piApprox n = (fromIntegral 2) / (product [(sq2 x)/(fromIntegral 2) | x <- [1..n]]) main :: IO() main = do n <- readLn print (piApprox n)
Sekian, CMIIW.
Referensi :
Viete's Formula - Wikipedia
Kode Haskell di atas dapat ditulis seperti ini:
BalasHapussq2 :: Integer -> Double
sq2 n
| n == 1 = sqrt 2
| otherwise = sqrt (2 + (sq2 (n - 1)))
piApprox :: Integer -> Double
piApprox n =
2 / (product [(sq2 x) / 2 | x <- [1 .. n]])
main :: IO ()
main = do
n <- readLn :: IO Integer
print (piApprox n)
Terima kasih untuk ilmunya :)
Siip, terima kasih atas tambahannya
Hapuskayanya bagusan kode vale deh -_-
Hapus