C++ 利用牛顿迭代法 (新手勿喷)(doge)

limi 发表于 2个月前 · 关联问题 一元二次方程求解

include

using namespace std;

double NearNumber(int x) //开方后向上相邻整数 {

double i = 1.00; while (i * i < x) { i++; } return i;

}

double Newtonroot(int a) //牛顿迭代法 {

double nearnumber = NearNumber(a); double root, temp; do { temp = nearnumber;//储存旧根 root = (nearnumber * nearnumber + a) / ((double)2.00 * nearnumber); //牛顿迭代 nearnumber = root; } while (temp - root >= 1e-5 || temp - root <= -1e-5);//旧根与新根比较 return root;

}

int main() {

int a, b, c; cin >> a >> b >> c; int der = b * b - 4 * a * c; if (der >= 0) { double derroot = Newtonroot(der); cout << "YES" << endl << ((-b) + derroot) / (2 * a) << " " << endl << ((-b) - derroot) / (2 * a) << endl; } else { cout << "NO" << endl; } return 0;

}