计算π的算法

it2025-12-17  4

#include <string.h> /* PI/2 = 1 + (1/3) + (1/3)*(2/5) + (1/3)*(2/5)*(3/7) + (1/3)*(2/5)*(3/7)*(4/9) + ... double x=2, z=2; int a=1, b=3; while(z>1e-15) { z = z*a/b; x += z; a++; b+=2; } */ #define PI_WEI_COUNT 1000 #define ARRSIZE (PI_WEI_COUNT + (PI_WEI_COUNT/100)) void CalPI(void) { char x[ARRSIZE], z[ARRSIZE]; int a=1, b=3, c, d, Run=1, Cnt=0; int i; memset(x,0,ARRSIZE); memset(z,0,ARRSIZE); x[1] = 2; z[1] = 2; while(Run && (++Cnt < 200000000)) { /* z*=a; */ d = 0; for(i=ARRSIZE-1; i>0; i--) { c = z[i]*a + d; z[i] = c % 10; d = c / 10; } /* z/=b; */ d = 0; for(i=0; i<ARRSIZE; i++) { c = z[i]+d*10; z[i] = c / b; d = c % b; } /* x+=z; */ Run = 0; for(i=ARRSIZE-1; i>0; i--) { c = x[i] + z[i]; x[i] = c%10; x[i-1] += c/10; Run |= z[i]; } a++; b+=2; } printf("Cal %d times:", Cnt); for(i = 0; i < PI_WEI_COUNT; i++) { x[i] += '0'; } x[i] = '\0'; printf("%s", x); printf("\n"); }

 

最新回复(0)