Ir al contenido principal

Aproximación del número pi

Una forma de aproximar el número π es usando la siguiente igualdad:

 π         1     1*2     1*2*3     1*2*3*4
--- = 1 + --- + ----- + ------- + --------- + ....
 2         3     3*5     3*5*7     3*5*7*9

Es decir, la serie cuyo término general n-ésimo es el cociente entre el producto de los primeros n números y los primeros n números impares:

            Π i
s(n) =  -----------
         Π (2*i+1)

Definir la función

aproximaPi :: Double -> Double

tal que (aproximaPi n) es la aproximación del número π calculada con la serie anterior hasta el término n-ésimo. Por ejemplo,

aproximaPi 10   ==  3.141106021601377
aproximaPi 30   ==  3.1415926533011587
aproximaPi 50   ==  3.1415926535897922

Soluciones

-- 1ª solución (por comprensión):
aproximaPi :: Double -> Double
aproximaPi n =
    2 * sum [product [1..i] / product [1,3..2*i+1] | i <- [0..n]]

-- 2ª solución (por recursión):
aproximaPi2 :: Double -> Double
aproximaPi2 0 = 2
aproximaPi2 n =
    aproximaPi2 (n-1) + 2 * product [1..n] / product [3,5..2*n+1]