[SCM] an open source computer algebra system branch, cleanedupstream, updated. 6125e540ca6d66c307958938a9d53b245507c323

Bernhard R. Link brlink at debian.org
Tue Apr 24 15:53:04 UTC 2012


The following commit has been merged in the cleanedupstream branch:
commit e3e198ad2ee7de55860e8aec4d8dbf72f37669ac
Author: Hans Schoenemann <hannes at mathematik.uni-kl.de>
Date:   Fri Feb 10 18:21:44 2012 +0100

    fix: chimrem and farey for longalg (tr.397)

diff --git a/kernel/longalg.cc b/kernel/longalg.cc
index 730d8a1..7b69f84 100644
--- a/kernel/longalg.cc
+++ b/kernel/longalg.cc
@@ -2698,3 +2698,44 @@ number   napGetNumerator(number &n, const ring r)
   rr->s = 2;
   return (number)rr;
 }
+
+poly p_ChineseRemainder(poly *xx, number *x,number *q, int rl, const ring R);
+number naChineseRemainder(number *x, number *q,int rl, const ring r)
+{
+  poly *xx=(poly*)omAlloc0(rl*sizeof(poly));
+  number *qq=(number*)omAlloc0(rl*sizeof(number));
+  number *temp=(number*)omAlloc0(rl*sizeof(number));
+  lnumber t;
+  for(int i=rl-1;i>=0;i--)
+  {
+    if(x[i]!=NULL)
+    {
+      t=(lnumber)x[i];
+      xx[i]=t->z;
+    }
+    t=(lnumber)q[i];
+    qq[i]=pGetCoeff(t->z);
+  }
+  poly rr=p_ChineseRemainder(xx,temp,qq,rl,r->algring);
+  t=ALLOC0_LNUMBER();
+  t->z=rr;
+  t->s=2;
+  return (number)t;
+}
+
+poly p_Farey(poly p, number N, const ring r);
+number naFarey(number nN, number nP, const ring r)
+{
+  lnumber N = (lnumber)nN;
+  /* nP is a BIGINT_CMD */
+  if (N->n!=NULL)
+  {
+    WerrorS("rational function not allowed in naFarey");
+    return NULL;
+  }
+  if (N==NULL) return NULL;
+  lnumber rr=ALLOC0_LNUMBER();
+  rr->z=p_Farey(N->z,nP,r->algring);
+  rr->s = 2;
+  return (number)rr;
+}
diff --git a/kernel/longalg.h b/kernel/longalg.h
index 8d4a08f..34301dd 100644
--- a/kernel/longalg.h
+++ b/kernel/longalg.h
@@ -89,5 +89,8 @@ number   naGetNumerator(number &n, const ring r);
 number  napGetDenom(number &n, const ring r);
 number  napGetNumerator(number &n, const ring r);
 poly    napPermNumber(number z, int * par_perm, int P, ring r);
+
+number naFarey(number nN, number nP, const ring);
+number naChineseRemainder(number *x, number *q,int rl, const ring);
 #endif
 
diff --git a/kernel/numbers.cc b/kernel/numbers.cc
index 4e0dc0d..c80feeb 100644
--- a/kernel/numbers.cc
+++ b/kernel/numbers.cc
@@ -359,6 +359,11 @@ void nInitChar(ring r)
     n->nSize          = naSize;
     n->cfGetDenom     = napGetDenom;
     n->cfGetNumerator = napGetNumerator;
+    if (r->algring->cf->cfChineseRemainder!=ndChineseRemainder)
+    {
+      n->cfChineseRemainder=naChineseRemainder;
+      n->cfFarey=naFarey;
+    }
 #ifdef LDEBUG
     n->nDBTest        = naDBTest;
 #endif

-- 
an open source computer algebra system



More information about the debian-science-commits mailing list