我对我的程序中看似无限的输入循环有个疑问。我确定它是在while循环中发生的,并且想知道是因为我的数学还是我的编码。尽管循环对我来说仍然是新的,所以任何帮助或解释都会很好!这个程序是一个程序的开始,它使用牛顿的方法找到z的第p个根,残差和循环之间的改进。另外,我想知道for循环对我的目的是否会更好。这是迄今为止:While函数中的输入循环
#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'永远等于'0'的可能性很小。您可能需要将其与epsilon值进行比较,例如。 fabs(x)
syam