CCL Home Page
Up Directory CCL idamax
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;

}

Modified: Wed Apr 24 16:00:00 1991 GMT
Page accessed 5993 times since Sat Apr 17 21:58:41 1999 GMT