diff options
Diffstat (limited to 'sci-mathematics/pari/files/pari-2.7.0-slow-discriminant.patch')
-rw-r--r-- | sci-mathematics/pari/files/pari-2.7.0-slow-discriminant.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/sci-mathematics/pari/files/pari-2.7.0-slow-discriminant.patch b/sci-mathematics/pari/files/pari-2.7.0-slow-discriminant.patch new file mode 100644 index 000000000000..814dc4b2ab9d --- /dev/null +++ b/sci-mathematics/pari/files/pari-2.7.0-slow-discriminant.patch @@ -0,0 +1,54 @@ +diff -ru src/src/basemath/alglin1.c b/src/basemath/alglin1.c +--- src/src/basemath/alglin1.c 2014-01-29 18:00:27.000000000 +0100 ++++ b/src/basemath/alglin1.c 2014-02-09 01:54:37.676725196 +0100 +@@ -247,6 +247,7 @@ + a = RgM_shallowcopy(a); + for (i=1; i<nbco; i++) + { ++ int garbage = 0; /* Only gerepile() once per loop iteration */ + for(k=i; k<=nbco; k++) + { + gcoeff(a,k,i) = ff->red(E,gcoeff(a,k,i)); +@@ -271,7 +272,7 @@ + for (j=i+1; j<=nbco; j++) + { + gcoeff(a,j,k) = ff->add(E, gcoeff(a,j,k), ff->mul(E,m,gcoeff(a,j,i))); +- if (low_stack(lim, stack_lim(av,1))) ++ if (low_stack(lim, stack_lim(av,1)) && (garbage++ == 0)) + { + if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i); + gerepileall(av,4, &a,&x,&q,&m); +@@ -3721,6 +3722,7 @@ + a = RgM_shallowcopy(a); + for (i=1; i<nbco; i++) + { ++ int garbage = 0; /* Only gerepile() once per loop iteration */ + k = pivot(a, data, i, NULL); + if (k > nbco) return gerepilecopy(av, gcoeff(a,i,i)); + if (k != i) +@@ -3740,7 +3742,7 @@ + for (j=i+1; j<=nbco; j++) + { + gcoeff(a,j,k) = gsub(gcoeff(a,j,k), gmul(m,gcoeff(a,j,i))); +- if (low_stack(lim, stack_lim(av,3))) ++ if (low_stack(lim, stack_lim(av,3)) && (garbage++ == 0)) + { + if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i); + gerepileall(av,2, &a,&x); +@@ -3791,6 +3793,7 @@ + { + GEN ci, ck, m; + int diveuc = (gequal1(pprec)==0); ++ int garbage = 0; /* Only gerepile() once per loop iteration */ + + p = gcoeff(a,i,i); + if (gequal0(p)) +@@ -3827,7 +3830,7 @@ + GEN p1 = gsub(gmul(p,gel(ck,j)), gmul(m,gel(ci,j))); + if (diveuc) p1 = mydiv(p1,pprec); + gel(ck,j) = gerepileupto(av2, p1); +- if (low_stack(lim,stack_lim(av,2))) ++ if (low_stack(lim,stack_lim(av,2)) && (garbage++ == 0)) + { + if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i); + gerepileall(av,2, &a,&pprec); |