首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scheme leibniz级数

Scheme leibniz级数
EN

Stack Overflow用户
提问于 2021-01-16 01:37:50
回答 1查看 71关注 0票数 0

我在试着找出我的数学出了什么问题。

代码语言:javascript
复制
(define (make-pi tolerance)
  (let loop ((n 0)
             (prev +nan.0)
             (curr 0.0))
    (if (< (abs (- curr prev)) tolerance)
        (* 4.0 curr)
        (loop (add1 n)
              curr
              ((if (even? n) + -) curr (/ 1.0 (add1 (+ n n))))))))

输出必须是:

代码语言:javascript
复制
(make-pi 0.1) =>  3.09162380666784
(make-pi 0.001) =>  3.1410926536210413
(make-pi 0.0000001) => 3.141592603589817

但我一直在想:

代码语言:javascript
复制
(make-pi 0.1) =>  2.9760461760461765
(make-pi 0.001) =>  3.143588659585789
(make-pi 0.0000001) => 3.1415928535897395
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-16 02:05:56

问题出在你的耐力测试上。你在测试容差,然后乘以4。反过来做(返回prev而不是curr),你就会得到你想要的结果:

代码语言:javascript
复制
(define (make-pi tolerance)
  (let loop ([n 0]
             [prev +nan.0]
             [curr 0.0])
    (if (< (abs (- curr prev)) (/ tolerance 4))
        (* 4 prev)
        (loop (add1 n)
              curr
              ((if (even? n) + -) curr (/ 1 (+ 1 n n)))))))

> (make-pi 0.1)
3.09162380666784
> (make-pi 0.001)
3.1410926536210413
> (make-pi 0.0000001)
3.141592603589817
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65740928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档