xref: /inferno-os/libmath/blas.c (revision 9d5057f4014d21d559fd83d5e6c4352fc930b877)
1 #include "lib9.h"
2 #include "mathi.h"
3 
4 double
5 dot(int n, double *x, double *y)
6 {
7 	double	sum = 0;
8 	if (n <= 0)
9 		return 0;
10 	while (n--) {
11 		sum += *x++ * *y++;
12 	}
13 	return sum;
14 }
15 
16 
17 int
18 iamax(int n, double *x)
19 {
20 	int	i, m;
21 	double	xm, a;
22 	if (n <= 0)
23 		return 0;
24 	m = 0;
25 	xm = fabs(*x);
26 	for (i = 1; i < n; i++) {
27 		a = fabs(*++x);
28 		if (xm < a) {
29 			m = i;
30 			xm = a;
31 		}
32 	}
33 	return m;
34 }
35 
36 
37 double
38 norm1(int n, double *x)
39 {
40 	double	sum = 0;
41 	if (n <= 0)
42 		return 0;
43 	while (n--) {
44 		sum += fabs(*x);
45 		x++;
46 	}
47 	return sum;
48 }
49 
50 
51 double
52 norm2(int n, double *x)
53 {
54 	double	sum = 0;
55 	if (n <= 0)
56 		return 0;
57 	while (n--) {
58 		sum += *x * *x;
59 		x++;
60 	}
61 	return sum;
62 }
63