[英]Input Loop in While function
我對我的程序中看似無限的輸入循環有一個快速的問題。 我確定它是在while循環中發生的,並且想知道這是因為我的數學還是我的編碼。 雖然循環對我來說仍然是新的,所以任何幫助或解釋都將很不錯! 該程序是使用牛頓方法查找z的p根,殘差以及循環之間的改進的程序的開始。 另外,我想知道for循環是否可以達到我的目的。 到目前為止,這里:
#include <iostream>
#include <cmath>
using namespace std;
double Newton(double z, int p, double &x, double &n);
int main(){
double z, x, n, residual, bai, bri;
int p;
x = 1;
n = 1;
cin >> z >> p;
double roots = Newton(z, p, x, n);
cout.precision (5);
cout << "Input: z = " << z << ", p = " << p << endl << "Root = " << x << endl;
}
double Newton(double z, int p, double &x, double &n){
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
while (x != 0){
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
n++;
}
return x;
}
通常,用浮點算術測試相等性是一個壞主意。 我不知道您的數學和/或編碼是否還可以,但是我想x
的機會永遠不會完全等於零。 考慮將其更改為while (fabs(x) < 1e-10)
。
尼克對您的無限循環問題可能有一個很好的答案。 我只是想補充一點,在這種情況下,您可以使用while循環,因為您沒有明確的迭代變量。
例:
for (int i=0; i < 10; ++i) {
cout << i << endl;
}
在這里很明顯,變量i
代表迭代,因為它是在每次迭代結束時遞增的變量,也是要作為連續條件進行測試的變量。
相反,當n
增加時,循環使用x
來測試連續性。 對於for循環來說,這不是一個明確的案例。 您的情況下的for循環如下所示:
double Newton(double z, int p, double &x, double &n) {
for (x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1)))))); x != 0; n++) {
x = (x - ((pow (x, p) - z)/(p * (pow (x, (p - 1))))));
}
return x;
}
這也不可怕,但是我認為while循環更加清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.