Cálculo de pi usando la fórmula de Vieta
La fórmula de Vieta para el cálculo de pi es la siguiente
Definir las funciones
1 2 |
aproximacionPi :: Int -> Double errorPi :: Double -> Int |
tales que
- (aproximacionPi n) es la aproximación de pi usando n factores de la fórmula de Vieta. Por ejemplo,
1 2 3 4 5 |
aproximacionPi 5 == 3.140331156954753 aproximacionPi 10 == 3.1415914215112 aproximacionPi 15 == 3.141592652386592 aproximacionPi 20 == 3.1415926535886207 aproximacionPi 25 == 3.141592653589795 |
- (errorPi x) es el menor número de factores de la fórmula de Vieta necesarios para obtener pi con un error menor que x. Por ejemplo,
1 2 3 4 5 6 7 8 |
errorPi 0.1 == 2 errorPi 0.01 == 4 errorPi 0.001 == 6 errorPi 0.0001 == 7 errorPi 1e-4 == 7 errorPi 1e-14 == 24 pi == 3.141592653589793 aproximacionPi 24 == 3.1415926535897913 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
-- 1ª definición de aproximacionPi aproximacionPi :: Int -> Double aproximacionPi n = product [2 / aux x | x <- [0..n]] where aux 0 = 1 aux 1 = sqrt 2 aux n = sqrt (2 + aux (n-1)) -- 2ª definición de aproximacionPi aproximacionPi2 :: Int -> Double aproximacionPi2 n = product [2/x | x <- 1 : xs] where xs = take n $ iterate (\x -> sqrt (2+x)) (sqrt 2) -- 3ª definición de aproximaxionPi aproximacionPi3 :: Int -> Double aproximacionPi3 n = product (2 : take n (map (2/) xs)) where xs = sqrt 2 : [sqrt (2 + x) | x <- xs] -- 1ª definición de errorPi errorPi :: Double -> Int errorPi x = head [n | n <- [1..] , abs (pi - aproximacionPi n) < x] -- 2ª definición de errorPi errorPi2 :: Double -> Int errorPi2 x = until aceptable (+1) 1 where aceptable n = abs (pi - aproximacionPi n) < x |