我正试图弄清楚如何使用Leibniz公式编写程序以近似pi。该函数采用错误E,并以某种方式给出pi近似值。
我根本不确定如何做到这一点。我开始编写辅助函数,但不知道要放入什么。有什么帮助吗?
谢谢!
答案 0 :(得分:1)
无论如何,这里是公式的直接翻译 - 包括删除取幂操作在内的小优化,这使得它比@ GoZoner的实现稍快一些:
(define (leibniz err)
(let loop ((n 0)
(prev +nan.0)
(curr 0.0))
(if (<= (abs (- curr prev)) err)
(* 4 curr)
(loop (add1 n)
curr
((if (even? n) + -) curr (/ 1 (add1 (+ n n))))))))
该过程继续迭代,直到系列的当前值与前一个值之间的差值小于或等于所提供的误差。错误应该是一个小数字,比如1e-6
。例如:
(leibniz 1e-6)
=> 3.1415946535856922
答案 1 :(得分:0)
Leibniz formula for PI是一个总和。该函数将递增n,直到n的summand小于E.
(define (leibniz err)
(define (summand n)
(/ (expt -1 n) (+ (* 2.0 n) 1)))
(let summing ((result 0) (n 0))
(let ((increment (summand n)))
(if (< (abs increment) err)
(* 4 (+ result increment))
(summing (+ result increment) (+ n 1))))))