Aproximación entre pi y e
El día 11 de noviembre, se publicó en la cuenta de Twitter de Fermat's Library la siguiente curiosa identidad que relaciona los números e y pi:
Definir las siguientes funciones:
sumaTerminos :: Int -> Double aproximacion :: Double -> Int
tales que
- (sumaTerminos n) es la suma de los primeros n términos de la serie 1/(π²+ 1) + 1/(4π²+1) + 1/(9π²+1) + 1/(16π²+ ) + ... Por ejemplo,
sumaTerminos 10 == 0.14687821811081034 sumaTerminos 100 == 0.15550948345688423 sumaTerminos 1000 == 0.15641637221314514 sumaTerminos 10000 == 0.15650751113789382
- (aproximación x) es el menor número de términos que hay que sumar de la serie anterior para que se diferencie (en valor absoluto) de 1/(e²-1) menos que x. Por ejemplo,
aproximacion 0.1 == 1 aproximacion 0.01 == 10 aproximacion 0.001 == 101 aproximacion 0.0001 == 1013
Soluciones
sumaTerminos :: Int -> Double sumaTerminos 0 = 0 sumaTerminos n = 1 / (m^2 * pi^2 + 1) + sumaTerminos (n-1) where m = fromIntegral n aproximacion :: Double -> Int aproximacion x = head [n | n <- [0..] , abs (sumaTerminos n - 1 / (e^2 - 1)) < x] where e = exp 1