📄 main.cpp
字号:
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <time.h>
#include "bignumber.h"
int f(__int64 *a,int b,int a1)
//求f(x)=arctan(1/b)的函数,b>1,否则收敛太慢甚至不收敛
//本函数要求b^2在655535以内,即unsigned int数据类型的范围内,
//如需支持更大的数,只需调整相关函数的数值类型,由于本实验没有用到
//所以为提高程序速度,在够用的情况下采用尽可能小的数据类型。
//arctanx=1-x^3/3+x^5/5-x^7/7+…
{
int i,j,t;
__int64 *c=new __int64[a1];
for (i=0;i<a1;i++)
a[i]=c[i]=0;
c[a1-1]=1;
unsigned int b2=b*b;
divide (c,b,a1);
plus(a,c,a1);
for (i=1;;i++){
multiply(c,2*i-1,a1);
divide(c,2*i+1,a1);
divide(c,b2,a1);
if(i%2==0)plus(a,c,a1);
else minus(a,c,a1);
t=0;
for (j=0;j<a1;j++)
if (c[j]!=0){
t=1;
break;
}
if(t==0)break;
}
delete c;
return i;
}
main()
{
int n;
cout<<"输入所需精度!";
cin>>n;
clock_t p=clock();
int m=n/9+3;
__int64 *a=new __int64[m];
__int64 *b=new __int64[m];
int i;
ofstream file;
file.open("1.txt");
i=f(a,5,m);
cout<<"Arctan(1/5)迭代次数:"<<i<<endl;
file<<"Arctan(1/5)迭代次数:"<<i<<endl;
i=f(b,239,m);
cout<<"Arctan(1/239)迭代次数:"<<i<<endl;
file<<"Arctan(1/239)迭代次数:"<<i<<endl;
multiply(a,16,m);
multiply(b,4,m);
minus(a,b,m);
double q=(clock()-p)/(double)CLOCKS_PER_SEC;
cout<<"运算时间:"<<q<<"秒"<<endl;
file<<"运算时间:"<<q<<"秒"<<endl;
cout<<(long)a[m-1]<<'.';
file<<(long)a[m-1]<<'.';
for (i=m-2;i>=2;i--){
cout<<setw(9)<<setfill('0')<<(long)a[i]<<' ';
file<<setw(9)<<setfill('0')<<(long)a[i]<<' ';
}
file.close ();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -