1 /* atovm.c CCMATH mathematics library source code.
2 *
3 * Copyright (C) 2000 Daniel A. Atkinson All rights reserved.
4 * This code may be redistributed under the terms of the GNU library
5 * public license (LGPL). ( See the lgpl.license file for details.)
6 * ------------------------------------------------------------------------
7 */
atovm(double * v,int n)8 void atovm(double *v,int n)
9 { double *p0,*q0,*p,*q,*qq;
10 double h,s;
11 int i,j,k,mm;
12 q0=v+n*n-1; *q0=1.; q0-=n+1;
13 p0=v+n*n-n-n-1;
14 for(i=n-2,mm=1; i>=0 ;--i,p0-=n+1,q0-=n+1,++mm){
15 if(i && *(p0-1)!=0.){
16 for(j=0,p=p0,h=1.; j<mm ;++j,++p) h+= *p* *p;
17 h= *(p0-1); *q0=1.-h;
18 for(j=0,q=q0+n,p=p0; j<mm ;++j,q+=n) *q= -h* *p++;
19 for(k=i+1,q=q0+1; k<n ;++k){
20 for(j=0,qq=q+n,p=p0,s=0.; j<mm ;++j,qq+=n) s+= *qq* *p++;
21 s*=h;
22 for(j=0,qq=q+n,p=p0; j<mm ;++j,qq+=n) *qq-=s* *p++;
23 *q++ = -s;
24 }
25 }
26 else{
27 *q0=1.;
28 for(j=0,p=q0+1,q=q0+n; j<mm ;++j,q+=n) *q= *p++ =0.;
29 }
30 }
31 }
32