实现一个计算e^x值的函数,x是函数的一个参数,一个整数。要做到这一点,请使用泰勒级数展开来计算e的效力。除了指数x之外,函数还将接收级数的项数作为参数,该级数将作为n的最大值进行运算。为了解析此函数,必须使用递归。
我做了这个:
factorial 0 = 1
factorial n = n * factorial (n-1)
consigna3::Int->Int->Float
consigna3 _ 0 = 1
consigna3 x n = (fromIntegral(x^n) / fromIntegral(factorial n)) + consigna3 x (n-1)
但有些结果是错误的,这就是我所期望的:
Ejemplo 1: Main> funcion3 1 1
2.0
Ejemplo 2: Main> funcion3 1 10
2.718282
Ejemplo 3: Main> funcion3 2 10
7.388997
Ejemplo 4: Main> funcion3 10 20
21991.48
Ejemplo 5: Main> funcion3 10 30
22026.46
Ejemplo 6: Main> funcion3 0 30
1.0
结果(1020(和(1030(与我所做的函数返回的结果不匹配。我做错了什么?谢谢并为我的英语感到抱歉。
您正在使用Int
进行将溢出Int
的计算。相反,请立即转换为Float
,然后对所有内容使用Float
。因此:
consigna3 x n = ((fromIntegral x)^n / factorial (fromIntegral n)) + consigna3 x (n-1)
从Int
到Float
有两个关键的变化:首先,你在x :: Int
的地方做x^n
,但我在fromIntegral x :: Float
的地方做了fromIntegral x^n
;第二,你在n :: Int
的地方做factorial n
,但我在fromIntegral n :: Float
的地方做了factorial (fromIntegral n)
。