home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / biology / gsrc208a.zip / DSCAL.C < prev    next >
Text File  |  1992-05-01  |  1KB  |  68 lines

  1.  
  2.  
  3. void dscal( n, da, dx, incx )
  4.  
  5. double da, *dx;
  6. int n, incx;
  7.  
  8. /* Purpose : scalar vector multiplication
  9.  
  10.    dx = da * dx
  11.  
  12.  
  13.    --- Input ---
  14.  
  15.    n    : number of elements in input vector
  16.    da   : double scale factor
  17.    dx   : double vector with n+1 elements, dx[0] is not used
  18.    incx : storage spacing between elements of dx
  19.  
  20.  
  21.    --- Output ---
  22.  
  23.    dx = da * dx, unchanged if n <= 0
  24.  
  25.  
  26.    For i = 0 to n-1, replace dx[1+i*incx] with
  27.    da * dx[1+i*incx].
  28.  
  29. */
  30.  
  31. {
  32.    int m, i;
  33.  
  34.    if ( n <= 0 )
  35.       return;
  36.  
  37. /* Code for increments not equal to 1.  */
  38.  
  39.    if ( incx != 1 ) {
  40.       for ( i = 1 ; i <= n * incx ; i = i + incx ) 
  41.          dx[i] = da * dx[i];
  42.       return;
  43.    }
  44.  
  45. /* Code for increments equal to 1.  */
  46.  
  47. /* Clean-up loop so remaining vector length is a multiple of 5.  */
  48.  
  49.    m = n % 5;
  50.    if ( m != 0 ) {
  51.       for ( i = 1 ; i <= m ; i++ )
  52.          dx[i] = da * dx[i];
  53.       if ( n < 5 )
  54.          return;
  55.    }
  56.    for ( i = m + 1 ; i <= n ; i = i + 5 ) {
  57.       dx[i] = da * dx[i];
  58.       dx[i+1] = da * dx[i+1];
  59.       dx[i+2] = da * dx[i+2];
  60.       dx[i+3] = da * dx[i+3];
  61.       dx[i+4] = da * dx[i+4];
  62.    }
  63.    return;
  64.  
  65. }
  66.  
  67.  
  68.