这个使用牛顿迭代法求立方根的程序哪里错了?
高洛峰
高洛峰 2016-11-16 13:54:58
0
2
820

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

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

wKioL1gquUnA2iquAADM6BeOegg095.png-wh_651x-s_3494154119.png

wKioL1gqt4Xz-xdeAAA2rKk-R6M731.jpg-wh_651x-s_434214206.jpg

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답 (2)
学霸

更新:这你也注意一下边界条件吧, 如果我的值为0,需要单独处理一下

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

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


      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!