如何解决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)
但是一些结果是错误的,这就是我所期望的:
结果(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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。