问题描述
实现一个计算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)
但是一些结果是错误的,这就是我所期望的:
结果(10 20)和(10 30)与我执行的函数返回的结果不匹配。 我做错了什么?谢谢,抱歉我的英语。
解决方法
您使用Int
进行计算,将导致Int
溢出。而是立即转换为Float
,然后对所有内容使用Float
。所以:
consigna3 x n = ((fromIntegral x)^n / factorial (fromIntegral n)) + consigna3 x (n-1)
此处从Int
到Float
有两个重要变化:首先,在x^n
处执行x :: Int
,但在{{1 }};其次,您在fromIntegral x^n
的地方进行fromIntegral x :: Float
,但在factorial n
的地方进行n :: Int
。