求大佬看看
查看原帖
求大佬看看
560291
the_Dream_Chaser楼主2024/7/25 21:44

题目要求:手算根号2,要求到小数点后50位以上;

结果:用牛顿迭代法迭代了150次,我的输出与Dev-C++自带的sqrt函数相同,但和网上搜索的不一样。

求大佬帮忙看看是哪里出了问题

代码如下:

#include<bits/stdc++.h>
using namespace std;
const double acc=1e-20; 
const int dig=150;
const int MAXN=1e5+16;
int n=3	;
double x[MAXN];
double f(double x){//函数x^2-2=0 
	return x*x-n;
} 
double f1(double x){//该函数的倒数 
	return 2.0*x;
}
int main(){
	//cin>>n;
	freopen("test.out","w",stdout);
	x[1]=2;
	for(int i=1;i<=dig;i++){
		if(i==5)x[i+1]-=0.0000000000000001;
		x[i+1]=x[i]-f(x[i])/f1(x[i]);//牛顿迭代法 
		
	}
	for(int i=1;i<=dig;i++) {
		printf("%.152lf",x[i]);
		cout<<endl;
	}
	
	printf("%.152lf",sqrt(n));
	cout<<endl;
	fclose(stdout);

}

我的输出:

1.4142135623730951454746218587388284504413604736328125

sqrt函数输出:

1.4142135623730951454746218587388284504413604736328125

网上的小数点后100位

1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
2024/7/25 21:44
加载中...