[BACK]Return to nd.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/nd.c between version 1.125 and 1.126

version 1.125, 2005/02/09 08:32:32 version 1.126, 2005/02/09 14:30:47
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.124 2005/02/09 07:58:43 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.125 2005/02/09 08:32:32 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 5098  void nd_det(int mod,MAT f,P *rp)
Line 5098  void nd_det(int mod,MAT f,P *rp)
         pointer **m;          pointer **m;
         Q mone;          Q mone;
         P **w;          P **w;
         P mp;          P mp,r;
         NDV **dm;          NDV **dm;
         NDV *t,*mi,*mj;          NDV *t,*mi,*mj;
         NDV d,s,mij,mjj;          NDV d,s,mij,mjj;
Line 5107  void nd_det(int mod,MAT f,P *rp)
Line 5107  void nd_det(int mod,MAT f,P *rp)
         UINT *bound;          UINT *bound;
         PGeoBucket bucket;          PGeoBucket bucket;
         struct order_spec *ord;          struct order_spec *ord;
           Q dq,dt,ds;
           N gn,qn,dn0,nm,dn;
   
         create_order_spec(0,0,&ord);          create_order_spec(0,0,&ord);
         nd_init_ord(ord);          nd_init_ord(ord);
Line 5130  void nd_det(int mod,MAT f,P *rp)
Line 5132  void nd_det(int mod,MAT f,P *rp)
                 }                  }
                 return;                  return;
         }          }
   
           if ( !mod ) {
                   w = (P **)almat_pointer(n,n);
                   dq = ONE;
                   for ( i = 0; i < n; i++ ) {
                           dn0 = ONEN;
                           for ( j = 0; j < n; j++ ) {
                                   if ( !m[i][j] ) continue;
                                   lgp(m[i][j],&nm,&dn);
                                   gcdn(dn0,dn,&gn); divsn(dn0,gn,&qn); muln(qn,dn,&dn0);
                           }
                           if ( !UNIN(dn0) ) {
                                   NTOQ(dn0,1,ds);
                                   for ( j = 0; j < n; j++ )
                                           mulp(CO,(P)m[i][j],(P)ds,&w[i][j]);
                                   mulq(dq,ds,&dt); dq = dt;
                           } else
                                   for ( j = 0; j < n; j++ )
                                           w[i][j] = (P)m[i][j];
                   }
                   m = (pointer **)w;
           }
   
         for ( i = 0, max = 0; i < n; i++ )          for ( i = 0, max = 0; i < n; i++ )
                 for ( j = 0; j < n; j++ )                  for ( j = 0; j < n; j++ )
Line 5212  void nd_det(int mod,MAT f,P *rp)
Line 5236  void nd_det(int mod,MAT f,P *rp)
                         ndv_mul_c(mod,d,mod-1);                          ndv_mul_c(mod,d,mod-1);
                 else                  else
                         ndv_mul_c_q(d,mone);                          ndv_mul_c_q(d,mone);
         *rp = ndvtop(mod,CO,fv,d);          r = ndvtop(mod,CO,fv,d);
           if ( !mod && !UNIQ(dq) )
                   divsp(CO,r,(P)dq,rp);
           else
                   *rp = r;
 }  }
   
 ND ndv_mul_nmv_trunc(int mod,NMV m0,NDV p,UINT *d)  ND ndv_mul_nmv_trunc(int mod,NMV m0,NDV p,UINT *d)

Legend:
Removed from v.1.125  
changed lines
  Added in v.1.126

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>