| Jeroen Demeyer on Thu, 22 Jul 2010 23:35:50 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [PATCH] for gequal1 and gequalm1 |
Hello pari-dev, This patch has been sitting for a long time in my pari directory (and has been used by me for a long time). It "fixes" gequal1 and gequalm1 in the sense that these functions should become more consistent with gequal. I realize this patch might not cover all possible cases, but it surely goes in the right direction. Cheers, Jeroen.
Index: src/basemath/gen2.c
===================================================================
--- src/basemath/gen2.c (revision 12530)
+++ src/basemath/gen2.c (working copy)
@@ -406,6 +406,8 @@
int
gequal1(GEN x)
{
+ long i;
+
switch(typ(x))
{
case t_INT:
@@ -432,8 +434,15 @@
case t_QUAD:
return gequal1(gel(x,2)) && gequal0(gel(x,3));
+ case t_SER:
+ if (valp(x) != 0) return 0;
case t_POL:
- return lg(x)==3 && gequal1(gel(x,2));
+ if (lg(x) < 3 || !gequal1(gel(x,2))) return 0;
+ for (i = 3; i < lg(x); i++) if (!gequal0(gel(x,i))) return 0;
+ return 1;
+
+ case t_RFRAC:
+ return gequal(gel(x,1), gel(x,2));
}
return 0;
}
@@ -443,7 +452,7 @@
gequalm1(GEN x)
{
pari_sp av;
- long y;
+ long i, y;
GEN p1;
switch(typ(x))
@@ -476,8 +485,15 @@
av=avma; p1 = gaddgs(gel(x,2), 1);
y = signe(p1) && !gequal(p1,gel(x,1)); avma=av; return !y;
+ case t_SER:
+ if (valp(x) != 0) return 0;
case t_POL:
- return lg(x)==3 && gequalm1(gel(x,2));
+ if (lg(x) < 3 || !gequalm1(gel(x,2))) return 0;
+ for (i = 3; i < lg(x); i++) if (!gequal0(gel(x,i))) return 0;
+ return 1;
+
+ case t_RFRAC:
+ av = avma; y = gequal(gel(x,1), gneg(gel(x,2))); avma = av; return y;
}
return 0;
}