Selasa, 24 Januari 2017

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 :

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

3 komentar:

  1. Kode Haskell di atas dapat ditulis seperti ini:

    sq2 :: 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 :)

    BalasHapus

-Mohon untuk tidak spam di komentar-