【发布时间】:2021-05-05 05:19:07
【问题描述】:
数字π可以用下面的无穷级数和来计算:
我想定义一个 Haskell 函数 roughlyPI,给定一个自然数 k,计算从 0 到 k 值的系列总和。
例如:roughlyPi 1000(或其他)=> 3.1415926535897922
我所做的是(在 VS Code 中):
roughlyPI :: Double -> Double
roughlyPI 0 = 2
roughlyPI n = e1/e2 + (roughlyPI (n-1))
where
e1 = 2**(n+1)*(factorial n)**2
e2 = factorial (2*n +1)
factorial 0 = 1
factorial n = n * factorial (n-1)
但它并没有真正起作用....
*Main> roughlyPI 100
NaN
我不知道怎么了。顺便说一句,我是 Haskell 的新手。
我真正想要的是能够输入一个数字,最后会给我PI。没那么难……
【问题讨论】:
-
你为什么觉得有问题?
-
因为在 VS Code 中,它并没有真正起作用.... *Main> 大概PI 100 NaN
-
计算阶乘然后将它们除以很快就会得到
Infinity / Infinity,这就是你得到NaN的原因。你应该基本上穿插乘法和除法,例如(1 * 2 * 3 * 4) / (5 * 6 * 7 * 8)应计算为1 / 5 * 2 / 6 * 3 / 7 * 4 / 8。 -
首先,如果你做一个更具描述性的标题会更好(大致解释你想要做什么),其次你应该解释代码有什么问题在帖子中 而不是作为评论发布。
标签: haskell functional-programming precision numeric numerical-methods