c++ - 这个使用牛顿迭代法求立方根的程序哪里错了?
PHPz
PHPz 2017-04-17 14:53:06
0
2
795

运行结果不正确,不知道为什么,希望能够得到指教。

#include <iostream>
#include <math.h>
using namespace std;
int main(){
double a,x,y;
cin>>a;
do{
    x = a;
    y = (2/3)*x+a/(3*x*x);
    x=y;
}
while(fabs(a-x) < 0.00001);
cout<<x<<endl;

}


PHPz
PHPz

学习是最好的投资!

全部回覆(2)
阿神

更新:這你也注意一下邊界條件吧, 如果我的值為0,需要單獨處理一下

#include <iostream>
#include <math.h>
using namespace std;
int main(){
    double a,x,y;
    cin>>a;
    x = a;        // 不应该放在循环体内
    do{
        y=(2/3.0)*x+a/(3*x*x); //精度问题 2/3会自动转为0
        x=y;
    }while(fabs(a-x*x*x)>0.0001); // 应该用立方去比较, 大于小于号写反
    cout<<x<<endl;

}
迷茫
     x = a;
     y = (2/3)*x+a/(3*x*x);
     x=y;

問題:
1>.如果程式進行迭代,a的值是不改變的,會導致x的值一直為輸入的值。應該寫成
x = ((2.0) / 3)*x + a / (3 * x*x); //将 x=a 放在do语句之前
2>.(2/3)的值為0.如果想計算浮點數的話,應該寫成(2.0/3)
上面兩個是程式錯誤。

while(fabs(a-x) < 0.00001);

問題:
3>.while語句的判斷條件第一次迭代以後回傳的bool值即為0,此時跳出迴圈。

回答的要是有哪裡不對的,謝謝指出

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板