43 std::cout <<
"-E- InvSym15: size is not correct" << std::endl;
80 pM[
SM10] * mDet2_23_12 - pM[
SM11] * mDet2_23_02 + pM[
SM12] * mDet2_23_01;
82 pM[
SM10] * mDet2_23_13 - pM[
SM11] * mDet2_23_03 + pM[
SM13] * mDet2_23_01;
84 pM[
SM10] * mDet2_23_23 - pM[
SM12] * mDet2_23_03 + pM[
SM13] * mDet2_23_02;
86 pM[
SM11] * mDet2_23_23 - pM[
SM12] * mDet2_23_13 + pM[
SM13] * mDet2_23_12;
88 pM[
SM10] * mDet2_24_12 - pM[
SM11] * mDet2_24_02 + pM[
SM12] * mDet2_24_01;
90 pM[
SM10] * mDet2_24_13 - pM[
SM11] * mDet2_24_03 + pM[
SM13] * mDet2_24_01;
92 pM[
SM10] * mDet2_24_14 - pM[
SM11] * mDet2_24_04 + pM[
SM14] * mDet2_24_01;
94 pM[
SM10] * mDet2_24_23 - pM[
SM12] * mDet2_24_03 + pM[
SM13] * mDet2_24_02;
96 pM[
SM10] * mDet2_24_24 - pM[
SM12] * mDet2_24_04 + pM[
SM14] * mDet2_24_02;
98 pM[
SM11] * mDet2_24_23 - pM[
SM12] * mDet2_24_13 + pM[
SM13] * mDet2_24_12;
100 pM[
SM11] * mDet2_24_24 - pM[
SM12] * mDet2_24_14 + pM[
SM14] * mDet2_24_12;
102 pM[
SM10] * mDet2_34_12 - pM[
SM11] * mDet2_34_02 + pM[
SM12] * mDet2_34_01;
104 pM[
SM10] * mDet2_34_13 - pM[
SM11] * mDet2_34_03 + pM[
SM13] * mDet2_34_01;
106 pM[
SM10] * mDet2_34_14 - pM[
SM11] * mDet2_34_04 + pM[
SM14] * mDet2_34_01;
108 pM[
SM10] * mDet2_34_23 - pM[
SM12] * mDet2_34_03 + pM[
SM13] * mDet2_34_02;
110 pM[
SM10] * mDet2_34_24 - pM[
SM12] * mDet2_34_04 + pM[
SM14] * mDet2_34_02;
112 pM[
SM10] * mDet2_34_34 - pM[
SM13] * mDet2_34_04 + pM[
SM14] * mDet2_34_03;
114 pM[
SM11] * mDet2_34_23 - pM[
SM12] * mDet2_34_13 + pM[
SM13] * mDet2_34_12;
116 pM[
SM11] * mDet2_34_24 - pM[
SM12] * mDet2_34_14 + pM[
SM14] * mDet2_34_12;
118 pM[
SM11] * mDet2_34_34 - pM[
SM13] * mDet2_34_14 + pM[
SM14] * mDet2_34_13;
120 pM[
SM20] * mDet2_34_12 - pM[
SM21] * mDet2_34_02 + pM[
SM22] * mDet2_34_01;
122 pM[
SM20] * mDet2_34_13 - pM[
SM21] * mDet2_34_03 + pM[
SM23] * mDet2_34_01;
124 pM[
SM20] * mDet2_34_14 - pM[
SM21] * mDet2_34_04 + pM[
SM24] * mDet2_34_01;
126 pM[
SM20] * mDet2_34_23 - pM[
SM22] * mDet2_34_03 + pM[
SM23] * mDet2_34_02;
128 pM[
SM20] * mDet2_34_24 - pM[
SM22] * mDet2_34_04 + pM[
SM24] * mDet2_34_02;
130 pM[
SM20] * mDet2_34_34 - pM[
SM23] * mDet2_34_04 + pM[
SM24] * mDet2_34_03;
132 pM[
SM21] * mDet2_34_23 - pM[
SM22] * mDet2_34_13 + pM[
SM23] * mDet2_34_12;
134 pM[
SM21] * mDet2_34_24 - pM[
SM22] * mDet2_34_14 + pM[
SM24] * mDet2_34_12;
136 pM[
SM21] * mDet2_34_34 - pM[
SM23] * mDet2_34_14 + pM[
SM24] * mDet2_34_13;
138 pM[
SM22] * mDet2_34_34 - pM[
SM23] * mDet2_34_24 + pM[
SM24] * mDet2_34_23;
143 pM[
SM00] * mDet3_123_123 - pM[
SM01] * mDet3_123_023
144 + pM[
SM02] * mDet3_123_013 - pM[
SM03] * mDet3_123_012;
146 pM[
SM00] * mDet3_124_123 - pM[
SM01] * mDet3_124_023
147 + pM[
SM02] * mDet3_124_013 - pM[
SM03] * mDet3_124_012;
149 pM[
SM00] * mDet3_124_124 - pM[
SM01] * mDet3_124_024
150 + pM[
SM02] * mDet3_124_014 - pM[
SM04] * mDet3_124_012;
152 pM[
SM00] * mDet3_134_123 - pM[
SM01] * mDet3_134_023
153 + pM[
SM02] * mDet3_134_013 - pM[
SM03] * mDet3_134_012;
155 pM[
SM00] * mDet3_134_124 - pM[
SM01] * mDet3_134_024
156 + pM[
SM02] * mDet3_134_014 - pM[
SM04] * mDet3_134_012;
158 pM[
SM00] * mDet3_134_134 - pM[
SM01] * mDet3_134_034
159 + pM[
SM03] * mDet3_134_014 - pM[
SM04] * mDet3_134_013;
161 pM[
SM00] * mDet3_234_123 - pM[
SM01] * mDet3_234_023
162 + pM[
SM02] * mDet3_234_013 - pM[
SM03] * mDet3_234_012;
164 pM[
SM00] * mDet3_234_124 - pM[
SM01] * mDet3_234_024
165 + pM[
SM02] * mDet3_234_014 - pM[
SM04] * mDet3_234_012;
167 pM[
SM00] * mDet3_234_134 - pM[
SM01] * mDet3_234_034
168 + pM[
SM03] * mDet3_234_014 - pM[
SM04] * mDet3_234_013;
170 pM[
SM00] * mDet3_234_234 - pM[
SM02] * mDet3_234_034
171 + pM[
SM03] * mDet3_234_024 - pM[
SM04] * mDet3_234_023;
173 pM[
SM10] * mDet3_234_123 - pM[
SM11] * mDet3_234_023
174 + pM[
SM12] * mDet3_234_013 - pM[
SM13] * mDet3_234_012;
176 pM[
SM10] * mDet3_234_124 - pM[
SM11] * mDet3_234_024
177 + pM[
SM12] * mDet3_234_014 - pM[
SM14] * mDet3_234_012;
179 pM[
SM10] * mDet3_234_134 - pM[
SM11] * mDet3_234_034
180 + pM[
SM13] * mDet3_234_014 - pM[
SM14] * mDet3_234_013;
182 pM[
SM10] * mDet3_234_234 - pM[
SM12] * mDet3_234_034
183 + pM[
SM13] * mDet3_234_024 - pM[
SM14] * mDet3_234_023;
185 pM[
SM11] * mDet3_234_234 - pM[
SM12] * mDet3_234_134
186 + pM[
SM13] * mDet3_234_124 - pM[
SM14] * mDet3_234_123;
190 const litfloat det = pM[
SM00] * mDet4_1234_1234 - pM[
SM01] * mDet4_1234_0234
191 + pM[
SM02] * mDet4_1234_0134 - pM[
SM03] * mDet4_1234_0124
192 + pM[
SM04] * mDet4_1234_0123;
195 std::cout <<
"-E- InvSym15: zero determinant" << std::endl;
199 const litfloat oneOverDet = 1.0 / det;
200 const litfloat mn1OverDet = -oneOverDet;
202 pM[
SM00] = mDet4_1234_1234 * oneOverDet;
203 pM[
SM01] = mDet4_1234_0234 * mn1OverDet;
204 pM[
SM02] = mDet4_1234_0134 * oneOverDet;
205 pM[
SM03] = mDet4_1234_0124 * mn1OverDet;
206 pM[
SM04] = mDet4_1234_0123 * oneOverDet;
208 pM[
SM11] = mDet4_0234_0234 * oneOverDet;
209 pM[
SM12] = mDet4_0234_0134 * mn1OverDet;
210 pM[
SM13] = mDet4_0234_0124 * oneOverDet;
211 pM[
SM14] = mDet4_0234_0123 * mn1OverDet;
213 pM[
SM22] = mDet4_0134_0134 * oneOverDet;
214 pM[
SM23] = mDet4_0134_0124 * mn1OverDet;
215 pM[
SM24] = mDet4_0134_0123 * oneOverDet;
217 pM[
SM33] = mDet4_0124_0124 * oneOverDet;
218 pM[
SM34] = mDet4_0124_0123 * mn1OverDet;
220 pM[
SM44] = mDet4_0123_0123 * oneOverDet;
226 bool Mult25(
const std::vector<litfloat>& a,
227 const std::vector<litfloat>& b,
228 std::vector<litfloat>& c) {
229 if (a.size() != 25 || b.size() != 25 || c.size() != 25) {
230 std::cout <<
"-E- Mult25: size is not correct" << std::endl;
234 c[0] = a[0] * b[0] + a[1] * b[5] + a[2] * b[10] + a[3] * b[15] + a[4] * b[20];
235 c[1] = a[0] * b[1] + a[1] * b[6] + a[2] * b[11] + a[3] * b[16] + a[4] * b[21];
236 c[2] = a[0] * b[2] + a[1] * b[7] + a[2] * b[12] + a[3] * b[17] + a[4] * b[22];
237 c[3] = a[0] * b[3] + a[1] * b[8] + a[2] * b[13] + a[3] * b[18] + a[4] * b[23];
238 c[4] = a[0] * b[4] + a[1] * b[9] + a[2] * b[14] + a[3] * b[19] + a[4] * b[24];
239 c[5] = a[5] * b[0] + a[6] * b[5] + a[7] * b[10] + a[8] * b[15] + a[9] * b[20];
240 c[6] = a[5] * b[1] + a[6] * b[6] + a[7] * b[11] + a[8] * b[16] + a[9] * b[21];
241 c[7] = a[5] * b[2] + a[6] * b[7] + a[7] * b[12] + a[8] * b[17] + a[9] * b[22];
242 c[8] = a[5] * b[3] + a[6] * b[8] + a[7] * b[13] + a[8] * b[18] + a[9] * b[23];
243 c[9] = a[5] * b[4] + a[6] * b[9] + a[7] * b[14] + a[8] * b[19] + a[9] * b[24];
245 a[10] * b[0] + a[11] * b[5] + a[12] * b[10] + a[13] * b[15] + a[14] * b[20];
247 a[10] * b[1] + a[11] * b[6] + a[12] * b[11] + a[13] * b[16] + a[14] * b[21];
249 a[10] * b[2] + a[11] * b[7] + a[12] * b[12] + a[13] * b[17] + a[14] * b[22];
251 a[10] * b[3] + a[11] * b[8] + a[12] * b[13] + a[13] * b[18] + a[14] * b[23];
253 a[10] * b[4] + a[11] * b[9] + a[12] * b[14] + a[13] * b[19] + a[14] * b[24];
255 a[15] * b[0] + a[16] * b[5] + a[17] * b[10] + a[18] * b[15] + a[19] * b[20];
257 a[15] * b[1] + a[16] * b[6] + a[17] * b[11] + a[18] * b[16] + a[19] * b[21];
259 a[15] * b[2] + a[16] * b[7] + a[17] * b[12] + a[18] * b[17] + a[19] * b[22];
261 a[15] * b[3] + a[16] * b[8] + a[17] * b[13] + a[18] * b[18] + a[19] * b[23];
263 a[15] * b[4] + a[16] * b[9] + a[17] * b[14] + a[18] * b[19] + a[19] * b[24];
265 a[20] * b[0] + a[21] * b[5] + a[22] * b[10] + a[23] * b[15] + a[24] * b[20];
267 a[20] * b[1] + a[21] * b[6] + a[22] * b[11] + a[23] * b[16] + a[24] * b[21];
269 a[20] * b[2] + a[21] * b[7] + a[22] * b[12] + a[23] * b[17] + a[24] * b[22];
271 a[20] * b[3] + a[21] * b[8] + a[22] * b[13] + a[23] * b[18] + a[24] * b[23];
273 a[20] * b[4] + a[21] * b[9] + a[22] * b[14] + a[23] * b[19] + a[24] * b[24];
278 bool Mult36(
const std::vector<litfloat>& a,
279 const std::vector<litfloat>& b,
280 std::vector<litfloat>& c) {
281 if (a.size() != 36 || b.size() != 36 || c.size() != 36) {
282 std::cout <<
"-E- Mult36: size is not correct" << std::endl;
286 for (
int i = 0;
i < 6; ++
i) {
287 for (
int j = 0; j < 6; ++j) {
290 for (
int k = 0; k < 6; ++k)
291 c[6 *
i + j] += a[6 *
i + k] * b[j + 6 * k];
299 if (a.size() != 25) {
300 std::cout <<
"-E- Transpose25: size is not correct" << std::endl;
303 std::vector<litfloat> b(a);
334 const std::vector<litfloat>& b,
335 std::vector<litfloat>& c) {
336 if (a.size() != 25 || b.size() != 7 || c.size() != 7) {
337 std::cout <<
"-E- Mult25On5: size is not correct" << std::endl;
340 c[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3] + a[4] * b[4];
341 c[1] = a[5] * b[0] + a[6] * b[1] + a[7] * b[2] + a[8] * b[3] + a[9] * b[4];
343 a[10] * b[0] + a[11] * b[1] + a[12] * b[2] + a[13] * b[3] + a[14] * b[4];
345 a[15] * b[0] + a[16] * b[1] + a[17] * b[2] + a[18] * b[3] + a[19] * b[4];
347 a[20] * b[0] + a[21] * b[1] + a[22] * b[2] + a[23] * b[3] + a[24] * b[4];
352 const std::vector<litfloat>& b,
353 std::vector<litfloat>& c) {
354 if (a.size() != 15 || b.size() != 7 || c.size() != 7) {
355 std::cout <<
"-E- Mult15On5: size is not correct" << std::endl;
358 c[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3] + a[4] * b[4];
359 c[1] = a[1] * b[0] + a[5] * b[1] + a[6] * b[2] + a[7] * b[3] + a[8] * b[4];
360 c[2] = a[2] * b[0] + a[6] * b[1] + a[9] * b[2] + a[10] * b[3] + a[11] * b[4];
361 c[3] = a[3] * b[0] + a[7] * b[1] + a[10] * b[2] + a[12] * b[3] + a[13] * b[4];
362 c[4] = a[4] * b[0] + a[8] * b[1] + a[11] * b[2] + a[13] * b[3] + a[14] * b[4];
367 const std::vector<litfloat>& b,
368 std::vector<litfloat>& c) {
369 if (a.size() != b.size() || a.size() != c.size()) {
370 std::cout <<
"-E- Subtract: size is not correct" << std::endl;
373 for (
unsigned int i = 0;
i < a.size(); ++
i) {
380 bool Add(
const std::vector<litfloat>& a,
381 const std::vector<litfloat>& b,
382 std::vector<litfloat>& c) {
383 if (a.size() != b.size() || a.size() != c.size()) {
384 std::cout <<
"-E- Add: size is not correct" << std::endl;
387 for (
unsigned int i = 0;
i < a.size(); ++
i) {
396 const std::vector<litfloat>& b,
397 std::vector<litfloat>& c) {
398 if (a.size() != 25 || b.size() != 15 || c.size() != 15) {
399 std::cout <<
"-E- Similarity: size is not correct" << std::endl;
404 a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3] + a[4] * b[4];
406 a[0] * b[1] + a[1] * b[5] + a[2] * b[6] + a[3] * b[7] + a[4] * b[8];
408 a[0] * b[2] + a[1] * b[6] + a[2] * b[9] + a[3] * b[10] + a[4] * b[11];
410 a[0] * b[3] + a[1] * b[7] + a[2] * b[10] + a[3] * b[12] + a[4] * b[13];
412 a[0] * b[4] + a[1] * b[8] + a[2] * b[11] + a[3] * b[13] + a[4] * b[14];
415 a[5] * b[0] + a[6] * b[1] + a[7] * b[2] + a[8] * b[3] + a[9] * b[4];
417 a[5] * b[1] + a[6] * b[5] + a[7] * b[6] + a[8] * b[7] + a[9] * b[8];
419 a[5] * b[2] + a[6] * b[6] + a[7] * b[9] + a[8] * b[10] + a[9] * b[11];
421 a[5] * b[3] + a[6] * b[7] + a[7] * b[10] + a[8] * b[12] + a[9] * b[13];
423 a[5] * b[4] + a[6] * b[8] + a[7] * b[11] + a[8] * b[13] + a[9] * b[14];
426 a[10] * b[0] + a[11] * b[1] + a[12] * b[2] + a[13] * b[3] + a[14] * b[4];
428 a[10] * b[1] + a[11] * b[5] + a[12] * b[6] + a[13] * b[7] + a[14] * b[8];
430 a[10] * b[2] + a[11] * b[6] + a[12] * b[9] + a[13] * b[10] + a[14] * b[11];
432 a[10] * b[3] + a[11] * b[7] + a[12] * b[10] + a[13] * b[12] + a[14] * b[13];
434 a[10] * b[4] + a[11] * b[8] + a[12] * b[11] + a[13] * b[13] + a[14] * b[14];
437 a[15] * b[0] + a[16] * b[1] + a[17] * b[2] + a[18] * b[3] + a[19] * b[4];
439 a[15] * b[1] + a[16] * b[5] + a[17] * b[6] + a[18] * b[7] + a[19] * b[8];
441 a[15] * b[2] + a[16] * b[6] + a[17] * b[9] + a[18] * b[10] + a[19] * b[11];
443 a[15] * b[3] + a[16] * b[7] + a[17] * b[10] + a[18] * b[12] + a[19] * b[13];
445 a[15] * b[4] + a[16] * b[8] + a[17] * b[11] + a[18] * b[13] + a[19] * b[14];
447 c[0] = A * a[0] + B * a[1] + C * a[2] + D * a[3] + E * a[4];
448 c[1] = A * a[5] + B * a[6] + C * a[7] + D * a[8] + E * a[9];
449 c[2] = A * a[10] + B * a[11] + C * a[12] + D * a[13] + E * a[14];
450 c[3] = A * a[15] + B * a[16] + C * a[17] + D * a[18] + E * a[19];
451 c[4] = A * a[20] + B * a[21] + C * a[22] + D * a[23] + E * a[24];
453 c[5] = F * a[5] + G * a[6] + H * a[7] + I * a[8] + J * a[9];
454 c[6] = F * a[10] + G * a[11] + H * a[12] + I * a[13] + J * a[14];
455 c[7] = F * a[15] + G * a[16] + H * a[17] + I * a[18] + J * a[19];
456 c[8] = F * a[20] + G * a[21] + H * a[22] + I * a[23] + J * a[24];
458 c[9] = K * a[10] + L * a[11] + M * a[12] + N * a[13] + O * a[14];
459 c[10] = K * a[15] + L * a[16] + M * a[17] + N * a[18] + O * a[19];
460 c[11] = K * a[20] + L * a[21] + M * a[22] + N * a[23] + O * a[24];
462 c[12] = P * a[15] + Q * a[16] + R * a[17] + S * a[18] + T * a[19];
463 c[13] = P * a[20] + Q * a[21] + R * a[22] + S * a[23] + T * a[24];
466 (a[20] * b[0] + a[21] * b[1] + a[22] * b[2] + a[23] * b[3] + a[24] * b[4])
468 + (a[20] * b[1] + a[21] * b[5] + a[22] * b[6] + a[23] * b[7] + a[24] * b[8])
470 + (a[20] * b[2] + a[21] * b[6] + a[22] * b[9] + a[23] * b[10]
473 + (a[20] * b[3] + a[21] * b[7] + a[22] * b[10] + a[23] * b[12]
476 + (a[20] * b[4] + a[21] * b[8] + a[22] * b[11] + a[23] * b[13]
484 const std::vector<litfloat>& b,
485 std::vector<litfloat>& c) {
486 if (a.size() != 15 || b.size() != 25 || c.size() != 25) {
487 std::cout <<
"-E- Mult15On25: size is not correct" << std::endl;
490 c[0] = a[0] * b[0] + a[1] * b[5] + a[2] * b[10] + a[3] * b[15] + a[4] * b[20];
491 c[1] = a[0] * b[1] + a[1] * b[6] + a[2] * b[11] + a[3] * b[16] + a[4] * b[21];
492 c[2] = a[0] * b[2] + a[1] * b[7] + a[2] * b[12] + a[3] * b[17] + a[4] * b[22];
493 c[3] = a[0] * b[3] + a[1] * b[8] + a[2] * b[13] + a[3] * b[18] + a[4] * b[23];
494 c[4] = a[0] * b[4] + a[1] * b[9] + a[2] * b[14] + a[3] * b[19] + a[4] * b[24];
495 c[5] = a[1] * b[0] + a[5] * b[5] + a[6] * b[10] + a[7] * b[15] + a[8] * b[20];
496 c[6] = a[1] * b[1] + a[5] * b[6] + a[6] * b[11] + a[7] * b[16] + a[8] * b[21];
497 c[7] = a[1] * b[2] + a[5] * b[7] + a[6] * b[12] + a[7] * b[17] + a[8] * b[22];
498 c[8] = a[1] * b[3] + a[5] * b[8] + a[6] * b[13] + a[7] * b[18] + a[8] * b[23];
499 c[9] = a[1] * b[4] + a[5] * b[9] + a[6] * b[14] + a[7] * b[19] + a[8] * b[24];
501 a[2] * b[0] + a[6] * b[5] + a[9] * b[10] + a[10] * b[15] + a[11] * b[20];
503 a[2] * b[1] + a[6] * b[6] + a[9] * b[11] + a[10] * b[16] + a[11] * b[21];
505 a[2] * b[2] + a[6] * b[7] + a[9] * b[12] + a[10] * b[17] + a[11] * b[22];
507 a[2] * b[3] + a[6] * b[8] + a[9] * b[13] + a[10] * b[18] + a[11] * b[23];
509 a[2] * b[4] + a[6] * b[9] + a[9] * b[14] + a[10] * b[19] + a[11] * b[24];
511 a[3] * b[0] + a[7] * b[5] + a[10] * b[10] + a[12] * b[15] + a[13] * b[20];
513 a[3] * b[1] + a[7] * b[6] + a[10] * b[11] + a[12] * b[16] + a[13] * b[21];
515 a[3] * b[2] + a[7] * b[7] + a[10] * b[12] + a[12] * b[17] + a[13] * b[22];
517 a[3] * b[3] + a[7] * b[8] + a[10] * b[13] + a[12] * b[18] + a[13] * b[23];
519 a[3] * b[4] + a[7] * b[9] + a[10] * b[14] + a[12] * b[19] + a[13] * b[24];
521 a[4] * b[0] + a[8] * b[5] + a[11] * b[10] + a[13] * b[15] + a[14] * b[20];
523 a[4] * b[1] + a[8] * b[6] + a[11] * b[11] + a[13] * b[16] + a[14] * b[21];
525 a[4] * b[2] + a[8] * b[7] + a[11] * b[12] + a[13] * b[17] + a[14] * b[22];
527 a[4] * b[3] + a[8] * b[8] + a[11] * b[13] + a[13] * b[18] + a[14] * b[23];
529 a[4] * b[4] + a[8] * b[9] + a[11] * b[14] + a[13] * b[19] + a[14] * b[24];
535 const std::vector<litfloat>& b,
536 std::vector<litfloat>& c) {
537 if (a.size() != 25 || b.size() != 15 || c.size() != 25) {
538 std::cout <<
"-E- Mult15On25: size is not correct" << std::endl;
541 c[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3] + a[4] * b[4];
542 c[1] = a[0] * b[1] + a[1] * b[5] + a[2] * b[6] + a[3] * b[7] + a[4] * b[8];
543 c[2] = a[0] * b[2] + a[1] * b[6] + a[2] * b[9] + a[3] * b[10] + a[4] * b[11];
544 c[3] = a[0] * b[3] + a[1] * b[7] + a[2] * b[10] + a[3] * b[12] + a[4] * b[13];
545 c[4] = a[0] * b[4] + a[1] * b[8] + a[2] * b[11] + a[3] * b[13] + a[4] * b[14];
546 c[5] = a[5] * b[0] + a[6] * b[1] + a[7] * b[2] + a[8] * b[3] + a[9] * b[4];
547 c[6] = a[5] * b[1] + a[6] * b[5] + a[7] * b[6] + a[8] * b[7] + a[9] * b[8];
548 c[7] = a[5] * b[2] + a[6] * b[6] + a[7] * b[9] + a[8] * b[10] + a[9] * b[11];
549 c[8] = a[5] * b[3] + a[6] * b[7] + a[7] * b[10] + a[8] * b[12] + a[9] * b[13];
550 c[9] = a[5] * b[4] + a[6] * b[8] + a[7] * b[11] + a[8] * b[13] + a[9] * b[14];
552 a[10] * b[0] + a[11] * b[1] + a[12] * b[2] + a[13] * b[3] + a[14] * b[4];
554 a[10] * b[1] + a[11] * b[5] + a[12] * b[6] + a[13] * b[7] + a[14] * b[8];
556 a[10] * b[2] + a[11] * b[6] + a[12] * b[9] + a[13] * b[10] + a[14] * b[11];
558 a[10] * b[3] + a[11] * b[7] + a[12] * b[10] + a[13] * b[12] + a[14] * b[13];
560 a[10] * b[4] + a[11] * b[8] + a[12] * b[11] + a[13] * b[13] + a[14] * b[14];
562 a[15] * b[0] + a[16] * b[1] + a[17] * b[2] + a[18] * b[3] + a[19] * b[4];
564 a[15] * b[1] + a[16] * b[5] + a[17] * b[6] + a[18] * b[7] + a[19] * b[8];
566 a[15] * b[2] + a[16] * b[6] + a[17] * b[9] + a[18] * b[10] + a[19] * b[11];
568 a[15] * b[3] + a[16] * b[7] + a[17] * b[10] + a[18] * b[12] + a[19] * b[13];
570 a[15] * b[4] + a[16] * b[8] + a[17] * b[11] + a[18] * b[13] + a[19] * b[14];
572 a[20] * b[0] + a[21] * b[1] + a[22] * b[2] + a[23] * b[3] + a[24] * b[4];
574 a[20] * b[1] + a[21] * b[5] + a[22] * b[6] + a[23] * b[7] + a[24] * b[8];
576 a[20] * b[2] + a[21] * b[6] + a[22] * b[9] + a[23] * b[10] + a[24] * b[11];
578 a[20] * b[3] + a[21] * b[7] + a[22] * b[10] + a[23] * b[12] + a[24] * b[13];
580 a[20] * b[4] + a[21] * b[8] + a[22] * b[11] + a[23] * b[13] + a[24] * b[14];