📄 slarfg.c
字号:
#include <math.h>#include <types/simple.h>#include "gmx_blas.h"#include "gmx_lapack.h"#include "lapack_limits.h"voidF77_FUNC(slarfg,SLARFG)(int *n, float *alpha, float *x, int *incx, float *tau){ float xnorm,t; int ti1,knt,j; float minval,safmin,rsafmn,beta; if(*n<=1) { *tau = 0; return; } ti1 = *n-1; xnorm = F77_FUNC(snrm2,SNRM2)(&ti1,x,incx); if(fabs(xnorm)<GMX_FLOAT_MIN) { *tau = 0.0; } else { t = F77_FUNC(slapy2,SLAPY2)(alpha,&xnorm); if(*alpha<0) beta = t; else beta = -t; minval = GMX_FLOAT_MIN; safmin = minval*(1.0+GMX_FLOAT_EPS) / GMX_FLOAT_EPS; if(fabs(beta)<safmin) { knt = 0; rsafmn = 1.0 / safmin; while(fabs(beta)<safmin) { knt++; ti1 = *n-1; F77_FUNC(sscal,SSCAL)(&ti1,&rsafmn,x,incx); beta *= rsafmn; *alpha *= rsafmn; } /* safmin <= beta <= 1 now */ ti1 = *n-1; xnorm = F77_FUNC(snrm2,SNRM2)(&ti1,x,incx); t = F77_FUNC(slapy2,SLAPY2)(alpha,&xnorm); if(*alpha<0) beta = t; else beta = -t; *tau = (beta-*alpha)/beta; ti1= *n-1; t = 1.0/(*alpha-beta); F77_FUNC(sscal,SSCAL)(&ti1,&t,x,incx); *alpha = beta; for(j=0;j<knt;j++) *alpha *= safmin; } else { *tau = (beta-*alpha)/beta; ti1= *n-1; t = 1.0/(*alpha-beta); F77_FUNC(sscal,SSCAL)(&ti1,&t,x,incx); *alpha = beta; } } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -