nrm2_ssq1_x1.c

来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 47 行

C
47
字号
#include "atlas_misc.h"#include <math.h>static void SSQ(const int N, const TYPE *X, const int incX,                TYPE *scal0, TYPE *ssq0){   TYPE t0, ax, ssq=(*ssq0), scal=(*scal0);   int i;   if (scal == ATL_rzero) /* need to start ops */   {      for (i=0; i < N && X[i] == ATL_rzero; i++);      if (i < N)      {         scal = fabs(X[i]);         ssq = ATL_rone;         i++;      }      else return;   }   else i = 0;   for (; i < N; i++)   {      ax = fabs(X[i]);      if (scal >= ax)      {         t0 = ax / scal;         ssq += t0*t0;      }      else      {         t0 = scal / ax;         t0 *= t0;         ssq = ATL_rone + ssq * t0;         scal = ax;      }   }   *ssq0 = ssq;   *scal0 = scal;}TYPE ATL_UNRM2(const int N, const TYPE *X, const int incX){   TYPE ssq=ATL_rone, scal=ATL_rzero;   if (N > 1) SSQ(N, X, incX, &scal, &ssq);   else if (N == 1) return(fabs(*X));   return(scal * sqrt(ssq));}

⌨️ 快捷键说明

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