#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
double _sqrt(double val, double x) //牛顿迭代法
{
if(abs(x*x - val) < 0.00001){return x;}
else{
x = (x + val/x)/2;
return _sqrt(val, x);
}
}
double sqrt_Rec(double val)
{
return _sqrt(val, 1.0);
}
double sqrt_2(double val) //二分法
{
double left = 0;
double right = val > 1.0?val: 1.0;
double mid = (left + right)/2;
while(abs(mid*mid - val) > 0.00001){
if( mid*mid - val > 0){
right = mid;
}else{
left = mid;
}
mid = (left + right)/2;
}
return mid;
}
int main()
{
double num;
while(cin >> num){
cout << sqrt_2(num) << endl;
}
}
#include <cstdlib>
#include <cmath>
using namespace std;
double _sqrt(double val, double x) //牛顿迭代法
{
if(abs(x*x - val) < 0.00001){return x;}
else{
x = (x + val/x)/2;
return _sqrt(val, x);
}
}
double sqrt_Rec(double val)
{
return _sqrt(val, 1.0);
}
double sqrt_2(double val) //二分法
{
double left = 0;
double right = val > 1.0?val: 1.0;
double mid = (left + right)/2;
while(abs(mid*mid - val) > 0.00001){
if( mid*mid - val > 0){
right = mid;
}else{
left = mid;
}
mid = (left + right)/2;
}
return mid;
}
int main()
{
double num;
while(cin >> num){
cout << sqrt_2(num) << endl;
}
}
本文介绍两种不同的数值方法来计算平方根:牛顿迭代法和二分法。通过递归实现牛顿迭代法,并使用循环实现二分法。两种方法都确保了较高的精度。
514

被折叠的 条评论
为什么被折叠?



