Math 编写程序用莱布尼兹公式在Scheme中逼近pi?

Math 编写程序用莱布尼兹公式在Scheme中逼近pi?,math,scheme,pi,Math,Scheme,Pi,我想知道如何编写一个程序,用莱布尼兹公式来近似圆周率。该函数接受一个误差E,并以某种方式给出pi近似值 我根本不知道怎么做。我开始写一个助手函数,但不知道该放什么进去。有什么帮助吗 谢谢 这是一个总和。函数将递增n,直到n的和小于E (define (leibniz err) (define (summand n) (/ (expt -1 n) (+ (* 2.0 n) 1))) (let summing ((result 0) (n 0)) (let ((increme

我想知道如何编写一个程序,用莱布尼兹公式来近似圆周率。该函数接受一个误差E,并以某种方式给出pi近似值

我根本不知道怎么做。我开始写一个助手函数,但不知道该放什么进去。有什么帮助吗

谢谢

这是一个总和。函数将递增n,直到n的和小于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))))))
(定义(莱布尼茨错误)
(定义(和n)
(/(expt-1n)(+(*2.0n)1)))
(设求和((结果0)(n0))
(let((增量(和n)))
(如果(<(abs增量)错误)
(*4(+结果增量))
(求和(+结果增量)(+n1()())))
这是一个总和。函数将递增n,直到n的和小于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))))))
(定义(莱布尼茨错误)
(定义(和n)
(/(expt-1n)(+(*2.0n)1)))
(设求和((结果0)(n0))
(let((增量(和n)))
(如果(<(abs增量)错误)
(*4(+结果增量))
(求和(+结果增量)(+n1()())))

Leibniz公式是计算π的一种相当低效的方法,除非使用某种收敛加速技术。根据,使用数列的直接求和计算π到10个正确的小数位需要大约5000000000项

无论如何,这里是公式的直接翻译-通过一些小的优化,包括删除求幂运算,这使得它比@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))))))))

作为参考,莱布尼茨公式有几个非常简短的实现,包括一个。

莱布尼茨公式是计算π的一种相当低效的方法,除非使用某种收敛加速技术。根据,使用数列的直接求和计算π到10个正确的小数位需要大约5000000000项

无论如何,这里是公式的直接翻译-通过一些小的优化,包括删除求幂运算,这使得它比@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))))))))
作为参考,这里有几个莱布尼茨公式的简短实现——包括一个