xref: /inferno-os/libmath/blas.c (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
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 	}
46 	return sum;
47 }
48 
49 
50 double
51 norm2(int n, double *x)
52 {
53 	double	sum = 0;
54 	if (n <= 0)
55 		return 0;
56 	while (n--) {
57 		sum += *x * *x;
58 		x++;
59 	}
60 	return sum;
61 }
62