#include<iostream>
#include<cmath>
using namespace std;
// 二分法实现
double binarySearch(double num, double accuracy) {
double l = 0.0, r = 0.0;
if (num >= 1) r = num;
else r = 1.0;
while (fabs(l - num/l) > accuracy) {
double mid = l + (r - l) / 2;
if (mid < num/mid) {
l = mid;
} else {
r = mid;
}
}
return l;
}
// 牛顿法实现
double newTon(double num, double accuracy) {
if (num == 0.0 || num == 1.0) {
return num;
}
double tmp = num / 2.0;
while (true) {
double oldTmp = tmp;
tmp = (tmp + num/tmp) / 2.0;
if (fabs(oldTmp - tmp) < accuracy) {
return tmp;
}
}
return tmp;
}
int main() {
double num;
double accuracy = 1e-8;
cin >> num;
double bs = binarySearch(num, accuracy);
double nt = newTon(num, accuracy);
cout << bs << " " << nt << endl;
return 0;
}
求一个数的平方根:二分查找/牛顿法源码
于 2022-01-27 23:51:45 首次发布