version 1.1, 2018/09/19 05:45:07 |
version 1.2, 2019/03/03 05:21:17 |
|
|
* 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; |
} |
} |
} |
} |
|
|