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

Diff for /OpenXM_contrib2/asir2018/engine/lmi.c between version 1.1 and 1.2

version 1.1, 2018/09/19 05:45:07 version 1.2, 2019/03/03 05:21:17
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM$   * $OpenXM: OpenXM_contrib2/asir2018/engine/lmi.c,v 1.1 2018/09/19 05:45:07 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 85  void simplm(LM n,LM *r)
Line 85  void simplm(LM n,LM *r)
 {  {
   mpz_t rem;    mpz_t rem;
   
   if ( !n || NID(n) != N_LM || !lm_lazy )    if ( !n || NID(n) != N_LM || lm_lazy )
     *r = n;      *r = n;
   else {    else {
     mpz_init(rem);      mpz_init(rem);
     mpz_mod(rem,BDY(n),BDY(current_mod_lm));      mpz_mod(rem,BDY(n),BDY(current_mod_lm));
     MKLM(rem,*r);      if ( mpz_sgn(rem) )
         MKLM(rem,*r);
       else
         *r = 0;
   }    }
 }  }
   
Line 103  void simplm_force(LM n,LM *r)
Line 106  void simplm_force(LM n,LM *r)
   else {    else {
     mpz_init(rem);      mpz_init(rem);
     mpz_mod(rem,BDY(n),BDY(current_mod_lm));      mpz_mod(rem,BDY(n),BDY(current_mod_lm));
     MKLM(rem,*r);      if ( mpz_sgn(rem) )
         MKLM(rem,*r);
       else
         *r = 0;
   }    }
 }  }
   
 void qtolm(Q q,LM *l)  void qtolm(Q q,LM *l)
 {  {
   LM nm,nm1,dn,dn1;    LM nm0,nm,nm1,dn,dn1;
     mpz_t t;
   
   if ( !q || (OID(q)==O_N && ((NID(q) == N_LM) || (NID(q) == N_GFPN))) ) { /* XXX */    if ( !q || (OID(q)==O_N && ((NID(q) == N_LM) || (NID(q) == N_GFPN))) ) { /* XXX */
     *l = (LM)q;      *l = (LM)q;
   } else if ( OID(q) == O_N && NID(q) == N_Q ) {    } else if ( OID(q) == O_N && NID(q) == N_Q ) {
     if ( q->z ) {      if ( q->z ) {
       MKLM(BDY((Z)q),nm);        if ( mpz_sgn(BDY((Z)q)) > 0 ) {
       simplm(nm,l);          MKLM(BDY((Z)q),nm);
           simplm(nm,l);
         } else {
           mpz_init(t); mpz_neg(t,BDY((Z)q));
           MKLM(t,nm); simplm(nm,&nm1); chsgnlm(nm1,l);
         }
     } else {      } else {
       MKLM(mpq_numref(BDY(q)),nm);        if ( mpq_sgn(BDY(q)) > 0 ) {
       simplm_force(nm,&nm1);          MKLM(mpq_numref(BDY(q)),nm);
           simplm_force(nm,&nm1);
         } else {
           mpz_init(t); mpz_neg(t,mpq_numref(BDY(q)));
           MKLM(t,nm0); simplm(nm0,&nm); chsgnlm(nm,&nm1);
         }
       MKLM(mpq_denref(BDY(q)),dn);        MKLM(mpq_denref(BDY(q)),dn);
       simplm_force(nm,&dn1);        simplm_force(dn,&dn1);
       divlm(nm1,dn1,l);        divlm(nm1,dn1,l);
     }      }
   } else    } else
Line 150  void sublm(LM a,LM b,LM *c)
Line 167  void sublm(LM a,LM b,LM *c)
 {  {
   mpz_t t;    mpz_t t;
   LM s,z;    LM s,z;
     int sgn;
   
   qtolm((Q)a,&z); a = z; qtolm((Q)b,&z); b = z;    qtolm((Q)a,&z); a = z; qtolm((Q)b,&z); b = z;
   if ( !b )    if ( !b )
Line 157  void sublm(LM a,LM b,LM *c)
Line 175  void sublm(LM a,LM b,LM *c)
   else if ( !a )    else if ( !a )
     chsgnlm(b,c);      chsgnlm(b,c);
   else {    else {
     mpz_init(t); mpz_sub(t,BDY(a),BDY(b));      sgn = mpz_cmp(BDY(a),BDY(b));
     MKLM(t,s); simplm(s,c);      if ( sgn > 0 ) {
         mpz_init(t); mpz_sub(t,BDY(a),BDY(b));
         MKLM(t,*c);
       } else if ( sgn < 0 ) {
         mpz_init(t); mpz_sub(t,BDY(b),BDY(a));
         MKLM(t,s); chsgnlm(s,c);
       } else
         *c = 0;
   }    }
 }  }
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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