Beispiel #1
0
int main(void)
{
	int i = 0,r = 0,tmp = 0,x,y,z,w,res;
	double tstart,tend;
	struct NUMBER a,b,c,d;
	struct timeval tv;

	gettimeofday(&tv,NULL);
	tstart= (double)tv.tv_sec + (double)tv.tv_usec * 1.e-6;

	setInt(&a,5);
	arctan(&a,&b);
	setInt(&a,16);
	multiple(&a,&b,&c);

	setInt(&a,239);
	arctan(&a,&b);
	setInt(&a,4);
	multiple(&a,&b,&d);

	sub(&c,&d,&a);

	printf("a= ");
	dispNumber(&a);
	putchar('\n');

	gettimeofday(&tv,NULL);
	tend = (double)tv.tv_sec + (double)tv.tv_usec * 1.e-6;

	printf("所要時間 = %f秒\n",tend - tstart);


	return(0);
}
Beispiel #2
0
int main(void)
{

  int num[NUM];
  
  setNumber(num);

  dispNumber(num);

  doubleNumber(num);

  dispNumber(num);

  return 0;

}
Beispiel #3
0
int main(void)
{
	srandom(time(NULL));

	struct NUMBER a,b,c,d,e;
	int r;
	int x=0,y=0,z=0;
	int i,flag;

	//setint のテスト

	setInt(&a,-12344);
	printf("a = ");
	dispNumber(&a);
	printf("\n");

	//setSignのテスト
	copyNumber(&a,&b);
	setSign(&b,1);
	printf("b = ");
	dispNumber(&b);
	printf("\n");

	//getSignのテスト

	r=getSign(&b);
	printf("getSign() = %d\n",r);

	//numCompのテスト
	r=numComp(&a,&b);
	printf("numComp() = %d\n",r);

	setInt(&b,-9996702);
	printf("b  =  ");
	dispNumber(&b);
	printf("\n");

	//addのテストプログラム
	add(&b,&a,&c);
	printf("add = ");
	dispNumber(&c);
	printf("\n");

	//subのテストプログラム
	sub(&c,&a,&d);
	printf("sub = ");
	dispNumber(&d);
	printf("\n");

	setInt(&a,12345);
	setInt(&b,67894);

	//multipleのテスト
	multiple(&b,&a,&d);
	printf("mul = ");
	dispNumber(&d);
	printf("\n");

	setInt(&a,INT_MIN);
	printf("a = ");
	dispNumber(&a);
	printf("\n");



	putchar('\n');

	
	return 0;
}
Beispiel #4
0
//ウォリス積の計算
//PI=4*n^2/4*n^2-1(n=1からn=kまで)
int main(int argc,char **argv)
{
  
  struct NUMBER num;//ウォリス積のn
  struct NUMBER four;//4倍するための4  
  struct NUMBER store;//n^2
  struct NUMBER bunbo;
  struct NUMBER bunsi;
  struct NUMBER store4;//4倍したstore
  struct NUMBER store4_1;//4*n^2-1の計算結果を保管
  struct NUMBER two;//2倍するためのもの
  struct NUMBER bunsix2;//2倍した値保存
  struct NUMBER sho;//割り算した商
  struct NUMBER amari;//わり算したあまり
  struct NUMBER numtemp;//numをインクリメントした値を格納する
  struct NUMBER hundred;
  struct NUMBER bunsix10;
  struct NUMBER dispKETA;
  struct NUMBER tmp;
 
  int i;//for文
  int n=1;
  int kt;//円周率の表示
  
  time_t start,end;
  start=time(NULL);

  srandom(time(NULL));
  
  setInt(&four,4);
  setInt(&two,2);
  /*
  multiple(&four,&two,&hundred);
  dispNumber(&hundred);
  return 0;
  */
  setInt(&hundred,100);

  setInt(&bunbo,1);
  setInt(&bunsi,1);
  
  while(n<=woris){

    printf("ループ回数 %d回\n",n);

    setInt(&num,n);//多倍長にnをセットする
    
    if(multiple(&num,&num,&store)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;//n^2する
    }
  
    if(multiple(&store,&four,&store4)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;//4*n^2を計算
    }
    
    if(decrement(&store4,&store4_1)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;//4*n^2-1を計算
    }
    
    copyNumber(&bunsi,&tmp);//tmpに分子コピー

    if(multiple(&tmp,&store4,&bunsi)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;//分子と4*n^2かけ、分子に格納
    }

    copyNumber(&bunbo,&tmp);//tmpに分母コピー

    if(multiple(&tmp,&store4_1,&bunbo)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;//分母と4*n^2_1かけて分母に格納
    }

    
    n++;
  }


  printf("\n");


  printf("分子:");
  dispNumber(&bunsi);
  printf("\n");

  
  if(multiple(&bunsi,&two,&bunsix2)==-1) {
    printf("オーバーフローです\n");
    end=time(NULL);
    printf("time=%d[s]\n",(int)(end-start));
    return -1;
  }
  
  printf("分子x2:");
  dispNumber(&bunsix2);
  printf("\n");
  
  i=0;

  clearByZero(&tmp);

  while(i<disp_kt){
    if(mulBy10(&bunsix2,&tmp)==-1) {
      printf("オーバーフローです\n");
      end=time(NULL);
      printf("time=%d[s]\n",(int)(end-start));
      return -1;
    }
    i++;
    copyNumber(&tmp,&bunsix2);  
  }

  copyNumber(&bunsix2,&bunsix10);
  printf("分子x10:");
  dispNumber(&bunsix10);
  printf("\n");

  printf("分母:");
  dispNumber(&bunbo);
  printf("\n");

  if(divide(&bunsix10,&bunbo,&sho,&amari)==-1) {
    printf("エラーです\n");
    end=time(NULL);
    printf("time=%d[s]\n",(int)(end-start));
    return -1;
  }

  printf("\n");

  printf("商");
  dispNumber(&sho);
  printf("\n");

  /*	 
  printf("あまり");
  dispNumber(&amari);
  printf("\n");
  
  printf("分子x10の桁数:%d\n",readKETA(&bunsix10));
  */ 

  end=time(NULL);
  printf("time=%d[s]\n",(int)(end-start));
  
  return 0;

}