Haskell 计算e^x的函数
Haskell Function that calculates 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)
但有些结果是错误的,这是我所期望的:
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) 与我执行的函数不匹配 returns。
我做错了什么?谢谢,对不起我的英语。
您正在使用 Int
进行会溢出 Int
的计算。相反,立即转换为 Float
,然后对所有内容使用 Float
。所以:
consigna3 x n = ((fromIntegral x)^n / factorial (fromIntegral n)) + consigna3 x (n-1)
这里有两个从 Int
到 Float
的重要变化:首先,你在 x :: Int
的地方做 x^n
,但我在 fromIntegral x^n
的地方 fromIntegral x :: Float
;其次,你在 n :: Int
处做 factorial n
,但我在 fromIntegral n :: Float
.
处做 factorial (fromIntegral n)
实现一个函数,计算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) 与我执行的函数不匹配 returns。 我做错了什么?谢谢,对不起我的英语。
您正在使用 Int
进行会溢出 Int
的计算。相反,立即转换为 Float
,然后对所有内容使用 Float
。所以:
consigna3 x n = ((fromIntegral x)^n / factorial (fromIntegral n)) + consigna3 x (n-1)
这里有两个从 Int
到 Float
的重要变化:首先,你在 x :: Int
的地方做 x^n
,但我在 fromIntegral x^n
的地方 fromIntegral x :: Float
;其次,你在 n :: Int
处做 factorial n
,但我在 fromIntegral n :: Float
.
factorial (fromIntegral n)