version 1.19, 2020/10/06 06:31:19 |
version 1.22, 2022/04/03 01:30:27 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2018/engine/Q.c,v 1.18 2020/10/04 03:14:09 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2018/engine/Q.c,v 1.21 2021/10/08 07:27:05 noro Exp $ */ |
#include "ca.h" |
#include "ca.h" |
|
#include "parse.h" |
#include "gmp.h" |
#include "gmp.h" |
#include "base.h" |
#include "base.h" |
#include "inline.h" |
#include "inline.h" |
Line 97 void dnq(Q q,Z *r) |
|
Line 98 void dnq(Q q,Z *r) |
|
int sgnq(Q q) |
int sgnq(Q q) |
{ |
{ |
if ( !q ) return 0; |
if ( !q ) return 0; |
else if ( q->z ) return mpz_sgn(BDY((Z)q)); |
else if ( q->z ) { |
else return mpz_sgn(mpq_numref(BDY(q))); |
int sgn; |
|
sgn = mpz_sgn(BDY((Z)q)); |
|
return sgn; |
|
} else return mpz_sgn(mpq_numref(BDY(q))); |
} |
} |
|
|
Q mpqtozq(mpq_t a) |
Q mpqtozq(mpq_t a) |
Line 671 void pwrq(Q n1,Q n,Q *nr) |
|
Line 675 void pwrq(Q n1,Q n,Q *nr) |
|
nm[0] = mpq_denref(BDY(n1))[0]; |
nm[0] = mpq_denref(BDY(n1))[0]; |
dn[0] = mpq_numref(BDY(n1))[0]; |
dn[0] = mpq_numref(BDY(n1))[0]; |
} |
} |
|
if ( mpz_sgn(dn)<0 ) { |
|
mpz_neg(nm,nm); |
|
mpz_neg(dn,dn); |
|
} |
} else { |
} else { |
if ( n1->z ) { |
if ( n1->z ) { |
nm[0] = BDY((Z)n1)[0]; |
nm[0] = BDY((Z)n1)[0]; |
Line 789 void lgp(P p,Z *g,Z *l) |
|
Line 797 void lgp(P p,Z *g,Z *l) |
|
|
|
if ( NUM(p) ) { |
if ( NUM(p) ) { |
if ( ((Q)p)->z ) { |
if ( ((Q)p)->z ) { |
MPZTOZ(BDY((Z)p),*g); |
absz((Z)p,g); |
*l = ONE; |
*l = ONE; |
} else { |
} else { |
MPZTOZ(mpq_numref(BDY((Q)p)),*g); |
MPZTOZ(mpq_numref(BDY((Q)p)),g1); absz(g1,g); |
MPZTOZ(mpq_denref(BDY((Q)p)),*l); |
MPZTOZ(mpq_denref(BDY((Q)p)),*l); |
} |
} |
} else { |
} else { |