运行结果不正确,不知道为什么,希望能够得到指教。
#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; }
学习是最好的投资!
更新:這你也注意一下邊界條件吧, 如果我的值為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)上面兩個是程式錯誤。
a
x
x = ((2.0) / 3)*x + a / (3 * x*x); //将 x=a 放在do语句之前
(2/3)
(2.0/3)
while(fabs(a-x) < 0.00001);
問題:3>.while語句的判斷條件第一次迭代以後回傳的bool值即為0,此時跳出迴圈。
回答的要是有哪裡不對的,謝謝指出
更新:這你也注意一下邊界條件吧, 如果我的值為0,需要單獨處理一下
問題:
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,此時跳出迴圈。
回答的要是有哪裡不對的,謝謝指出