Changeset 287cc8 in git for ntl/src/mat_GF2E.c
- Timestamp:
- Jan 5, 2010, 5:51:13 PM (14 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 3c38b3810fd61108b01f123f5a91e13ccff52b20
- Parents:
- 1d43d184dd871d77c1ba8e095d768f22a0fbe92f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ntl/src/mat_GF2E.c
r1d43d18 r287cc8 12 12 13 13 14 15 void add(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 16 { 17 long n = A.NumRows(); 18 long m = A.NumCols(); 19 20 if (B.NumRows() != n || B.NumCols() != m) 21 Error("matrix add: dimension mismatch"); 22 23 X.SetDims(n, m); 24 25 long i, j; 26 for (i = 1; i <= n; i++) 27 for (j = 1; j <= m; j++) 28 add(X(i,j), A(i,j), B(i,j)); 29 } 30 31 void mul_aux(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 32 { 33 long n = A.NumRows(); 34 long l = A.NumCols(); 35 long m = B.NumCols(); 36 37 if (l != B.NumRows()) 38 Error("matrix mul: dimension mismatch"); 39 40 X.SetDims(n, m); 41 42 long i, j, k; 43 GF2X acc, tmp; 44 45 for (i = 1; i <= n; i++) { 46 for (j = 1; j <= m; j++) { 47 clear(acc); 48 for(k = 1; k <= l; k++) { 49 mul(tmp, rep(A(i,k)), rep(B(k,j))); 50 add(acc, acc, tmp); 51 } 52 conv(X(i,j), acc); 53 } 54 } 55 } 56 57 58 void mul(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 59 { 60 if (&X == &A || &X == &B) { 61 mat_GF2E tmp; 62 mul_aux(tmp, A, B); 63 X = tmp; 64 } 65 else 66 mul_aux(X, A, B); 67 } 68 69 14 15 void add(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 16 { 17 long n = A.NumRows(); 18 long m = A.NumCols(); 19 20 if (B.NumRows() != n || B.NumCols() != m) 21 Error("matrix add: dimension mismatch"); 22 23 X.SetDims(n, m); 24 25 long i, j; 26 for (i = 1; i <= n; i++) 27 for (j = 1; j <= m; j++) 28 add(X(i,j), A(i,j), B(i,j)); 29 } 30 31 void mul_aux(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 32 { 33 long n = A.NumRows(); 34 long l = A.NumCols(); 35 long m = B.NumCols(); 36 37 if (l != B.NumRows()) 38 Error("matrix mul: dimension mismatch"); 39 40 X.SetDims(n, m); 41 42 long i, j, k; 43 GF2X acc, tmp; 44 45 for (i = 1; i <= n; i++) { 46 for (j = 1; j <= m; j++) { 47 clear(acc); 48 for(k = 1; k <= l; k++) { 49 mul(tmp, rep(A(i,k)), rep(B(k,j))); 50 add(acc, acc, tmp); 51 } 52 conv(X(i,j), acc); 53 } 54 } 55 } 56 57 58 void mul(mat_GF2E& X, const mat_GF2E& A, const mat_GF2E& B) 59 { 60 if (&X == &A || &X == &B) { 61 mat_GF2E tmp; 62 mul_aux(tmp, A, B); 63 X = tmp; 64 } 65 else 66 mul_aux(X, A, B); 67 } 68 69 70 70 static 71 void mul_aux(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 72 { 73 long n = A.NumRows(); 74 long l = A.NumCols(); 75 76 if (l != b.length()) 77 Error("matrix mul: dimension mismatch"); 78 79 x.SetLength(n); 80 81 long i, k; 82 GF2X acc, tmp; 83 84 for (i = 1; i <= n; i++) { 85 clear(acc); 86 for (k = 1; k <= l; k++) { 87 mul(tmp, rep(A(i,k)), rep(b(k))); 88 add(acc, acc, tmp); 89 } 90 conv(x(i), acc); 91 } 92 } 93 94 95 void mul(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 96 { 71 void mul_aux(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 72 { 73 long n = A.NumRows(); 74 long l = A.NumCols(); 75 76 if (l != b.length()) 77 Error("matrix mul: dimension mismatch"); 78 79 x.SetLength(n); 80 81 long i, k; 82 GF2X acc, tmp; 83 84 for (i = 1; i <= n; i++) { 85 clear(acc); 86 for (k = 1; k <= l; k++) { 87 mul(tmp, rep(A(i,k)), rep(b(k))); 88 add(acc, acc, tmp); 89 } 90 conv(x(i), acc); 91 } 92 } 93 94 95 void mul(vec_GF2E& x, const mat_GF2E& A, const vec_GF2E& b) 96 { 97 97 if (&b == &x || A.position1(x) != -1) { 98 98 vec_GF2E tmp; … … 102 102 else 103 103 mul_aux(x, A, b); 104 } 104 } 105 105 106 106 static 107 void mul_aux(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B) 108 { 109 long n = B.NumRows(); 110 long l = B.NumCols(); 111 112 if (n != a.length()) 113 Error("matrix mul: dimension mismatch"); 114 115 x.SetLength(l); 116 117 long i, k; 118 GF2X acc, tmp; 119 120 for (i = 1; i <= l; i++) { 121 clear(acc); 122 for (k = 1; k <= n; k++) { 107 void mul_aux(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B) 108 { 109 long n = B.NumRows(); 110 long l = B.NumCols(); 111 112 if (n != a.length()) 113 Error("matrix mul: dimension mismatch"); 114 115 x.SetLength(l); 116 117 long i, k; 118 GF2X acc, tmp; 119 120 for (i = 1; i <= l; i++) { 121 clear(acc); 122 for (k = 1; k <= n; k++) { 123 123 mul(tmp, rep(a(k)), rep(B(k,i))); 124 add(acc, acc, tmp); 125 } 126 conv(x(i), acc); 127 } 128 } 124 add(acc, acc, tmp); 125 } 126 conv(x(i), acc); 127 } 128 } 129 129 130 130 void mul(vec_GF2E& x, const vec_GF2E& a, const mat_GF2E& B) … … 139 139 } 140 140 141 142 143 void ident(mat_GF2E& X, long n) 144 { 145 X.SetDims(n, n); 146 long i, j; 147 148 for (i = 1; i <= n; i++) 149 for (j = 1; j <= n; j++) 150 if (i == j) 151 set(X(i, j)); 152 else 153 clear(X(i, j)); 154 } 141 142 143 void ident(mat_GF2E& X, long n) 144 { 145 X.SetDims(n, n); 146 long i, j; 147 148 for (i = 1; i <= n; i++) 149 for (j = 1; j <= n; j++) 150 if (i == j) 151 set(X(i, j)); 152 else 153 clear(X(i, j)); 154 } 155 155 156 156 … … 254 254 return 1; 255 255 } 256 256 257 257 258 258 void transpose(mat_GF2E& X, const mat_GF2E& A) … … 285 285 } 286 286 } 287 288 289 void solve(GF2E& d, vec_GF2E& X, 287 288 289 void solve(GF2E& d, vec_GF2E& X, 290 290 const mat_GF2E& A, const vec_GF2E& b) 291 291 … … 316 316 for (i = 0; i < n; i++) { 317 317 M[i].SetSize(n+1, 2*GF2E::WordLength()); 318 for (j = 0; j < n; j++) 318 for (j = 0; j < n; j++) 319 319 M[i][j] = rep(A[j][i]); 320 320 M[i][n] = rep(b[i]); … … 553 553 } 554 554 } 555 555 556 556 for (i = 0; i < n; i++) 557 557 for (j = 0; j < m; j++) … … 607 607 608 608 D[j] = i; 609 inv(inverses[j], M[i][j]); 609 inv(inverses[j], M[i][j]); 610 610 } 611 611 … … 638 638 } 639 639 } 640 640 641 641 void mul(mat_GF2E& X, const mat_GF2E& A, const GF2E& b_in) 642 642 { … … 660 660 } 661 661 662 void diag(mat_GF2E& X, long n, const GF2E& d_in) 663 { 662 void diag(mat_GF2E& X, long n, const GF2E& d_in) 663 { 664 664 GF2E d = d_in; 665 X.SetDims(n, n); 666 long i, j; 667 668 for (i = 1; i <= n; i++) 669 for (j = 1; j <= n; j++) 670 if (i == j) 671 X(i, j) = d; 672 else 673 clear(X(i, j)); 674 } 665 X.SetDims(n, n); 666 long i, j; 667 668 for (i = 1; i <= n; i++) 669 for (j = 1; j <= n; j++) 670 if (i == j) 671 X(i, j) = d; 672 else 673 clear(X(i, j)); 674 } 675 675 676 676 long IsDiag(const mat_GF2E& A, long n, const GF2E& d)
Note: See TracChangeset
for help on using the changeset viewer.