scheme用牛顿公式求立方根问题

我使用牛顿公式求一个数x的立方根,首先用y去测试,如果y^3不够接近,则让y=((x/y^2)+2y)/3 ,继续递归测试,直到找到足够接近的立方根。

这是我的scheme 代码:
(define (close-to x y) (< (abs (- x y)) 0.0001))

(define (cube x) (* x x x))
(define (cube-improve x y) (/ (+ (* 2 y) (/ x (square y))) 3))
(define (curt-recur x y) (if (close-to x (cube y)) y (curt-recur x (cube-improve x y))))
(curt-recur 500 1)

然后我在DrRacket上运行,程序一直在执行,不出结果......速度貌似很慢。

然后我同样思路编了一个C++程序测试:

#include<iostream>
using namespace std;
double abso(double num){
if(num<0)
return (-1)*num;
else
return num;
}
double cuberoot(double num, double guess){
if(abso(guess*guess*guess-num)<0.0001){
return guess;
}
else {
return cuberoot(num, (guess*2+num/guess/guess)/3);
}
}
int main(){
double a,b;
while(cin>>a>>b){
cout<<cuberoot(a,b)<<endl;
}
}

我输入 500 1,很快就算出结果来了。

这是为什么?是我scheme程序编错了?还是别的原因?

程序没问题,我感觉是 你的那个1的问题,震荡幅度太大了。scheme做数学运算 速度不行啊。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜