算法如下: int GfAdd(int a, int b){ return a ^ b; } //a * b int GfMult(int a, int b){ return (a == 0 || b == 0) ? 0: alphaTo[(expOf[a] + expOf[b]) % nn]; } // a * alpha^b int GfMult2(int a, int b){ return a== 0 ? 0 :alphaTo[(expOf[a] + b) % nn]; } // a/b int GfDiv(int a, int b) { if( a==0)return 0; if( a==b)return 1; returnexpOf[a] > expOf[b] ? alphaTo[expOf[a] - expOf[b] ] : alphaTo[ nn + expOf[a] - expOf[b] ] ; } void gaussion(){ int total =18; int data =8; int error =10; int* codes =new int[total]; int* errors= new int[error]; int* polys =new int[error*error];
int i, j, k,d; codes[0] =66; codes[1] =67; codes[2] =68; codes[3] =69; codes[4] =70; codes[5] =142; codes[6] =129; codes[7] =56;
for(i=0;i //sum of each polynomial int sum = 0; for( j=0;j sum = GfAdd( sum, GfMult2( codes[j], (total-1-j)*(i+1) ) ); errors[i] = sum; //polynomial matrix int index = i*error; for( j=0;j polys[index+j] = alphaTo[j*(i+1)]; } //gaussionelimination for(i=0;i //diagonal postion d = i*error+i; int diagonal = polys[d]; //diagonal --> 1 int index = i*error; for( j=0;j polys[index+j] = GfDiv( polys[index+j], diagonal ); errors[i] = GfDiv( errors[i], diagonal ); //otherrows - thisrow for( k=0;k