我这个开立方的 scheme 代码哪里有错。

2016-10-24 10:06:16 +08:00
 Zeahoo

在看 SICP 这本书,做到练习 1.8 的时候,Newton method 实现的代码如下:

(define (cubrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (cubrt-iter (improve guess x)
		 x)))

(define (improve guess x)
  (third guess (/ x guess)))

(define (third x y)
  (/ (+ (/ x (* y y))
	(* 2 y))
     3))

(define (good-enough? guess x)
  (< (abs (- (cube guess) x)) 0.001))

(define (cube x) (* x x x))
(define (abs x)
  (cond ((> x 0) x)
        ((= x 0) 0)
        ((< x 0) (- x)))
  )

(define (cubrt x)
  (cubrt-iter 1.0 x))

使用牛顿公式做开立方,但是不知道为什么执行的时候没有结果,大家帮我看下原因吧 :(

2810 次点击
所在节点    编程
3 条回复
tan90ds
2016-10-24 10:22:53 +08:00
你的 improve 函数和 third 函数有点怪,没仔细看但是感觉不像是正确的牛顿迭代法。
Zeahoo
2016-10-24 11:01:59 +08:00
Zeahoo
2016-10-24 11:02:47 +08:00
@tan90ds 一脸蒙蔽,终于知道原因了, third 里面 x 和 y 的参数搞反了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/314933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX