From 46190b541c251588d5fefbfd52a45f4db8b9c0af Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 10 Oct 2008 16:42:30 +0200 Subject: [PATCH] evalue.c: affine2evalue: reduce coefficients --- evalue.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/evalue.c b/evalue.c index 4ac9fb1..be83fa1 100644 --- a/evalue.c +++ b/evalue.c @@ -43,6 +43,13 @@ void evalue_set(evalue *ev, Value n, Value d) { value_assign(ev->x.n, n); } +void evalue_set_reduce(evalue *ev, Value n, Value d) { + value_init(ev->x.n); + value_gcd(ev->x.n, n, d); + value_divexact(ev->d, d, ev->x.n); + value_divexact(ev->x.n, n, ev->x.n); +} + evalue* evalue_zero() { evalue *EP = ALLOC(evalue); @@ -4164,9 +4171,7 @@ static evalue *term(int param, Value c, Value den) value_set_si(EP->d,0); EP->x.p = new_enode(polynomial, 2, param + 1); evalue_set_si(&EP->x.p->arr[0], 0, 1); - value_init(EP->x.p->arr[1].x.n); - value_assign(EP->x.p->arr[1].d, den); - value_assign(EP->x.p->arr[1].x.n, c); + evalue_set_reduce(&EP->x.p->arr[1], c, den); return EP; } @@ -4175,7 +4180,7 @@ evalue *affine2evalue(Value *coeff, Value denom, int nvar) int i; evalue *E = ALLOC(evalue); value_init(E->d); - evalue_set(E, coeff[nvar], denom); + evalue_set_reduce(E, coeff[nvar], denom); for (i = 0; i < nvar; ++i) { evalue *t; if (value_zero_p(coeff[i])) -- 2.11.4.GIT