Changeset 93af5b in git
- Timestamp:
- Sep 27, 1999, 4:33:28 PM (25 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 360948186b228cfd2f4f810105615449e16ece57
- Parents:
- 59dff80d507cfb0f41b20d3321cf98898ad960e0
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/kbPolyProcs.cc
r59dff8 r93af5b 11 11 #include "modulop.h" 12 12 #include "spolys0.h" 13 14 /*************************************************************** 15 * 16 * Reduces p1 with p2 17 * Assumes p1 != NULL, p2 != NULL, Lm(p1) divides Lm(p2) 18 * pLength(p2) == l2 13 #include "polys-comp.h" 14 15 #define HAVE_COMP_MACROS 16 17 /*************************************************************** 18 * 19 * Reduces PR with PW 20 * Assumes PR != NULL, PW != NULL, Lm(PR) divides Lm(PW) 19 21 * 20 22 ***************************************************************/ 21 void kbReducePoly(poly *p1, int *l1, 22 poly p2, int l2, 23 poly spNoether, 24 kbPolyProcs_pt pprocs, 25 memHeap heap) 23 void kbReducePoly(LObject* PR, 24 TObject* PW, 25 poly spNoether) 26 26 { 27 assume( p2 != NULL &&28 pDivisibleBy(p2, *p1));29 #ifdef HAVE_LENGTH 30 assume(pLength(p2) == (int) l2);31 assume(pLength(p1) == (int) l1);32 #endif 33 34 poly a2 = pNext(p2), lm = *p1;35 *p1 = pNext(*p1);36 *l1 = *l1 -1;27 assume(kTest_L(PR)); 28 assume(kTest_T(PW)); 29 30 poly p1 = PR->p; 31 poly p2 = PW->p; 32 assume(p2 != NULL && p1 != NULL && pDivisibleBy(p2, p1)); 33 34 poly a2 = pNext(p2), lm = p1; 35 p1 = pNext(p1); 36 PR->p = p1; 37 37 BOOLEAN reset_vec=FALSE; 38 38 39 39 if (a2==NULL) 40 40 { 41 kb_pDelete1(lm, heap);41 pDelete1(&lm); 42 42 return; 43 43 } … … 48 48 int ct = spCheckCoeff(&an, &bn); 49 49 pSetCoeff(lm, bn); 50 if ((ct == 0) || (ct == 2)) kb_n_Mult_p _General(an, *p1);50 if ((ct == 0) || (ct == 2)) kb_n_Mult_p(an, PR->p); 51 51 nDelete(&an); 52 52 } 53 54 53 55 54 if (pGetComp(p2) != pGetComp(lm)) … … 61 60 pMonSubFast(lm, p2); 62 61 assume(pGetComp(lm) == 0); 63 64 kb_p_Minus_m_Mult_q_General(p1, l1, lm, a2, l2-1, spNoether); 65 66 kb_pDelete1(lm, heap); 62 lm->next = NULL; 63 pTest(lm); 64 int l1, l2; 65 kb_p_Minus_m_Mult_q(&(PR->p), &l1, 66 lm, 67 a2, l2, spNoether); 68 69 pDelete1(&lm); 67 70 if (reset_vec) spModuleToPoly(p2); 68 71 } … … 74 77 * 75 78 ***************************************************************/ 76 void kbCreateSpoly(poly *sp, int *lsp, 77 poly p1, int l1, 78 poly p2, int l2, 79 poly spNoether, 80 kbPolyProcs_pt pprocs, 81 memHeap heap) 79 void kbCreateSpoly(LObject* Pair, 80 poly spNoether) 82 81 { 83 #ifdef HAVE_LENGTH 84 assume(p1 != NULL && (l1 <= 0 || pLength(p1) == l1)); 85 assume(p2 != NULL && (l2 <= 0 || pLength(p2) == l2)); 86 #endif 87 #ifdef KB_USE_HEAPS 88 assume(heap != NULL); 89 #else 90 assume(heap == NULL); 91 #endif 92 82 assume(kTest_L(Pair)); 83 poly p1 = Pair->p1; 84 poly p2 = Pair->p2; 85 86 assume(p1 != NULL); 87 assume(p2 != NULL); 88 93 89 poly a1 = pNext(p1), a2 = pNext(p2); 94 90 number lc1 = pGetCoeff(p1), lc2 = pGetCoeff(p2); … … 96 92 int co=0, ct = spCheckCoeff(&lc1, &lc2); 97 93 Exponent_t x; 94 int l1; 98 95 99 96 if (pGetComp(p1)!=pGetComp(p2)) … … 135 132 136 133 // get m2 * a2 137 a2 = kb_p_Mult_m_General(a2, m2); 138 #ifdef HAVE_LENGTH 139 if (l1 <= 0) l1 = pLength(a1); else l1--; 140 if (l2 <= 0) l2 = pLength(a2); else l2--; 141 #endif 134 Pair->p = kb_p_Mult_m(a2, m2); 135 136 int l2; 142 137 // and, finally, the spoly 143 kb_p_Minus_m_Mult_q _General(&a2, &l2, m1, a1, l1);138 kb_p_Minus_m_Mult_q(&(Pair->p), &l2, m1, a1, l1); 144 139 145 140 // Clean-up time … … 158 153 } 159 154 } 160 *sp = a2;161 *lsp = l2;162 pTest(*sp);163 155 } 164 156 … … 224 216 225 217 Top: // compare a1 and a2 w.r.t. monomial ordering 226 // register long d; 227 long d; 218 register long d; 228 219 #ifdef HAVE_COMP_MACROS 229 _pMonComp(a1, a2, d, goto NotEqual , goto Equal);220 _pMonComp(a1, a2, d, goto NotEqual , goto Equal); 230 221 #else 231 222 if ((d = pComp0(a1, a2))) goto NotEqual; else goto Equal; … … 294 285 295 286 Finish: 296 #ifdef HAVE_LENGTH 287 #ifdef HAVE_LENGTH 297 288 assume(pLength(pNext(&rp)) == (int) l); 298 289 #endif … … 365 356 poly q, int lq, 366 357 poly spNoether, 367 kb_p_Mult_m_Proc kb_p_Mult_m,368 358 memHeap heap) 369 359 { … … 376 366 assume(pLength(q) == lq); 377 367 assume(pLength(*pp) == *lpp); 378 #endif379 assume(pGetComp(m) == 0);380 368 pTest(*pp); 381 369 pTest(q); 370 #endif 371 assume(pGetComp(m) == 0); 382 372 // we are done if q == NULL 383 373 if (q == NULL || m == NULL) return; … … 474 464 { 475 465 pSetCoeff0(m, tneg); 476 pNext(a) = kb_p_Mult_m _General(q, m, spNoether, heap);466 pNext(a) = kb_p_Mult_m(q, m, spNoether, heap); 477 467 pSetCoeff0(m, tm); 478 468 } … … 484 474 *lpp = lp; 485 475 pNext(m) = NULL; 486 487 #ifdef HAVE_LENGTH 476 #ifdef HAVE_LENGTH 488 477 assume(pLength(*pp) == *lpp); 489 #endif490 478 pTest(*pp); 479 #endif 491 480 } 492 481 … … 531 520 532 521 // set characterisic 533 if (r Field_is_Zp(r)) ch = chMODP;522 if (r->ch > 1) ch = chMODP; 534 523 535 524 // set Ordering Type -
Singular/kbPolyProcs.h
r59dff8 r93af5b 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: kbPolyProcs.h,v 1. 2 1999-05-26 16:20:16 obachman Exp $ */6 /* $Id: kbPolyProcs.h,v 1.3 1999-09-27 14:33:26 obachman Exp $ */ 7 7 #include "mod2.h" 8 8 #include "mmheap.h" 9 9 #include "ring.h" 10 #include "kutil.h" 10 11 11 12 … … 37 38 poly q, int lq, 38 39 poly spNoether, 39 kb_p_Mult_m_Proc kb_p_Mult_m,40 40 memHeap heap = NULL); 41 41 extern void kb_p_Minus_m_Mult_q_General(poly *p, int *lp, … … 43 43 poly q, int lq, 44 44 poly spNoether, 45 kb_p_Mult_m_Proc kb_p_Mult_m,46 45 memHeap heap = NULL); 47 46 … … 65 64 BOOLEAN homog = FALSE); 66 65 66 67 #define kb_n_Mult_p kb_n_Mult_p_General 68 #define kb_p_Add_q kb_p_Add_q_General 69 #define kb_p_Minus_m_Mult_q kb_p_Minus_m_Mult_q_General 70 #define kb_p_Mult_m kb_p_Mult_m_General 71 72 /////////////////////////////////////////////////////////////////////// 73 /// 74 /// General Procedures for poly arithemetic which always work 75 /// 76 void kb_n_Mult_p_General(number n, poly p); 77 void kb_p_Add_q_General(poly *p, int *lp, 78 poly *q, int *lq, 79 memHeap heap = NULL); 80 poly kb_p_Mult_m_General(poly p, 81 poly m, 82 poly spNoether = NULL, 83 memHeap heap = NULL); 84 void kb_p_Minus_m_Mult_q_General (poly *pp, int *lpp, 85 poly m, 86 poly q, int lq, 87 poly spNoether = NULL, 88 memHeap heap = NULL); 89 90 91 void kbCreateSpoly(LObject* P, 92 poly spNoether = NULL); 93 94 95 void kbReducePoly(LObject* RP, // Poly to be reduced 96 TObject* WP, // Poly with which is reduced 97 poly spNoether = NULL); 98 99 67 100 #endif /* KBPOLYPROCS_H */
Note: See TracChangeset
for help on using the changeset viewer.