File: VMatMult.c

package info (click to toggle)
acm 5.0-23.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 8,364 kB
  • ctags: 4,793
  • sloc: ansic: 42,444; makefile: 706; cpp: 293; perl: 280; sh: 198
file content (46 lines) | stat: -rw-r--r-- 822 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "Vlib.h"

#if !((defined(__GNUC__) || defined(__STDC__) || defined(_WINDOWS)) && !defined(_NO_INLINE))

void
VMatrixMult(Mt1, Mt2, R)
VMatrix  *Mt1, *Mt2, *R;
{

	register int I, J, K;
	register double x;

	for (I = 0; I < 4; ++I)
		for (J = 0; J < 4; ++J) {
			x = 0.0;
			for (K = 0; K < 4; ++K)
				x += Mt1->m[K][J] * Mt2->m[I][K];
			R->m[I][J] = x;
		}
}

#endif

#define ZEROFOURTH

void
VMatrixMultByRank(VMatrix * Mt1, VMatrix * Mt2, VMatrix * R, int rank)
{

	register int I, J, K, r = rank;
	register double x;

	for (I = 0; I < r; ++I)
		for (J = 0; J < r; ++J) {
			x = 0.0;
			for (K = 0; K < r; ++K)
				x += Mt1->m[K][J] * Mt2->m[I][K];
			R->m[I][J] = x;
		}

#ifdef ZEROFOURTH
	R->m[0][3] = R->m[1][3] = R->m[2][3] = 0.0;
	R->m[3][0] = R->m[3][1] = R->m[3][2] = 0.0;
	R->m[3][3] = 1.0;
#endif
}