计算e^x的Haskell函数



实现一个计算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)

IntFloat有两个关键的变化:首先,你在x :: Int的地方做x^n,但我在fromIntegral x :: Float的地方做了fromIntegral x^n;第二,你在n :: Int的地方做factorial n,但我在fromIntegral n :: Float的地方做了factorial (fromIntegral n)

最新更新