簡體   English   中英

While函數中的輸入循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM