dnrm2.c

来自「留一模型选择法leave-one-out model selection」· C语言 代码 · 共 63 行

C
63
字号
#include <math.h>  /* Needed for fabs() and sqrt() */#include "blas.h"double dnrm2_(long *n, double *x, long *incx){  long ix, nn, iincx;  double norm, scale, absxi, ssq, temp;/*  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 SLASSQ.          Sven Hammarling, Nag Ltd.   */  /* Dereference inputs */  nn = *n;  iincx = *incx;  if( nn > 0 && iincx > 0 )  {    if (nn == 1)    {      norm = fabs(x[0]);    }      else    {      scale = 0.0;      ssq = 1.0;      /* The following loop is equivalent to this call to the LAPACK          auxiliary routine:   CALL SLASSQ( N, X, INCX, SCALE, SSQ ) */      for (ix=(nn-1)*iincx; ix>=0; ix-=iincx)      {        if (x[ix] != 0.0)        {          absxi = fabs(x[ix]);          if (scale < absxi)          {            temp = scale / absxi;            ssq = ssq * (temp * temp) + 1.0;            scale = absxi;          }          else          {            temp = absxi / scale;            ssq += temp * temp;          }        }      }      norm = scale * sqrt(ssq);    }  }  else    norm = 0.0;  return norm;} /* dnrm2_ */

⌨️ 快捷键说明

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