slassq.c

来自「NIST Handwriting OCR Testbed」· C语言 代码 · 共 105 行

C
105
字号
/** ======================================================================* NIST Guide to Available Math Software.* Fullsource for module SSYEVX.C from package CLAPACK.* Retrieved from NETLIB on Fri Mar 10 14:23:44 2000.* ======================================================================*/#include <f2c.h>/* Subroutine */ int slassq_(integer *n, real *x, integer *incx, real *scale, 	real *sumsq){/*  -- LAPACK auxiliary routine (version 2.0) --          Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,          Courant Institute, Argonne National Lab, and Rice University          October 31, 1992       Purpose       =======       SLASSQ  returns the values  scl  and  smsq  such that          ( scl**2 )*smsq = x( 1 )**2 +...+ x( n )**2 + ( scale**2 )*sumsq,       where  x( i ) = X( 1 + ( i - 1 )*INCX ). The value of  sumsq  is       assumed to be non-negative and  scl  returns the value          scl = max( scale, abs( x( i ) ) ).       scale and sumsq must be supplied in SCALE and SUMSQ and       scl and smsq are overwritten on SCALE and SUMSQ respectively.       The routine makes only one pass through the vector x.       Arguments       =========       N       (input) INTEGER               The number of elements to be used from the vector X.       X       (input) REAL               The vector for which a scaled sum of squares is computed.                  x( i )  = X( 1 + ( i - 1 )*INCX ), 1 <= i <= n.       INCX    (input) INTEGER               The increment between successive values of the vector X.               INCX > 0.       SCALE   (input/output) REAL               On entry, the value  scale  in the equation above.               On exit, SCALE is overwritten with  scl , the scaling factor               for the sum of squares.       SUMSQ   (input/output) REAL               On entry, the value  sumsq  in the equation above.               On exit, SUMSQ is overwritten with  smsq , the basic sum of               squares from which  scl  has been factored out.      =====================================================================          Parameter adjustments          Function Body */    /* System generated locals */    integer i__1, i__2;    real r__1;    /* Local variables */    static real absxi;    static integer ix;#define X(I) x[(I)-1]    if (*n > 0) {	i__1 = (*n - 1) * *incx + 1;	i__2 = *incx;	for (ix = 1; *incx < 0 ? ix >= (*n-1)**incx+1 : ix <= (*n-1)**incx+1; ix += *incx) {	    if (X(ix) != 0.f) {		absxi = (r__1 = X(ix), dabs(r__1));		if (*scale < absxi) {/* Computing 2nd power */		    r__1 = *scale / absxi;		    *sumsq = *sumsq * (r__1 * r__1) + 1;		    *scale = absxi;		} else {/* Computing 2nd power */		    r__1 = absxi / *scale;		    *sumsq += r__1 * r__1;		}	    }/* L10: */	}    }    return 0;/*     End of SLASSQ */} /* slassq_ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?