Changeset f5850b in git
- Timestamp:
- Jun 1, 2018, 7:50:16 PM (6 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
- Children:
- dc0f002e8452e73b123103f906e73147f38b811c
- Parents:
- 5f13434321a632b9a349403b82d21f853ed48c26
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/GBEngine/kInline.h
r5f13434 rf5850b 594 594 } 595 595 596 KINLINE void sLObject::Tail_Minus_mm1_Mult_qq_Mult_mm2(poly m1, poly q, poly m2, int lq, poly spNoether) 597 { 598 if (bucket != NULL) 599 { 600 kBucket_Minus_m1_Mult_p_Mult_m2(bucket, m1, q, m2, &lq, NULL); // check if we need noether 601 } 602 else 603 { 604 if (lq<=0) lq= ::pLength(q); 605 poly _p = (t_p != NULL ? t_p : p); 606 assume(_p != NULL); 607 608 int lp=pLength-1; 609 pNext(_p) = p_Minus_mm_Mult_qq( pNext(_p), m1, p_Mult_mm(q, m2, tailRing), lp, lq, 610 spNoether, tailRing ); 611 pLength=lp+1; 612 return; 613 } 614 } 615 596 616 KINLINE void sLObject::LmDeleteAndIter() 597 617 { -
kernel/GBEngine/kspoly.cc
r5f13434 rf5850b 123 123 } 124 124 125 int holeStart = tailRing->isLPring * p_mFirstVblock(p2, tailRing->isLPring, tailRing); 126 // n1 and n2 is already set to 1 127 poly n1 = p_GetExp_k_n(lm, holeStart, tailRing->N, tailRing); 128 poly n2 = p_GetExp_k_n(lm, 1, holeStart, tailRing); 129 125 130 // take care of coef buisness 126 131 if (! n_IsOne(pGetCoeff(p2), tailRing->cf)) … … 130 135 int ct = ksCheckCoeff(&an, &bn, tailRing->cf); // Calculate special LC 131 136 p_SetCoeff(lm, bn, tailRing); 137 p_SetCoeff(n1, bn, tailRing); 132 138 if ((ct == 0) || (ct == 2)) 133 139 PR->Tail_Mult_nn(an); … … 137 143 else 138 144 { 145 p_SetCoeff(n1, pGetCoeff(lm), tailRing); 139 146 if (coef != NULL) *coef = n_Init(1, tailRing->cf); 140 147 } 141 148 142 143 149 // and finally, 144 PR->Tail_Minus_mm_Mult_qq(lm, t2, pLength(t2) /*PW->GetpLength() - 1*/, spNoether); 150 if (tailRing->isLPring) { 151 PR->Tail_Minus_mm1_Mult_qq_Mult_mm2(n1, t2, n2, pLength(t2), spNoether); 152 } else { 153 PR->Tail_Minus_mm_Mult_qq(lm, t2, pLength(t2) /*PW->GetpLength() - 1*/, spNoether); 154 } 145 155 assume(PW->GetpLength() == pLength(PW->p != NULL ? PW->p : PW->t_p)); 146 156 PR->LmDeleteAndIter(); -
kernel/GBEngine/kstd2.cc
r5f13434 rf5850b 3962 3962 if ( ! strat->homog) 3963 3963 { 3964 strat->P.GetP(strat->lmBin); // because shifts are counted with .p structure 3964 if (!strat->P.IsNull()) { 3965 strat->P.GetP(strat->lmBin); // because shifts are counted with .p structure 3966 } 3965 3967 /* in the nonhomog case we have to shrink the polynomial */ 3966 3968 qq = p_Shrink(strat->P.p, lV, currRing); // direct shrink -
kernel/GBEngine/kutil.h
r5f13434 rf5850b 212 212 int use_bucket, ring r); 213 213 KINLINE void Tail_Minus_mm_Mult_qq(poly m, poly qq, int lq, poly spNoether); 214 KINLINE void Tail_Minus_mm1_Mult_qq_Mult_mm2(poly m1, poly qq, poly m2, int lq, poly spNoether); 214 215 KINLINE void Tail_Mult_nn(number n); 215 216 // deletes bucket, makes sure that p and t_p exists -
kernel/GBEngine/shiftgb.cc
r5f13434 rf5850b 78 78 79 79 /* assume sh and uptodeg agree TODO check */ 80 assume(sh>=0);81 80 82 81 if (sh == 0) return(p); /* the zero shift */ … … 99 98 /* p is a monomial from the ring r */ 100 99 101 if (sh == 0) return(p); /* the zero shift */ 102 103 assume(sh>=0); 100 if (sh == 0 || p == NULL) return(p); /* the zero shift */ 101 104 102 int L = p_mLastVblock(p,lV,r); 103 assume(L+sh>=1); 105 104 assume(L+sh<=uptodeg); 106 105 … … 118 117 { 119 118 assume(j + (sh*lV)<=r->N); 119 assume(j + (sh*lV)>=1); 120 120 s[j + (sh*lV)] = e[j]; /* actually 1 */ 121 121 } … … 175 175 /* for a monomial p, returns the number of the last block */ 176 176 /* where a nonzero exponent is sitting */ 177 if (p _LmIsConstant(p,r))177 if (p == NULL || p_LmIsConstant(p,r)) 178 178 { 179 179 return(0); … … 190 190 } 191 191 192 int p FirstVblock(poly p, int lV)192 int p_FirstVblock(poly p, int lV, const ring r) 193 193 { 194 194 /* returns the number of maximal block */ 195 195 /* appearing among the monomials of p */ 196 196 /* the 0th block is the 1st one */ 197 poly q = p; //p_Copy(p,currRing); /* need it ? */ 198 int ans = 0; 197 if (p == NULL) { 198 return 0; 199 } 200 poly q = p; 201 int ans = p_mFirstVblock(q,lV,r); 199 202 int ansnew = 0; 200 203 while (q!=NULL) 201 204 { 202 ansnew = pmFirstVblock(q,lV); 203 ans = si_min(ans,ansnew); 205 ansnew = p_mFirstVblock(q,lV,r); 206 if (ansnew > 0) { // don't count constants 207 ans = si_min(ans,ansnew); 208 } 204 209 pIter(q); 205 210 } … … 208 213 } 209 214 210 int p mFirstVblock(poly p, int lV)211 { 212 if (p IsConstantPoly(p))213 { 214 return( int(0));215 int p_mFirstVblock(poly p, int lV, const ring r) 216 { 217 if (p == NULL || p_LmIsConstant(p,r)) 218 { 219 return(0); 215 220 } 216 221 /* for a monomial p, returns the number of the first block */ 217 222 /* where a nonzero exponent is sitting */ 218 int *e=(int *)omAlloc0(( currRing->N+1)*sizeof(int));219 p_GetExpV(p,e, currRing);223 int *e=(int *)omAlloc0((r->N+1)*sizeof(int)); 224 p_GetExpV(p,e,r); 220 225 int j,b; 221 226 j = 1; 222 while ( (!e[j]) && (j<=currRing->N-1) ) j++; 223 if (j==currRing->N + 1) 224 { 225 #ifdef PDEBUG 226 PrintS("pmFirstVblock: unexpected zero exponent vector\n"); 227 #endif 228 return(j); 229 } 230 b = (int)(j/lV)+1; /* the number of the block, 1<= N <= currRing->N */ 227 while ( (!e[j]) && (j<=r->N-1) ) j++; 228 freeT(e, r->N); 229 assume(j <= r->N); 230 b = (int)(j+lV-1)/lV; /* the number of the block, 1<= b <= r->N */ 231 231 return (b); 232 232 } … … 396 396 /* r->N is a multiple of lV */ 397 397 398 if (p==NULL) return p; 398 399 int *e = (int *)omAlloc0((r->N+1)*sizeof(int)); 399 400 int b = (int)((r->N +lV-1)/lV); /* the number of blocks */ -
kernel/GBEngine/shiftgb.h
r5f13434 rf5850b 32 32 #define pmLastVblock(p,lV) p_mLastVblock(p,lV,currRing) 33 33 34 int pFirstVblock(poly p, int lV); 35 int pmFirstVblock(poly p, int lV); 34 int p_FirstVblock(poly p, int lV, const ring r); 35 int p_mFirstVblock(poly p, int lV, const ring r); 36 37 //int pLastVblock(poly p, int lV); 38 #define pFirstVblock(p,lV) p_FirstVblock(p,lV,currRing) 39 //int pmLastVblock(poly p, int lV); 40 #define pmFirstVblock(p,lV) p_mFirstVblock(p,lV,currRing) 36 41 37 42 int isInV(poly p, int lV); -
libpolys/polys/kbuckets.cc
r5f13434 rf5850b 798 798 ////////////////////////////////////////////////////////////////////////// 799 799 /// 800 /// Bpoly == Bpoly - m1*p*m2; where m1 and m2 are monoms 801 /// Does not destroy p, m1 and m2 802 /// assume (*l <= 0 || pLength(p) == *l) 803 void kBucket_Minus_m1_Mult_p_Mult_m2(kBucket_pt bucket, poly m1, poly p, poly m2, int *l, poly spNoether) 804 { 805 assume(*l <= 0 || pLength(p) == *l); 806 int i, l1; 807 poly p1 = p; 808 ring r = bucket->bucket_ring; 809 810 if (*l <= 0) 811 { 812 l1 = pLength(p1); 813 *l = l1; 814 } 815 else 816 l1 = *l; 817 818 if (m1 == NULL || m2 == NULL || p == NULL) return; 819 820 #ifndef HAVE_PSEUDO_BUCKETS 821 kBucketMergeLm(bucket); 822 kbTest(bucket); 823 i = pLogLength(l1); 824 825 #if defined(HAVE_PLURAL) 826 if ((rField_is_Ring(r) && !(rField_is_Domain(r))) 827 ||(rIsPluralRing(r))) 828 { 829 pSetCoeff0(m1, n_InpNeg(pGetCoeff(m1),r->cf)); 830 p1=pp_Mult_mm(r->p_Procs->pp_mm_Mult(p, m1, r),m2,r); 831 pSetCoeff0(m1, n_InpNeg(pGetCoeff(m1),r->cf)); 832 l1=pLength(p1); 833 i = pLogLength(l1); 834 } 835 else 836 #endif 837 { 838 if ((i <= bucket->buckets_used) && (bucket->buckets[i] != NULL)) 839 { 840 assume(pLength(bucket->buckets[i])==(unsigned)bucket->buckets_length[i]); 841 //#ifdef USE_COEF_BUCKETS 842 // if(bucket->coef[i]!=NULL) 843 // { 844 // poly mult=p_Mult_mm(bucket->coef[i],m,r); 845 // bucket->coef[i]=NULL; 846 // p1 = p_Minus_mm_Mult_qq(bucket->buckets[i], mult, p1, 847 // bucket->buckets_length[i], l1, 848 // spNoether, r); 849 // } 850 // else 851 //#endif 852 MULTIPLY_BUCKET(bucket,i); 853 p1 = p_Minus_mm_Mult_qq(bucket->buckets[i], m1, p_Mult_mm(p1, m2, r), 854 bucket->buckets_length[i], l1, 855 spNoether, r); 856 l1 = bucket->buckets_length[i]; 857 bucket->buckets[i] = NULL; 858 bucket->buckets_length[i] = 0; 859 i = pLogLength(l1); 860 } 861 else 862 { 863 pSetCoeff0(m1, n_InpNeg(pGetCoeff(m1),r->cf)); 864 if (spNoether != NULL) 865 { 866 l1 = -1; 867 p1 = r->p_Procs->pp_Mult_mm_Noether(r->p_Procs->pp_mm_Mult(p1, m1, r), m2, spNoether, l1, r); 868 i = pLogLength(l1); 869 } 870 else 871 { 872 p1 = r->p_Procs->pp_Mult_mm(r->p_Procs->pp_mm_Mult(p1, m1, r), m2, r); 873 } 874 pSetCoeff0(m1, n_InpNeg(pGetCoeff(m1),r->cf)); 875 } 876 } 877 878 while (bucket->buckets[i] != NULL) 879 { 880 //kbTest(bucket); 881 MULTIPLY_BUCKET(bucket,i); 882 p1 = p_Add_q(p1, bucket->buckets[i], 883 l1, bucket->buckets_length[i], r); 884 bucket->buckets[i] = NULL; 885 bucket->buckets_length[i] = 0; 886 i = pLogLength(l1); 887 } 888 889 bucket->buckets[i] = p1; 890 bucket->buckets_length[i]=l1; 891 if (i >= bucket->buckets_used) 892 bucket->buckets_used = i; 893 else 894 kBucketAdjustBucketsUsed(bucket); 895 #else // HAVE_PSEUDO_BUCKETS 896 bucket->p = p_Minus_mm_Mult_qq(bucket->p, m1, p_Mult_mm(p, m2, r), 897 bucket->l, l1, 898 spNoether, r); 899 #endif 900 } 901 902 ////////////////////////////////////////////////////////////////////////// 903 /// 800 904 /// Bpoly == Bpoly + m*p; where m is a monom 801 905 /// Does not destroy p and m -
libpolys/polys/kbuckets.h
r5f13434 rf5850b 134 134 ////////////////////////////////////////////////////////////////////////// 135 135 /// 136 /// Bpoly == Bpoly - m1*p*m2; where m1 and m2 are monoms 137 /// Does not destroy p, m1 and m2 (TODO: rename into kBucket_Minus_mm1_Mult_pp_Mult_mm2!?) 138 /// assume (*l <= 0 || pLength(p) == *l) 139 void kBucket_Minus_m1_Mult_p_Mult_m2(kBucket_pt bucket, poly m1, poly p, poly m2, int *l, poly spNother = NULL); 140 141 ////////////////////////////////////////////////////////////////////////// 142 /// 136 143 /// Bpoly == Bpoly + m*p; where m is a monom 137 144 /// Does not destroy p and m -
libpolys/polys/shiftop.cc
r5f13434 rf5850b 10 10 { 11 11 #ifdef SHIFT_MULT_DEBUG 12 Print("shift_pp_Mult_mm p=%s m=%s", pString(p), pString(m)); 13 PrintLn(); 12 PrintLn(); PrintS("shift_pp_Mult_mm: "); p_wrp(p, ri, ri); PrintS(" * "); p_wrp(m, ri, ri); 14 13 #endif 15 14 15 int lV = ri->isLPring; 16 if (p_mFirstVblock(m,lV,ri) < p_mFirstVblock(p,lV,ri)) { 17 // TODO remove this 18 PrintS("WARNING: auto switch to shift_pp_mm_Mult"); 19 return shift_pp_mm_Mult(p, m, ri); 20 } 21 16 22 // we just shift m and then call the commutative multiplication 17 int lV = ri->isLPring;18 23 int uptodeg = ri->N/lV; 19 int shift = p_LastVblock(p, lV, ri); 20 p_mLPshift(m, shift, uptodeg, lV, ri); 24 int pshift = p_LastVblock(p, lV, ri); 25 int mshift = p_mFirstVblock(m, lV, ri) - 1; 26 #ifdef SHIFT_MULT_DEBUG 27 if (mshift > 0) { 28 PrintLn(); 29 PrintS("WARNING: m is already shifted"); 30 } 31 #endif 32 poly m2 = p_Copy(m,ri); 33 p_mLPshift(m2, pshift - mshift, uptodeg, lV, ri); 21 34 22 35 // this is the commutative multiplication procedure 23 36 extern poly pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, ip_sring*); 24 p = pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m, ri); 25 return p_Shrink(p, lV, ri); 37 p = pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m2, ri); 38 p = p_Shrink(p, lV, ri); 39 #ifdef SHIFT_MULT_DEBUG 40 PrintLn(); PrintS("shift_pp_Mult_mm result: "); p_wrp(p, ri, ri); PrintLn(); 41 #endif 42 return p; 26 43 } 27 44 … … 29 46 poly shift_p_Mult_mm(poly p, const poly m, const ring ri) 30 47 { 48 // TODO remove this 49 return shift_pp_Mult_mm(p,m,ri); 31 50 #ifdef SHIFT_MULT_DEBUG 32 Print("shift_p_Mult_mm p=%s m=%s", pString(p), pString(m)); 33 PrintLn(); 51 PrintLn(); PrintS("shift_p_Mult_mm: "); p_wrp(p, ri, ri); PrintS(" * "); p_wrp(m, ri, ri); PrintLn(); 34 52 #endif 35 53 54 int lV = ri->isLPring; 55 if (p_mFirstVblock(m,lV,ri) < p_mFirstVblock(p,lV,ri)) { 56 // TODO remove this 57 Print("WARNING: auto switch to shift_p_mm_Mult"); 58 return shift_p_mm_Mult(p, m, ri); 59 } 60 36 61 // we just shift m and then call the commutative multiplication 62 int uptodeg = ri->N/lV; 63 int pshift = p_LastVblock(p, lV, ri); 64 int mshift = p_mFirstVblock(m, lV, ri) - 1; 65 #ifdef SHIFT_MULT_DEBUG 66 if (mshift > 0) { 67 PrintLn(); Print("WARNING: m is already shifted"); PrintLn(); 68 } 69 #endif 70 poly m2 = p_Copy(m,ri); 71 p_mLPshift(m2, pshift - mshift, uptodeg, lV, ri); 72 73 // this is the commutative multiplication procedure 74 extern poly p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, ip_sring*); 75 76 p = p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m2, ri); 77 poly q = p_Shrink(p, lV, ri); 78 p_Delete(&p, ri); 79 #ifdef SHIFT_MULT_DEBUG 80 PrintLn(); PrintS("shift_p_Mult_mm result: "); p_wrp(q, ri, ri); PrintLn(); 81 #endif 82 return q; 83 } 84 85 poly shift_pp_mm_Mult(poly p, const poly m, const ring ri) 86 { 87 #ifdef SHIFT_MULT_DEBUG 88 PrintLn(); PrintS("shift_pp_mm_Mult: "); p_wrp(m, ri, ri); PrintS(" * "); p_wrp(p, ri, ri); PrintLn(); 89 #endif 90 37 91 int lV = ri->isLPring; 92 if (p_mFirstVblock(p,lV,ri) < p_mFirstVblock(m,lV,ri)) { 93 // TODO remove this 94 PrintS("WARNING: auto switch to shift_pp_Mult_mm"); 95 return shift_pp_Mult_mm(p, m, ri); 96 } 97 98 // we just shift m and then call the commutative multiplication 38 99 int uptodeg = ri->N/lV; 39 int shift = p_LastVblock(p, lV, ri); 40 p_mLPshift(m, shift, uptodeg, lV, ri); 100 int mshift = p_mLastVblock(m, lV, ri); 101 int pshift = p_FirstVblock(p, lV, ri) - 1; 102 #ifdef SHIFT_MULT_DEBUG 103 if (pshift > 0) { 104 PrintLn(); PrintS("WARNING: p is already shifted"); PrintLn(); 105 } 106 #endif 107 p = p_Copy(p,ri); 108 p_LPshift(p, mshift - pshift, uptodeg, lV, ri); 109 110 // this is the commutative multiplication procedure 111 extern poly pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, ip_sring*); 112 p = pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m, ri); 113 114 p = p_Shrink(p, lV, ri); 115 #ifdef SHIFT_MULT_DEBUG 116 PrintLn(); PrintS("shift_pp_mm_Mult result: "); p_wrp(p, ri, ri); PrintLn(); 117 #endif 118 return p; 119 } 120 121 // destroys p 122 poly shift_p_mm_Mult(poly p, const poly m, const ring ri) 123 { 124 return shift_pp_mm_Mult(p,m,ri); 125 #ifdef SHIFT_MULT_DEBUG 126 PrintLn(); PrintS("shift_p_mm_Mult: "); p_wrp(m, ri, ri); PrintS(" * "); p_wrp(p, ri, ri); PrintLn(); 127 #endif 128 129 int lV = ri->isLPring; 130 if (p_mFirstVblock(p,lV,ri) < p_mFirstVblock(m,lV,ri)) { 131 // TODO remove this 132 Print("WARNING: auto switch to shift_p_Mult_mm"); 133 return shift_p_Mult_mm(p, m, ri); 134 } 135 136 // we just shift m and then call the commutative multiplication 137 int uptodeg = ri->N/lV; 138 int mshift = p_mLastVblock(m, lV, ri); 139 int pshift = p_FirstVblock(p, lV, ri) - 1; 140 #ifdef SHIFT_MULT_DEBUG 141 if (pshift > 0) { 142 PrintLn(); PrintS("WARNING: p is already shifted"); PrintLn(); 143 } 144 #endif 145 p_LPshift(p, mshift - pshift, uptodeg, lV, ri); 41 146 42 147 // this is the commutative multiplication procedure … … 46 151 poly q = p_Shrink(p, lV, ri); 47 152 p_Delete(&p, ri); 48 return q;49 }50 51 poly shift_pp_mm_Mult(poly p, const poly m, const ring ri)52 {53 153 #ifdef SHIFT_MULT_DEBUG 54 Print("shift_pp_mm_Mult p=%s m=%s", pString(p), pString(m)); 55 PrintLn(); 154 PrintLn(); PrintS("shift_p_mm_Mult resutl: "); p_wrp(q, ri, ri); PrintLn(); 56 155 #endif 57 58 // we just shift m and then call the commutative multiplication59 int lV = ri->isLPring;60 int uptodeg = ri->N/lV;61 int shift = p_mLastVblock(m, lV, ri);62 p_LPshift(p, shift, uptodeg, lV, ri);63 64 // this is the commutative multiplication procedure65 extern poly pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, ip_sring*);66 p = pp_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m, ri);67 return p_Shrink(p, lV, ri);68 }69 70 // destroys p71 poly shift_p_mm_Mult(poly p, const poly m, const ring ri)72 {73 #ifdef SHIFT_MULT_DEBUG74 Print("shift_p_mm_Mult p=%s m=%s", pString(p), pString(m));75 PrintLn();76 #endif77 78 // we just shift m and then call the commutative multiplication79 int lV = ri->isLPring;80 int uptodeg = ri->N/lV;81 int shift = p_mLastVblock(m, lV, ri);82 p_LPshift(p, shift, uptodeg, lV, ri);83 84 // this is the commutative multiplication procedure85 extern poly p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, ip_sring*);86 87 p = p_Mult_mm__FieldGeneral_LengthGeneral_OrdGeneral(p, m, ri);88 poly q = p_Shrink(p, lV, ri);89 p_Delete(&p, ri);90 156 return q; 91 157 } … … 95 161 96 162 #ifdef SHIFT_MULT_DEBUG 97 Print("shift_p_Minus_mm_Mult_qq p=%s m=%s q=%s spNoether=%s", pString(p), pString(m), pString(q)); 98 PrintLn(); 163 PrintLn(); PrintS("shift_p_Minus_mm_Mult_qq: "); p_wrp(p, ri, ri); PrintS(" - "); p_wrp(m, ri, ri); PrintS(" * "); p_wrp(q, ri, ri); PrintLn(); 99 164 #endif 100 165 101 // we just shift m and then call the commutative multiplication 102 int lV = ri->isLPring; 103 int uptodeg = ri->N/lV; 104 int shift = p_mLastVblock(m, lV, ri); 105 p_LPshift(q, shift, uptodeg, lV, ri); 166 Shorter = pLength(p) + pLength(q); 106 167 107 // this is the commutative multiplication procedure 108 extern poly p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral(spolyrec*, spolyrec*, spolyrec*, int&, spolyrec*, ip_sring*); 168 poly qq = p_Add_q(p, shift_pp_mm_Mult(q, p_Neg(p_Copy(m, ri), ri), ri), ri); 169 /* qq = p_Shrink(qq, lV, ri); // probably not neccessary */ 170 /* p_Delete(&p, ri); */ // just for testing disabled 109 171 110 p = p_Minus_mm_Mult_qq__FieldGeneral_LengthGeneral_OrdGeneral(p, m, q, Shorter, spNoether, ri); 111 poly qq = p_Shrink(p, lV, ri); 112 p_Delete(&p, ri); 172 #ifdef SHIFT_MULT_DEBUG 173 PrintLn(); PrintS("shift_p_Minus_mm_Mult_qq result: "); p_wrp(qq, ri, ri); PrintLn(); 174 #endif 175 Shorter -= pLength(qq); 113 176 return qq; 114 177 }
Note: See TracChangeset
for help on using the changeset viewer.