[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