#include <stdio.h>
#include <stdlib.h>
#include "math.h"
#include "gmp.h"

int main(int argc, char *argv[]){
  int P=1024;
  mpf_t a,pi,delta;

  int x = 1;
  int y = 3;
  int it = 10;
  
  if(argc>=2){
    P = atoi(argv[1]);
    P = P>0?P:1024;    
  }

  mpf_set_default_prec(ceil(P*log2(10)) + 64);
  mpf_inits(a,pi,delta,NULL);

  mpf_set_ui(a,2);
  mpf_set_ui(pi,0);

  mpf_set_ui(delta,1);  
  for(it=0;it<P;it++){
    mpf_div_ui(delta,delta,10);
  }

  while(mpf_cmp(a,delta) >0){
    mpf_add(pi,pi,a);    
    mpf_mul_ui(a,a,x++);
    mpf_div_ui(a,a,y);        
    y+=2;
  }
  mpf_out_str(stdout,10,P,pi);
  printf("\n");
  mpf_clears(a,pi,delta,NULL);
}

// filename : yapi.c
// compile : gcc yapi.c -lm -lgmp -oyapi