Karim Belabas on Fri, 16 Aug 2013 10:15:28 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: a^2/a^2 not simplified


* Henri.Cohen@math.u-bordeaux1.fr [2013-08-16 09:37]:
> At \p 19 (for instance), if I write
> 
> res=((5.421010862427522171 E-20 + 0.E-19*I)*a^4 + (5.000000000000000000 + 0.E\
> -18*I)*a^2 + (5.421010862427522171 E-20 + 0.E-19*I))/a^2
> 
> and then round(res) I obtain
> 
> %107 = 5*a^2/a^2
> 
> I can understand why, but still this is not very nice. Two questions:
> 1) Is this a bug or a feature?

It's a bug: %107 is an invalid object. The patch below (committed to master)
fixes the problem.

> 2) How can I "simplify" %107, the simplify command does not work.

numerator(%) / denominator(%) would work.

Cheers,

    K.B.

diff --git a/src/basemath/gen3.c b/src/basemath/gen3.c
index f079615..e326012 100644
--- a/src/basemath/gen3.c
+++ b/src/basemath/gen3.c
@@ -2109,9 +2109,8 @@ ground(GEN x)
       for (i=2; i<lx; i++) gel(y,i) = ground(gel(x,i));
       return normalize(y);
     case t_RFRAC:
-      y = cgetg(3, t_RFRAC);
-      gel(y,1) = ground(gel(x,1));
-      gel(y,2) = ground(gel(x,2)); return y;
+      av = avma;
+      return gerepileupto(av, gdiv(ground(gel(x,1)), ground(gel(x,2))));
     case t_VEC: case t_COL: case t_MAT:
       y = cgetg_copy(x, &lx);
       for (i=1; i<lx; i++) gel(y,i) = ground(gel(x,i));

--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`