#include #include #define nil 0 #define false 0 #define true 1 #define bubblebase 1.61f #define dnfbase 3.5f #define permbase 1.75f #define queensbase 1.83f #define towersbase 2.39f #define quickbase 1.92f #define intmmbase 1.46f #define treebase 2.5f #define mmbase 0.0f #define fpmmbase 2.92f #define puzzlebase 0.5f #define fftbase 0.0f #define fpfftbase 4.44f /* Towers */ #define maxcells 18 /* Intmm, Mm */ #define rowsize 40 /* Puzzle */ #define size 511 #define classmax 3 #define typemax 12 #define d 8 /* Bubble, Quick */ #define sortelements 5000 #define srtelements 500 /* fft */ #define fftsize 256 #define fftsize2 129 /* type */ /* Perm */ #define permrange 10 /* tree */ struct node { struct node *left,*right; int val; }; /* Towers */ /* discsizrange = 1..maxcells; */ #define stackrange 3 /* cellcursor = 0..maxcells; */ struct element { int discsize; int next; }; /* emsgtype = packed array[1..15] of char; */ /* Intmm, Mm */ /* index = 1 .. rowsize; intmatrix = array [index,index] of integer; realmatrix = array [index,index] of real; */ /* Puzzle */ /* piececlass = 0..classmax; piecetype = 0..typemax; position = 0..size; */ /* Bubble, Quick */ /* listsize = 0..sortelements; sortarray = array [listsize] of integer; */ /* FFT */ struct complex { float rp, ip; } ; /* carray = array [1..fftsize] of complex ; c2array = array [1..fftsize2] of complex ; */ float value, fixed, floated; /* global */ long seed; /* converted to long for 16 bit WR*/ /* Perm */ int permarray[permrange+1]; /* converted pctr to unsigned int for 16 bit WR*/ unsigned int pctr; /* tree */ struct node *tree; /* Towers */ int stack[stackrange+1]; struct element cellspace[maxcells+1]; int freelist, movesdone; /* Intmm, Mm */ int ima[rowsize+1][rowsize+1], imb[rowsize+1][rowsize+1], imr[rowsize+1][rowsize+1]; float rma[rowsize+1][rowsize+1], rmb[rowsize+1][rowsize+1], rmr[rowsize+1][rowsize+1]; /* Puzzle */ int piececount[classmax+1], class[typemax+1], piecemax[typemax+1]; int puzzl[size+1], p[typemax+1][size+1], n, kount; /* Bubble, Quick */ int sortlist[sortelements+1], biggest, littlest, top; /* FFT */ struct complex z[fftsize+1], w[fftsize+1], e[fftsize2+1]; float zr, zi; void Initrand () { seed = 74755L; /* constant to long WR*/ } int Rand () { seed = (seed * 1309L + 13849L) & 65535L; /* constants to long WR*/ return( (int)seed ); /* typecast back to int WR*/ } /* Multiplies two real matrices. */ void rInitmatrix ( float m[rowsize+1][rowsize+1] ) { int temp, i, j; for ( i = 1; i <= rowsize; i++ ) for ( j = 1; j <= rowsize; j++ ) { temp = Rand(); m[i][j] = (float)(temp - (temp/120)*120 - 60)/3; } } void rInnerproduct(float *result, float a[rowsize+1][rowsize+1], float b[rowsize+1][rowsize+1], int row, int column) { /* computes the inner product of A[row,*] and B[*,column] */ int i; *result = 0.0f; for (i = 1; i<=rowsize; i++) *result = *result+a[row][i]*b[i][column]; } void Mm (int run) { int i, j; Initrand(); rInitmatrix (rma); rInitmatrix (rmb); for ( i = 1; i <= rowsize; i++ ) for ( j = 1; j <= rowsize; j++ ) rInnerproduct(&rmr[i][j],rma,rmb,i,j); if (run < rowsize) printf("%f\n", rmr[run + 1][run + 1]); } int main() { int i; for (i = 0; i < 5000; i++) Mm(i); return 0; }