【发布时间】:2017-01-05 13:56:15
【问题描述】:
> 固定,
这不是一个巨大的数字,而是两个巨大数字的一小部分,所以我误报了。算法是对的;修改最后一个输入 参数现在解释器将其检索为十进制逗号,并且 看起来一直是个小数字。
我正在通过 SICP 和 Scheme 的解释器做练习 1.8 ̵f̵̵r̵̵e̵̵e̵̵z̵̵e̵s̵ 在我评估我的算法时返回错误的答案。有人知道为什么吗?
牛顿的立方根方法基于以下事实: 如果 y 是 x 的立方根的近似值,则 值 (x/(y^2)+(2*y))/3 给出了更好的近似值。 使用此公式可以实现类似于平方根过程的立方根过程。
(define (cubert x)
(cubert-iter x x 1))
(define (cubert-iter x previous guess)
(if (good-enough previous guess)
guess
(cubert-iter x guess (improve x guess))))
(define (improve x guess)
(/ (+ (/ x
(square guess))
(* 2
guess))
3))
(define (good-enough previous guess)
(< (/ (max (square previous)
(square guess))
(min (square previous)
(square guess)))
tolerance))
(define tolerance 2)
(cubert 1000) ̴f̴̴r̴̴e̴̴e̴̴z̴̴e̴s̴给出一个巨大的100位数字 (cubert 27) 返回类似 3049534534593845092305345 它可能有评估顺序错误,但我看不到它
【问题讨论】:
-
是否有特定的输入导致您的算法冻结?
-
(improve 1000) 产生 334,但运行整个算法 (cubert 1000) 冻结它可能有无限循环或评估顺序错误,但我看不到它
-
那(cubert 1000.0)呢?
-
已修复,它不是一个巨大的数字,而是两个巨大数字的一小部分,所以是误报。算法是对的;现在修改最后一个输入参数,解释器将其检索为十进制逗号,看起来就像它一直以来的小数字。
标签: algorithm scheme evaluation sicp mit-scheme