Types MIT方案Int VS Float

Types MIT方案Int VS Float,types,scheme,sicp,mit-scheme,Types,Scheme,Sicp,Mit Scheme,我一直在使用麻省理工学院的计划来测试这些练习。对于练习1.8,您的任务是编写一个与给定平方根函数类似的立方根函数。我的解决方案如下;然而,我注意到在cube root函数中,第一次调用cube iter的地方。如果第一个参数为1,则函数返回一些非常大的整数,如果为1.0,则将使用mit方案返回预期结果。使用scm解释器时,使用1和1.0时的输出没有差异。我的印象是这两者之间应该没有区别 代码: (定义(多维数据集根x) (立方体iter 1 x)) (定义(立方体iter猜测x) (如果(足够好

我一直在使用麻省理工学院的计划来测试这些练习。对于练习1.8,您的任务是编写一个与给定平方根函数类似的立方根函数。我的解决方案如下;然而,我注意到在cube root函数中,第一次调用cube iter的地方。如果第一个参数为1,则函数返回一些非常大的整数,如果为1.0,则将使用mit方案返回预期结果。使用scm解释器时,使用1和1.0时的输出没有差异。我的印象是这两者之间应该没有区别

代码:

(定义(多维数据集根x)
(立方体iter 1 x))
(定义(立方体iter猜测x)
(如果(足够好?猜x)
猜测
(立方体iter(改进猜测x)x)))
(定义(足够好?猜x)
(<(abs(-x(立方体猜测)).001))
(定义(改进猜测x)
(/(+(/x(*猜-猜))(*2猜))
3)))
(定义(立方体x)(*x))
mit方案中(立方体iter 1 x))版本的输出:1592506

mit方案中(立方体iter 1.0 x))版本的输出:3.0000005410641766

SCM中(立方体iter 1 x))版本的输出:3.0000005410641766

SCM中(立方体iter 1.0 x))版本的输出:3.0000005410641766


麻省理工学院方案的版本是9.2,它不是一个大整数,它是一个非常接近
3
且比
3.0000005410641766
更精确的大整数,类似于raio的1/2。仔细观察,您将看到命名者和分母之间的
/

通过使用精确数字,支持全数字塔的方案实现永远不会降低最常见数学运算的精确性,除非它是继承不精确的,如
log
。通过使用one不精确值,如
1.0
,所有结果都是不精确的,因为
1
1
,而
1.0
1
附近


因为你是近似的立方根,我想
1.0
是正确的使用值,因为结果足够好,所以在这里返回准确的数字是不真实的。如果你在做其他事情,结果是精确的,返回一个比率是正确的做法,那些不想要精确结果的人可以使用过程
exact->inexecute
,或者至少传递一个不精确值以获得不精确值。

这不是一个大整数,它是一个大而精确的raio类型的1/2,非常接近
3
,比
3.0000005410641766
更精确。仔细观察,您将看到命名者和分母之间的
/

通过使用精确数字,支持全数字塔的方案实现永远不会降低最常见数学运算的精确性,除非它是继承不精确的,如
log
。通过使用one不精确值,如
1.0
,所有结果都是不精确的,因为
1
1
,而
1.0
1
附近

因为你是近似的立方根,我想
1.0
是正确的使用值,因为结果足够好,所以在这里返回准确的数字是不真实的。如果你在做其他事情,结果是精确的,返回一个比率是正确的做法,那些不想要精确结果的人可以使用过程
exact->inexecute
,或者传递至少一个不精确值以获得不精确值

(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))