mirror of
https://github.com/sjwhitworth/golearn.git
synced 2025-04-25 13:48:49 +08:00
45 lines
1.0 KiB
C
45 lines
1.0 KiB
C
#include "blas.h"
|
|
|
|
int dscal_(int *n, double *sa, double *sx, int *incx)
|
|
{
|
|
long int i, m, nincx, nn, iincx;
|
|
double ssa;
|
|
|
|
/* scales a vector by a constant.
|
|
uses unrolled loops for increment equal to 1.
|
|
jack dongarra, linpack, 3/11/78.
|
|
modified 3/93 to return if incx .le. 0.
|
|
modified 12/3/93, array(1) declarations changed to array(*) */
|
|
|
|
/* Dereference inputs */
|
|
nn = *n;
|
|
iincx = *incx;
|
|
ssa = *sa;
|
|
|
|
if (nn > 0 && iincx > 0)
|
|
{
|
|
if (iincx == 1) /* code for increment equal to 1 */
|
|
{
|
|
m = nn-4;
|
|
for (i = 0; i < m; i += 5)
|
|
{
|
|
sx[i] = ssa * sx[i];
|
|
sx[i+1] = ssa * sx[i+1];
|
|
sx[i+2] = ssa * sx[i+2];
|
|
sx[i+3] = ssa * sx[i+3];
|
|
sx[i+4] = ssa * sx[i+4];
|
|
}
|
|
for ( ; i < nn; ++i) /* clean-up loop */
|
|
sx[i] = ssa * sx[i];
|
|
}
|
|
else /* code for increment not equal to 1 */
|
|
{
|
|
nincx = nn * iincx;
|
|
for (i = 0; i < nincx; i += iincx)
|
|
sx[i] = ssa * sx[i];
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} /* dscal_ */
|