int idamax( n, dx, incx ) double *dx; int n, incx; /* Purpose : Find largest component of double vector dx --- Input --- n : number of elements in input vector dx : double vector with n+1 elements, dx[0] is not used incx : storage spacing between elements of dx --- Output --- idamax : smallest index, 0 if n <= 0 Find smallest index of maximum magnitude of dx. idamax = first i, i=1 to n, to minimize fabs( dx[1-incx+i*incx] ). */ { double dmax, xmag; int i, ii, xindex; xindex = 0; if ( n <= 0 ) return xindex; xindex = 1; if ( n <= 1 || incx <= 0 ) return xindex; /* Code for increments not equal to 1. */ if ( incx != 1 ) { dmax = fabs( dx[1] ); ii = 2; for ( i = 1 + incx ; i <= n * incx ; i = i + incx ) { xmag = fabs( dx[i] ); if ( xmag > dmax ) { xindex = ii; dmax = xmag; } ii++; } return xindex; } /* Code for increments equal to 1. */ dmax = fabs( dx[1] ); for ( i = 2 ; i <= n ; i++ ) { xmag = fabs( dx[i] ); if ( xmag > dmax ) { xindex = i; dmax = xmag; } } return xindex; }