?? 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 + -