计算 e^x 的 Haskell 函数

标签 haskell recursion taylor-series

实现一个函数,计算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
结果 (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 ,但我做 fromIntegral x^n哪里fromIntegral x :: Float ;第二,你做factorial n哪里n :: Int ,但我做 factorial (fromIntegral n)哪里fromIntegral n :: Float .

关于计算 e^x 的 Haskell 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64282127/

相关文章:

haskell - 为什么这两个 haskell 函数不等价?

haskell - Haskell中如何确定文字的类型?

haskell - 正斜杠在haskell中意味着什么?

java - 如何递归计算数组中负数的数量(Java)?

javascript - 递归函数 指数函数

haskell - 什么是 super 组合子和常量应用形式?

c++ - 递归函数的时间复杂度,其中递归减少了大小

Python递归函数错误: "maximum recursion depth exceeded"

python - 无法为 "high"x 计算 e^(-x)

c - 实现麦克劳林级数但得到错误的答案