dnrm2.f

来自「网络带宽测试工具」· F 代码 · 共 64 行

F
64
字号
      Function dnrm2( N, X, INCX )               Result( norm2 )! ----------------------------------------------------------------------      Use      Numerics      Implicit None*     .. Scalar Arguments ..      INTEGER                           INCX, N*     .. Array Arguments ..      Real(l_)                  X( * )*     ..**  dnrm2 returns the euclidean norm of a vector via the function*  name, so that**     dnrm2 := sqrt( x'*x )****  -- This version written on 25-October-1982.*     Modified on 14-October-1993 to inline the call to DLASSQ.*     Sven Hammarling, Nag Ltd.***     .. Parameters ..      Real(l_)      ONE         , ZERO      PARAMETER           ( ONE = 1.0_l_, ZERO = 0.0_l_ )*     .. Local Scalars ..      INTEGER               IX      Real(l_)      ABSXI, NORM, SCALE, SSQ, norm2*     .. Intrinsic Functions ..      INTRINSIC             ABS, SQRT*     ..*     .. Executable Statements ..      IF( N.LT.1 .OR. INCX.LT.1 )THEN         NORM  = ZERO      ELSE IF( N.EQ.1 )THEN         NORM  = ABS( X( 1 ) )      ELSE         SCALE = ZERO         SSQ   = ONE*        The following loop is equivalent to this call to the LAPACK*        auxiliary routine:*        CALL DLASSQ( N, X, INCX, SCALE, SSQ )*         DO 10, IX = 1, 1 + ( N - 1 )*INCX, INCX            IF( X( IX ).NE.ZERO )THEN               ABSXI = ABS( X( IX ) )               IF( SCALE.LT.ABSXI )THEN                  SSQ   = ONE   + SSQ*( SCALE/ABSXI )**2                  SCALE = ABSXI               ELSE                  SSQ   = SSQ   +     ( ABSXI/SCALE )**2               END IF            END IF   10    CONTINUE         NORM  = SCALE * SQRT( SSQ )      END IF*      norm2 = NORM      RETURN**     End of norm2.*      END

⌨️ 快捷键说明

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