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); }
int main(void) { int num[NUM]; setNumber(num); dispNumber(num); doubleNumber(num); dispNumber(num); return 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; }
//ウォリス積の計算 //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; }