xref: /inferno-os/libmath/blas.c (revision 4a062f32e3dd93bf371feb27f3ccc28d7930099e)
137da2899SCharles.Forsyth #include "lib9.h"
237da2899SCharles.Forsyth #include "mathi.h"
337da2899SCharles.Forsyth 
437da2899SCharles.Forsyth double
dot(int n,double * x,double * y)537da2899SCharles.Forsyth dot(int n, double *x, double *y)
637da2899SCharles.Forsyth {
737da2899SCharles.Forsyth 	double	sum = 0;
837da2899SCharles.Forsyth 	if (n <= 0)
937da2899SCharles.Forsyth 		return 0;
1037da2899SCharles.Forsyth 	while (n--) {
1137da2899SCharles.Forsyth 		sum += *x++ * *y++;
1237da2899SCharles.Forsyth 	}
1337da2899SCharles.Forsyth 	return sum;
1437da2899SCharles.Forsyth }
1537da2899SCharles.Forsyth 
1637da2899SCharles.Forsyth 
1737da2899SCharles.Forsyth int
iamax(int n,double * x)1837da2899SCharles.Forsyth iamax(int n, double *x)
1937da2899SCharles.Forsyth {
2037da2899SCharles.Forsyth 	int	i, m;
2137da2899SCharles.Forsyth 	double	xm, a;
2237da2899SCharles.Forsyth 	if (n <= 0)
2337da2899SCharles.Forsyth 		return 0;
2437da2899SCharles.Forsyth 	m = 0;
2537da2899SCharles.Forsyth 	xm = fabs(*x);
2637da2899SCharles.Forsyth 	for (i = 1; i < n; i++) {
2737da2899SCharles.Forsyth 		a = fabs(*++x);
2837da2899SCharles.Forsyth 		if (xm < a) {
2937da2899SCharles.Forsyth 			m = i;
3037da2899SCharles.Forsyth 			xm = a;
3137da2899SCharles.Forsyth 		}
3237da2899SCharles.Forsyth 	}
3337da2899SCharles.Forsyth 	return m;
3437da2899SCharles.Forsyth }
3537da2899SCharles.Forsyth 
3637da2899SCharles.Forsyth 
3737da2899SCharles.Forsyth double
norm1(int n,double * x)3837da2899SCharles.Forsyth norm1(int n, double *x)
3937da2899SCharles.Forsyth {
4037da2899SCharles.Forsyth 	double	sum = 0;
4137da2899SCharles.Forsyth 	if (n <= 0)
4237da2899SCharles.Forsyth 		return 0;
4337da2899SCharles.Forsyth 	while (n--) {
4480a37440SCharles.Forsyth 		sum += fabs(*x);
4580a37440SCharles.Forsyth 		x++;
4637da2899SCharles.Forsyth 	}
4737da2899SCharles.Forsyth 	return sum;
4837da2899SCharles.Forsyth }
4937da2899SCharles.Forsyth 
5037da2899SCharles.Forsyth 
5137da2899SCharles.Forsyth double
norm2(int n,double * x)5237da2899SCharles.Forsyth norm2(int n, double *x)
5337da2899SCharles.Forsyth {
5437da2899SCharles.Forsyth 	double	sum = 0;
5537da2899SCharles.Forsyth 	if (n <= 0)
5637da2899SCharles.Forsyth 		return 0;
5737da2899SCharles.Forsyth 	while (n--) {
5837da2899SCharles.Forsyth 		sum += *x * *x;
5937da2899SCharles.Forsyth 		x++;
6037da2899SCharles.Forsyth 	}
61*2fd8fca5SAaron Robinson 	return sqrt(sum);
6237da2899SCharles.Forsyth }
63