(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,
-- 1ª definición de sumaTerminos
sumaTerminos ::Int->Double
sumaTerminos n =sum[1/(((x ^2)*(pi^2))+1)| x <-[1 .. fromIntegral n]]-- 2ª definición de sumaTerminos
sumaTerminos2 ::Int->Double
sumaTerminos2 0=0
sumaTerminos2 n =1/(m^2*pi^2+1)+ sumaTerminos2 (n-1)where m =fromIntegral n
-- Definición de aproximacion
aproximacion ::Double->Int
aproximacion x =head[n | n <-[0..]
, abs(sumaTerminos n -1/(e^2-1))< x]where e =exp1
-- 1ª definición de sumaTerminos
sumaTerminos :: Int -> Double
sumaTerminos n =
sum [1 / (((x ^ 2) * (pi ^ 2)) + 1) | x <- [1 .. fromIntegral n]]
-- 2ª definición de sumaTerminos
sumaTerminos2 :: Int -> Double
sumaTerminos2 0 = 0
sumaTerminos2 n = 1 / (m^2 * pi^2 + 1) + sumaTerminos2 (n-1)
where m = fromIntegral n
-- Definición de aproximacion
aproximacion :: Double -> Int
aproximacion x =
head [n | n <- [0..]
, abs (sumaTerminos n - 1 / (e^2 - 1)) < x]
where e = exp 1
Pensamiento
«Sólo sé que no se nada» contenía la jactancia de un excesivo saber, puesto que olvidó añadir: y aun de esto mismo no estoy completamente seguro.
(graficas xs) dibuja las gráficas de los números de dígitos del factorial de k (para k en xs) y de la recta y = 5.5 x. Por ejemplo, (graficas [0,500..10^6]) dibuja
Nota: Este ejercicio está basado en el problema How many digits? de Kattis en donde se impone la restricción de calcular, en menos de 1 segundo, el número de dígitos de los factoriales de 10.000 números del rango [0,1.000.000].