圆周率计算任意多C语言

我写了10000多位,代码太多,这里不一一列举。让我给你出个主意:

固定长度的字节数组定义为“大整数类型”,长度为BI_SIZE,数组的数字0是最低的8位,后面是较高的8位,以此类推。

考虑到计算过程中的溢出问题,BI_SIZE要尽量大,但不能太大,否则计算会很慢。

#定义

双尺寸

128

定义小数点后的十进制数字PI_NUM,略大于100。

#定义

PI_NUM

103

有几个这样的阵列。例如,计算函数中使用的工作寄存器如下:

uint8_t

R0计算圆周率的c语言程序 #包含stdio.h

#定义L 10000 //求10000位圆周率值

#定义N L/4 1

// L是位数,n是数组的长度。

/*圆周率后面的小数位数是无穷的。如何用计算机计算这个无穷小数位,是一些数学家和程序员感兴趣的。这里介绍一个结合大数运算计算指定位数圆周率的公式。

约翰·沃利斯圆周率公式:

//详细见网站介绍:

PI =[16/5-16/(3 * 53)16/(5 * 55)-16/(7 * 57)......] - [4/239 - 4/(3*2393) 4/(5*2395) - 4/(7*2397) ......]

*/

void add ( int*,int*,int *);

void sub ( int*,int*,int *);

void div ( int*,int,int *);

int main ( void)

{

int s[N 3]= { 0 };

int w[N 3]= { 0 };

int v[N 3]= { 0 };

int q[N 3]= { 0 };

int n =(int)(L/1.39793 1);

int k;

w[0]= 16 * 5;

v[0]= 4 * 239;

for(k = 1;k = n;k)

{

//应用公式

div ( w,25,w);

div ( v,239,v);

div ( v,239,v);

sub ( w,v,q);

div ( q,2*k-1,q);

If (k%2) //奇数项

add ( s,q,s);

Else //偶数项

sub ( s,q,s);

}

printf ( "%d . ",s[0]);

for(k = 1;k N;k)

printf ( "d ",s[k]);

printf(" \ n ");

返回0;

}

void add ( int *a,int *b,int *c)

{

int i,进位= 0;

for(I = N ^ 1;I = 0;我-)

{

c[i] = a[i] b[i]进位;

if ( c[i] 10000)

进位= 0;

Else //进位

{

c[I]= c[I]-10000;

进位= 1;

}

}

}

void sub ( int *a,int *b,int *c)

{

int i,borrow = 0;

for(I = N ^ 1;I = 0;我-)

{

c[I]= a[I]-b[I]-borrow;

如果(c[i] = 0)

borrow = 0;

Else //不好意思

{

c[I]= c[I]10000;

borrow = 1;

}

}

}

Void div (int *a,int b,int *c) // b是除数。

{

int i,tmp,remain = 0;

for(I = 0;I = N ^ 1;我)

{

tmp = a[i]剩余;

c[I]= tmp/b;

remain =(tmp % b)* 10000;

}

}

c语言计算圆周率 #包含stdio.h

双事实(整数)

{

double res = 1.0

for(int I = 1;I = n;我)

RES * = I;

返回res

}

double multi(int n)

{

double res = 1.0

for(int I = 1;I = n;i = 2)

RES * = I;

返回res

}

int main()

{

double sum=1.0,item=1.0,EPS = 1e-6;

for(int I = 1;item = eps我)

{

item = fact(I)/multi(2 * I 1);

sum = sum项;

}

printf("PI=%0.5lf\n ",sum * 2);

返回0;

}

//所以可以得到3.14159。

用C语言写一个计算圆周率的程序。用户输入指定的位数,计算到指定的数(精度不够可以用整数)。 #包含“stdio.h”

#包含stdlib.h

#包含字符串. h

int main(int argc,char *argv[]){

int a,b,c,d,e,f[2801],g,I,n;

char pi[801]= " ",t[5]= " ";

for(a=10000,b=0,c = 2800b-c;f[b]= 2000);//a/5

for(I = e = 0;d=0,g = c * 2;c-=14,e=d%a){

for(b = c;d =f[b]*a,f[b]=d% - g,d/=g -,-b;d * = b);

n=e d/a,t[0]= t[1]= t[2]= t[3]= ' \ 0 ';

n10?t[0]=t[1]=t[2]='0 ',i=3 : n100?t[0]=t[1]='0 ',i=2 : n1000?t[0]='0 ',I = 1:I = 0;

itoa(n,t i,10);

strcat(pi,t);

}

printf("请输入长度n(int 0n800)...\ nn = ");

if(scanf("%d ",n)!=1 || n1 || n800){

printf("输入错误,退出...\ n ");

返回0;

}

for(I = 0;在;printf("%c ",pi[I]);

printf(" \ n ");

返回0;

}

代码格式和运行样本图片:

相关文章

发表新评论