首页 文章

MIT Scheme Int VS Float

提问于
浏览 151
0

我一直在使用mit-scheme来测试练习中的SICP . 对于练习1.8,您的任务是编写一个类似于给定平方根函数的立方根函数 . 我的解决方案如下:但是,我注意到在cube-root函数中,第一次调用cube-iter . 如果第一个参数是1,则函数返回一个非常大的整数,如果它是1.0,它将使用mit-scheme返回预期结果 . 使用scm解释器时,使用1和1.0时输出之间没有区别 . 我的印象是两者之间应该没有区别 .

码:

(define (cube-root x)
  (cube-iter 1 x))

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

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

(define (improve guess x)
  (/ (+ (/ x (* guess guess)) (* 2 guess))
   3)))

(define (cube x) (* x x x))

mit-scheme中的(cube-iter 1 x))版本的输出:1592506 ......

mit-scheme中(cube-iter 1.0 x))版本的输出:3.0000005410641766

SCM中(cube-iter 1 x))版本的输出:3.0000005410641766

SCM中(cube-iter 1.0 x))版本的输出:3.0000005410641766

mit-scheme的版本是9.2

1 回答

  • 2

    它不是一个大的整数,它是一个像1/2的大型精确raio,它非常接近 3 并且比 3.0000005410641766 更准确 . 仔细观察,你会看到提名者和分母之间的 / .

    通过使用精确数字,支持完整数字塔的方案实现永远不会降低最常见数学运算的准确性,除非它继承不精确,如 log . 通过使用 one 不精确值,如 1.0 ,所有结果都是不精确的,因为 11 ,而 1.01 范围内 .

    由于你接近立方根,我猜 1.0 是正确的值,因为结果足够好所以返回确切的数字并不是真实的 . 如果你正在做其他结果确切返回的事情,那么比率是正确的事情,那些不想要精确结果的人可以使用过程 exact->inexact 或传递至少一个不准确的值来获得不准确的值 .

相关问题