slarfg.c
来自「最著名最快的分子模拟软件」· C语言 代码 · 共 88 行
C
88 行
#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 + =
减小字号Ctrl + -
显示快捷键?