ホームページ  >  に質問  >  本文

c++ - 这个使用牛顿迭代法求立方根的程序哪里错了?

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

#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;

}


PHPzPHPz2765日前778

全員に返信(2)返信します

  • 阿神

    阿神2017-04-17 14:55:06

    更新:这你也注意一下边界条件吧, 如果我的值为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;
    
    }

    返事
    0
  • 迷茫

    迷茫2017-04-17 14:55:06

         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,此时跳出循环。

    回答的要是有哪儿不对的,谢谢指出

    返事
    0
  • キャンセル返事