=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/nd.c,v retrieving revision 1.150 retrieving revision 1.156 diff -u -p -r1.150 -r1.156 --- OpenXM_contrib2/asir2000/engine/nd.c 2006/12/12 11:50:37 1.150 +++ OpenXM_contrib2/asir2000/engine/nd.c 2008/05/23 01:24:21 1.156 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.149 2006/12/04 01:40:51 noro Exp $ */ +/* $OpenXM$ */ #include "nd.h" @@ -50,6 +50,7 @@ static int nd_demand; NumberField get_numberfield(); UINT *nd_det_compute_bound(NDV **dm,int n,int j); void nd_det_reconstruct(NDV **dm,int n,int j,NDV d); +void nd_heu_nezgcdnpz(VL vl,P *pl,int m,int full,P *pr); int nd_monic(int m,ND *p); NDV plain_vect_to_ndv_q(Q *mat,int col,UINT *s0vect); @@ -212,7 +213,7 @@ void ndl_homogenize(UINT *d,UINT *r,int obpe,EPOS oepo { int w,i,e,n,omask0; - omask0 = (1< nd_mask0 ) break; + if ( k < nd_nvar ) nd_det_reconstruct(dm,n,j,d); for ( i = j+1, mj = dm[j], mjj = mj[j]; i < n; i++ ) { @@ -5935,24 +5938,23 @@ void nd_det_reconstruct(NDV **dm,int n,int j,NDV d) #endif } +/* returns a UINT array containing degree bounds */ + UINT *nd_det_compute_bound(NDV **dm,int n,int j) { UINT *d0,*d1,*d,*t,*r; - int k,l; + int k,l,i; - d0 = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - d1 = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - for ( k = 0; k < nd_wpd; k++ ) d0[k] = 0; + d0 = (UINT *)MALLOC(nd_nvar*sizeof(UINT)); + for ( k = 0; k < nd_nvar; k++ ) d0[k] = 0; for ( k = j; k < n; k++ ) for ( l = j; l < n; l++ ) if ( dm[k][l] ) { d = ndv_compute_bound(dm[k][l]); - ndl_lcm(d,d0,d1); - t = d1; d1 = d0; d0 = t; + for ( i = 0; i < nd_nvar; i++ ) + d0[i] = MAX(d0[i],d[i]); } - r = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - for ( k = 0; k < nd_wpd; k++ ) r[k] = d0[k]; - return r; + return d0; } DL nd_separate_d(UINT *d,UINT *trans)