CELL * bi_rand(CELL * sp) { crank(seed); sp++; sp->type = C_DOUBLE; sp->dval = (double) seed / (double) M; return sp; }
CELL * bi_srand(CELL *sp) { #ifdef USE_SYSTEM_SRAND static long seed = 1; static CELL cseed = { C_DOUBLE, 0, 0, 1.0 }; #endif CELL c; TRACE_FUNC("bi_srand", sp); if (sp->type == C_NOINIT) /* seed off clock */ { cellcpy(sp, &cseed); cell_destroy(&cseed); cseed.type = C_DOUBLE; cseed.dval = initial_seed(); } else { /* user seed */ sp--; /* swap cseed and *sp ; don't need to adjust ref_cnts */ c = *sp; *sp = cseed; cseed = c; } #ifdef USE_SYSTEM_SRAND seed = d_to_i(cseed.dval); mawk_srand((unsigned) seed); #else /* The old seed is now in *sp ; move the value in cseed to seed in range [1,M) */ cellcpy(&c, &cseed); if (c.type == C_NOINIT) cast1_to_d(&c); seed = ((c.type == C_DOUBLE) ? (long) (d_to_i(c.dval) & M) % M + 1 : (long) hash(string(&c)->str) % M + 1); if (seed == M) seed = M - 1; cell_destroy(&c); /* crank it once so close seeds don't give a close first result */ crank(seed); #endif return_CELL("bi_srand", sp); }
void Spearman(Vector & v1, Vector & v2, double & rankD, double & zD, double & probD, double & spearmanR, double & probSR) { double varD, sg, sf, fac, en3n, en, df, aveD, t; Vector wksp1, wksp2; wksp1.Copy(v1); wksp2.Copy(v2); wksp1.Sort(wksp2); sf = crank(wksp1); wksp2.Sort(wksp1); sg = crank(wksp2); rankD = 0; for (int j = 0; j < v1.dim; j++) // sum the square difference of ranks { double temp = wksp1[j] - wksp2[j]; rankD += temp * temp; } en = v1.dim; en3n = en*en*en - en; aveD = en3n / 6.0 - (sf + sg) / 12.0; fac = (1.0 - sf/en3n) * (1.0 - sg/en3n); varD = ((en - 1.0)*en*en*(en + 1.0)*(en + 1.0)/36.0)*fac; zD = (rankD - aveD) / sqrt(varD); probD = erfcc(fabs(zD)/1.4142136); spearmanR = (1.0 - (6.0/en3n)*(rankD+(sf+sg)/12.0))/sqrt(fac); fac = (spearmanR + 1.0) * (1.0 - spearmanR); if (fac) { t = (spearmanR) * sqrt((en - 2.0)/fac); df = en - 2.0; probSR = betai(0.5 * df, 0.5, df/(df + t*t)); } else probSR = 0.0; }
void spear(float data1[], float data2[], unsigned long n, float *d, float *zd, float *probd, float *rs, float *probrs) { float betai(float a, float b, float x); void crank(unsigned long n, float w[], float *s); float erfcc(float x); void sort2(unsigned long n, float arr[], float brr[]); unsigned long j; float vard,t,sg,sf,fac,en3n,en,df,aved,*wksp1,*wksp2; wksp1=vector(1,n); wksp2=vector(1,n); for (j=1;j<=n;j++) { wksp1[j]=data1[j]; wksp2[j]=data2[j]; } sort2(n,wksp1,wksp2); crank(n,wksp1,&sf); sort2(n,wksp2,wksp1); crank(n,wksp2,&sg); *d=0.0; for (j=1;j<=n;j++) *d += SQR(wksp1[j]-wksp2[j]); en=n; en3n=en*en*en-en; aved=en3n/6.0-(sf+sg)/12.0; fac=(1.0-sf/en3n)*(1.0-sg/en3n); vard=((en-1.0)*en*en*SQR(en+1.0)/36.0)*fac; *zd=(*d-aved)/sqrt(vard); *probd=erfcc(fabs(*zd)/1.4142136); *rs=(1.0-(6.0/en3n)*(*d+(sf+sg)/12.0))/sqrt(fac); fac=(*rs+1.0)*(1.0-(*rs)); if (fac > 0.0) { t=(*rs)*sqrt((en-2.0)/fac); df=en-2.0; *probrs=betai(0.5*df,0.5,df/(df+t*t)); } else *probrs=0.0; free_vector(wksp2,1,n); free_vector(wksp1,1,n); }
CELL * bi_srand(CELL * sp) { CELL c; if (sp->type == 0) /* seed off clock */ { time_t secs = time((time_t *) 0); cellcpy(sp, &cseed); cell_destroy(&cseed); cseed.type = C_DOUBLE; cseed.dval = (double) secs; } else { /* user seed */ sp--; /* swap cseed and *sp ; don't need to adjust ref_cnts */ c = *sp; *sp = cseed; cseed = c; } /* The old seed is now in *sp ; move the value in cseed to seed in range [1,M) */ cellcpy(&c, &cseed); if (c.type == C_NOINIT) cast1_to_d(&c); seed = ((c.type == C_DOUBLE) ? (long) (d_to_i(c.dval) & M) % M + 1 : (long) hash(string(&c)->str) % M + 1); if (seed == M) seed = M - 1; cell_destroy(&c); /* crank it once so close seeds don't give a close first result */ crank(seed); return sp; }
CELL * bi_rand(CELL *sp) { TRACE_FUNC("bi_rand", sp); #ifdef USE_SYSTEM_SRAND { long value = (long) mawk_rand(); sp++; sp->type = C_DOUBLE; sp->dval = ((double) value) / RAND_MAX; } #else crank(seed); sp++; sp->type = C_DOUBLE; sp->dval = (double) seed / (double) M; #endif return_CELL("bi_rand", sp); }
int main(int argc, char *argv[]){ int i, j, l, m, n; /* Matrix Dimensions*/ int nx=4, ny=4, nz=4; /*parameters to be changed by user*/ int NT; /* Max Number of timesteps*/ double alpha = .01; double dt = .001; double q = .005; double dx = .01; double dz = .01; double dy = .01; double C = alpha*dt/pow(dx,2); int algo = 0; int border = 0; srand(time(NULL));/*make some noise*/ double noise = .09 * (double)(rand()/(double)RAND_MAX); welcome(&nx, &ny, &nz, &alpha, &q, &dt, &dx, &algo, &border ); /* if(argc >1){ FILE *fp; fp = fopen(argv[1], "r"); fscanf(fp, "%d %d %d %d %lf %lf %lf %d %d", &nx, &ny, &nz, &NT, &dt, &alpha, &q, &border, &algo); fclose(fp); } */ assert(alpha * dt <= (0.5 * dx * dx)); /*2 3D matrices init under gaussian conditions + boundaries*/ double ***matrix = initGaussians(nx, ny, nz, dx, dy, dz, noise); double ***matrix_np1 = initGaussians(nx, ny, nz, dx, dy, dz, noise); int when = 0; print3DMatrix(matrix, nx, ny, nz, dx, dx, dx, when); double t_start, t_end; if( algo ==0 ){ NT = 10000; t_start = clock(); forwardTime(matrix, matrix_np1, nx, ny, nz, dx, dy, dz, C, q,border, NT); t_end = clock(); } else if( algo == 1 ){ NT = 5; t_start = clock(); crank(matrix, matrix_np1, nx, ny, nz, alpha, dx, C, border, NT); t_end = clock(); } else if( algo == 2){ NT = 5; t_start = clock(); adi(matrix, matrix_np1, nx, ny, nz, alpha, dx, C, border, NT); t_end = clock(); } else{ printf("error in parameters"); return 0; } freeMats(matrix, matrix_np1, nx, ny); printf("Total Time Elapsed.....\n"); printf("%f\n",(t_end - t_start)/CLOCKS_PER_SEC); return 0; }
int main(void) { int i,j; float *data,*order,*s,**rays; char dummy[MAXSTR],txt[MAXSTR],city[NDAT+1][17],mon[NMON+1][5]; FILE *fp; data=vector(1,NDAT); order=vector(1,NDAT); s=vector(1,NMON); rays=matrix(1,NDAT,1,NMON); if ((fp = fopen("table2.dat","r")) == NULL) nrerror("Data file table2.dat not found\n"); fgets(dummy,MAXSTR,fp); fgets(txt,MAXSTR,fp); fscanf(fp,"%*15c"); for (i=1;i<=NMON;i++) fscanf(fp," %s",mon[i]); fgets(dummy,MAXSTR,fp); fgets(dummy,MAXSTR,fp); for (i=1;i<=NDAT;i++) { fscanf(fp,"%[^0123456789]",city[i]); city[i][16]='\0'; for (j=1;j<=NMON;j++) fscanf(fp,"%f",&rays[i][j]); fgets(dummy,MAXSTR,fp); } fclose(fp); printf("%s\n%16s",txt," "); for (i=1;i<=12;i++) printf(" %s",mon[i]); printf("\n"); for (i=1;i<=NDAT;i++) { printf("%s",city[i]); for (j=1;j<=12;j++) printf("%4d",(int) (0.5+rays[i][j])); printf("\n"); } printf(" press return to continue ...\n"); getchar(); /* Replace solar flux in each column by rank order */ for (j=1;j<=12;j++) { for (i=1;i<=NDAT;i++) { data[i]=rays[i][j]; order[i]=i; } sort2(NDAT,data,order); crank(NDAT,data,&s[j]); for (i=1;i<=NDAT;i++) rays[(int) (0.5+order[i])][j]=data[i]; } printf("%16s"," "); for (i=1;i<=12;i++) printf(" %s",mon[i]); printf("\n"); for (i=1;i<=NDAT;i++) { printf("%s",city[i]); for (j=1;j<=12;j++) printf("%4d",(int) (0.5+rays[i][j])); printf("\n"); } free_matrix(rays,1,NDAT,1,NMON); free_vector(s,1,NMON); free_vector(order,1,NDAT); free_vector(data,1,NDAT); return 0; }
std::string MicroScheme::result() { return crank()->value(); }
MicroScheme &MicroScheme::next(const std::string &str) { crank(); _str = str; return *this; }