FACT++  1.0
void palDmat ( int  n,
double *  a,
double *  y,
double *  d,
int *  jf,
int *  iw 
)

Definition at line 91 of file palDmat.c.

References i, and t.

Referenced by t_dmat().

91  {
92 
93  const double SFA = 1e-20;
94 
95  int k;
96  double*aoff;
97 
98  *jf=0;
99  *d=1.0;
100  for(k=0,aoff=a; k<n; k++, aoff+=n){
101  int imx;
102  double * aoff2 = aoff;
103  double amx=fabs(aoff[k]);
104  imx=k;
105  if(k!=n){
106  int i;
107  double *apos2;
108  for(i=k+1,apos2=aoff+n;i<n;i++,apos2+=n){
109  double t=fabs(apos2[k]);
110  if(t>amx){
111  amx=t;
112  imx=i;
113  aoff2=apos2;
114  }
115  }
116  }
117  if(amx<SFA){
118  *jf=-1;
119  } else {
120  if(imx!=k){
121  double t;
122  int j;
123  for(j=0;j<n;j++){
124  t=aoff[j];
125  aoff[j]=aoff2[j];
126  aoff2[j]=t;
127  }
128  t=y[k];
129  y[k]=y[imx];
130  y[imx]=t;*d=-*d;
131  }
132  iw[k]=imx;
133  *d*=aoff[k];
134  if(fabs(*d)<SFA){
135  *jf=-1;
136  } else {
137  double yk;
138  double * apos2;
139  int i, j;
140  aoff[k]=1.0/aoff[k];
141  for(j=0;j<n;j++){
142  if(j!=k){
143  aoff[j]*=aoff[k];
144  }
145  }
146  yk=y[k]*aoff[k];
147  y[k]=yk;
148  for(i=0,apos2=a;i<n;i++,apos2+=n){
149  if(i!=k){
150  for(j=0;j<n;j++){
151  if(j!=k){
152  apos2[j]-=apos2[k]*aoff[j];
153  }
154  }
155  y[i]-=apos2[k]*yk;
156  }
157  }
158  for(i=0,apos2=a;i<n;i++,apos2+=n){
159  if(i!=k){
160  apos2[k]*=-aoff[k];
161  }
162  }
163  }
164  }
165  }
166  if(*jf!=0){
167  *d=0.0;
168  } else {
169  for(k=n;k-->0;){
170  int ki=iw[k];
171  if(k!=ki){
172  int i;
173  double *apos = a;
174  for(i=0;i<n;i++,apos+=n){
175  double t=apos[k];
176  apos[k]=apos[ki];
177  apos[ki]=t;
178  }
179  }
180  }
181  }
182 }
int i
Definition: db_dim_client.c:21
TT t
Definition: test_client.c:26

+ Here is the caller graph for this function: