本文目錄一覽:
- 1、求用三種方法計算圓周率(C語言)
- 2、C語言求圓周率
- 3、C語言計算圓周率
- 4、計算圓周率的C語言程序
求用三種方法計算圓周率(C語言)
給你個C程序吧:
#include stdio.h
long a=10000,b,c=2800,d,e,f[2801],g;
void main()
{
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf(“%04d”,e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%–g,d/=g–,–b;d*=b);
}
PI=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185…
C語言求圓周率
#include stdio.h
int main()
{
float f;
double pi,i,sign;
while(scanf(“%f”,f)==1)
{
pi=0;
i=1;
sign=1;
do
{
pi+=sign*1.0/i;
}while(1.0/i=f(sign=-sign)(i+=2));
printf(“%lf\n”,pi*4.0);
}
return 0;
}
C語言計算圓周率
計算溢出了。你的 fact 和 multi 都使用整數保存計算結果,參數稍大一點就超出整數表示範圍了,於是溢出變成負數。
你把這兩個函數改成 double 類型,內部變量 res 也聲明成 double,就能算出正確結果了。
計算圓周率的C語言程序
#include stdio.h
#define L 10000 //求10000位PI值
#define N L/4+1
// L 為位數,N是array長度
/*圓周率後的小數位數是無止境的,如何使用電腦來計算這無止境的小數是一些數學家與程式設計師所感興趣的,在這邊介紹一個公式配合 大數運算,可以計算指定位數的圓周率。
John Wallis的圓周率公式:
//詳細看網站介紹:
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 ( “%04d”, s[k] );
printf ( “\n” );
return 0;
}
void add ( int *a, int *b, int *c )
{
int i, carry = 0;
for ( i = N+1; i = 0; i– )
{
c[i] = a[i] + b[i] + carry;
if ( c[i] 10000 )
carry = 0;
else // 進位
{
c[i] = c[i] – 10000;
carry = 1;
}
}
}
void sub ( int *a, int *b, int *c )
{
int i, borrow = 0;
for ( i = N+1; i = 0; i– )
{
c[i] = a[i] – b[i] – borrow;
if ( 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; i++ )
{
tmp = a[i] + remain;
c[i] = tmp / b;
remain = ( tmp % b ) * 10000;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/257123.html