Changeset 941bf9 in git for kernel/polys1.cc
- Timestamp:
- Apr 23, 2004, 4:04:42 PM (20 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 5a66d0c8e747797ee482ce0aaecbbdf0252e0aa3
- Parents:
- 56153efca09c16d4c43e6f1babac53fb932084ec
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/polys1.cc
r56153ef r941bf9 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys1.cc,v 1. 3 2004-03-25 21:16:47 levandovExp $ */4 /* $Id: polys1.cc,v 1.4 2004-04-23 14:04:42 Singular Exp $ */ 5 5 6 6 /* … … 28 28 #endif 29 29 30 #define SR_HDL(A) ((long)A) 30 31 /*-------- several access procedures to monomials -------------------- */ 31 32 /* … … 480 481 } 481 482 483 number pInitContent(poly ph); 484 482 485 void pContent(poly ph) 483 486 { … … 494 497 nNormalize(pGetCoeff(ph)); 495 498 if(!nGreaterZero(pGetCoeff(ph))) ph = pNeg(ph); 496 h=nCopy(pGetCoeff(ph)); 497 p = pNext(ph); 499 if (rField_is_Q()) 500 { 501 h=pInitContent(ph); 502 p=ph; 503 } 504 else 505 { 506 h=nCopy(pGetCoeff(ph)); 507 p = pNext(ph); 508 } 498 509 while (p!=NULL) 499 510 { … … 538 549 } 539 550 } 551 void pSimpleContent(poly ph,int smax) 552 { 553 if(TEST_OPT_CONTENTSB) return; 554 if (ph==NULL) return; 555 if (pNext(ph)==NULL) 556 { 557 pSetCoeff(ph,nInit(1)); 558 return; 559 } 560 if ((pNext(pNext(ph))==NULL)||(!rField_is_Q())) 561 { 562 return; 563 } 564 number d=pInitContent(ph); 565 if (nlSize(d)<=smax) 566 { 567 //if (TEST_OPT_PROT) PrintS("G"); 568 return; 569 } 570 poly p=ph; 571 number h=d; 572 if (smax==1) smax=2; 573 while (p!=NULL) 574 { 575 #if 0 576 d=nlGcd(h,pGetCoeff(p),currRing); 577 nlDelete(&h,currRing); 578 h = d; 579 #else 580 nlInpGcd(h,pGetCoeff(p),currRing); 581 #endif 582 if(nlSize(h)<smax) 583 { 584 //if (TEST_OPT_PROT) PrintS("g"); 585 return; 586 } 587 pIter(p); 588 } 589 p = ph; 590 if (!nlGreaterZero(pGetCoeff(p))) h=nlNeg(h); 591 if(nlIsOne(h)) return; 592 //if (TEST_OPT_PROT) PrintS("c"); 593 while (p!=NULL) 594 { 595 #if 1 596 d = nlIntDiv(pGetCoeff(p),h); 597 pSetCoeff(p,d); 598 #else 599 nlInpIntDiv(pGetCoeff(p),h,currRing); 600 #endif 601 pIter(p); 602 } 603 nlDelete(&h,currRing); 604 } 605 606 number pInitContent(poly ph) 607 #if 0 608 { 609 assume(!TEST_OPT_CONTENTSB); 610 assume(ph!=NULL); 611 assume(pNext(ph)!=NULL); 612 assume(rField_is_Q()); 613 if (pNext(pNext(ph))==NULL) 614 { 615 return nlGetNom(pGetCoeff(pNext(ph)),currRing); 616 } 617 poly p=ph; 618 number n1=nlGetNom(pGetCoeff(p),currRing); 619 pIter(p); 620 number n2=nlGetNom(pGetCoeff(p),currRing); 621 pIter(p); 622 number d; 623 number t; 624 loop 625 { 626 nlNormalize(pGetCoeff(p)); 627 t=nlGetNom(pGetCoeff(p),currRing); 628 if (nlGreaterZero(t)) 629 d=nlAdd(n1,t); 630 else 631 d=nlSub(n1,t); 632 nlDelete(&t,currRing); 633 nlDelete(&n1,currRing); 634 n1=d; 635 pIter(p); 636 if (p==NULL) break; 637 nlNormalize(pGetCoeff(p)); 638 t=nlGetNom(pGetCoeff(p),currRing); 639 if (nlGreaterZero(t)) 640 d=nlAdd(n2,t); 641 else 642 d=nlSub(n2,t); 643 nlDelete(&t,currRing); 644 nlDelete(&n2,currRing); 645 n2=d; 646 pIter(p); 647 if (p==NULL) break; 648 } 649 d=nlGcd(n1,n2,currRing); 650 nlDelete(&n1,currRing); 651 nlDelete(&n2,currRing); 652 return d; 653 } 654 #else 655 { 656 number d=pGetCoeff(ph); 657 if(SR_HDL(d)&SR_INT) return d; 658 int s=mpz_size1(&d->z); 659 int s2=-1; 660 number d2; 661 loop 662 { 663 pIter(ph); 664 if(ph==NULL) 665 { 666 if (s2==-1) return nlCopy(d); 667 break; 668 } 669 if (SR_HDL(pGetCoeff(ph))&SR_INT) 670 { 671 s2=s; 672 d2=d; 673 s=0; 674 d=pGetCoeff(ph); 675 if (s2==0) break; 676 } 677 else 678 if (mpz_size1(&(pGetCoeff(ph)->z))<=s) 679 { 680 s2=s; 681 d2=d; 682 d=pGetCoeff(ph); 683 s=mpz_size1(&d->z); 684 } 685 } 686 return nlGcd(d,d2,currRing); 687 } 688 #endif 689 540 690 541 691 //void pContent(poly ph) … … 652 802 n_Delete(&h,r); 653 803 #ifdef HAVE_FACTORY 654 //if ( (n GetChar() == 1) || (nGetChar() < 0) ) /* Q[a],Q(a),Zp[a],Z/p(a) */804 //if ( (n_GetChar(r) == 1) || (n_GetChar(r) < 0) ) /* Q[a],Q(a),Zp[a],Z/p(a) */ 655 805 //{ 656 806 // singclap_divide_content(ph); 657 // if(!n GreaterZero(pGetCoeff(ph))) ph = pNeg(ph);807 // if(!n_GreaterZero(pGetCoeff(ph),r)) ph = p_Neg(ph,r); 658 808 //} 659 809 #endif … … 675 825 { 676 826 number nn=nMult(pGetCoeff(p),n); 677 827 nNormalize(nn); 678 828 pSetCoeff(p,nn); 679 829 }
Note: See TracChangeset
for help on using the changeset viewer.