Haskell函数计算e ^ x

问题描述

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

但是一些结果是错误的,这就是我所期望的:

Result of the function

结果(10 20)和(10 30)与我执行的函数返回的结果不匹配。 我做错了什么?谢谢,抱歉我的英语。

解决方法

您使用Int进行计算,将导致Int溢出。而是立即转换为Float,然后对所有内容使用Float。所以:

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

此处从IntFloat有两个重要变化:首先,在x^n处执行x :: Int,但在{{1 }};其次,您在fromIntegral x^n的地方进行fromIntegral x :: Float,但在factorial n的地方进行n :: Int

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...