计算e^x的Haskell函数

计算e^x的Haskell函数,haskell,recursion,taylor-series,Haskell,Recursion,Taylor Series,实现一个计算e^x值的函数,x是该函数的一个参数,一个整数。 为此,使用泰勒级数展开来计算e。 除指数x外,函数还将作为参数接收序列的项数,其最大值为n。 为了解析此函数,必须使用递归 我做了这个: 阶乘0=1 阶乘n=n*阶乘(n-1) 委托A3::Int->Int->Float 3 0=1 委托方A3 x n=(从积分(x^n)/从积分(阶乘n))+委托方A3 x(n-1) 但有些结果是错误的,这是我所期望的: 结果(1020)和(1030)与我所做的函数返回的结果不匹配。 我做错了什么

实现一个计算e^x值的函数,x是该函数的一个参数,一个整数。 为此,使用泰勒级数展开来计算e。 除指数x外,函数还将作为参数接收序列的项数,其最大值为n。 为了解析此函数,必须使用递归

我做了这个:

阶乘0=1
阶乘n=n*阶乘(n-1)
委托A3::Int->Int->Float
3 0=1
委托方A3 x n=(从积分(x^n)/从积分(阶乘n))+委托方A3 x(n-1)
但有些结果是错误的,这是我所期望的:

结果(1020)和(1030)与我所做的函数返回的结果不匹配。
我做错了什么?感谢并为我的英语感到抱歉。

您正在使用
Int
进行将溢出
Int
的计算。相反,请立即转换为
Float
,然后对所有内容使用
Float
。因此:

consigna3 x n = ((fromIntegral x)^n / factorial (fromIntegral n)) + consigna3 x (n-1)

这里从
Int
Float
有两个关键的变化:首先,你做
x^n
where
x::Int
,但我做
from integral x^n
where
from integral x::Float
;第二,你做了
factorial n
where
n::Int
,但我做了
factorial(from integral n)
where
from integral n::Float

你对
函数3
是否有预期的结果,包括
10
n
的较小值?我怀疑
function3
的实现方式受浮点舍入误差的影响较小。
factorial 30
远大于最大
Int
值。您应该使用
Integer
进行类似的计算。此外,我建议使用
Double
而不是
Float
——您需要尽可能精确地执行操作。请将预期结果复制为文本,而不是文本图像。