Changeset 941bf9 in git for kernel/polys1.cc


Ignore:
Timestamp:
Apr 23, 2004, 4:04:42 PM (20 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
5a66d0c8e747797ee482ce0aaecbbdf0252e0aa3
Parents:
56153efca09c16d4c43e6f1babac53fb932084ec
Message:
*hannes: pSimpleContent


git-svn-id: file:///usr/local/Singular/svn/trunk@7153 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/polys1.cc

    r56153ef r941bf9  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: polys1.cc,v 1.3 2004-03-25 21:16:47 levandov Exp $ */
     4/* $Id: polys1.cc,v 1.4 2004-04-23 14:04:42 Singular Exp $ */
    55
    66/*
     
    2828#endif
    2929
     30#define SR_HDL(A) ((long)A)
    3031/*-------- several access procedures to monomials -------------------- */
    3132/*
     
    480481}
    481482
     483number pInitContent(poly ph);
     484
    482485void pContent(poly ph)
    483486{
     
    494497    nNormalize(pGetCoeff(ph));
    495498    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    }
    498509    while (p!=NULL)
    499510    {
     
    538549  }
    539550}
     551void 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
     606number 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
    540690
    541691//void pContent(poly ph)
     
    652802    n_Delete(&h,r);
    653803#ifdef HAVE_FACTORY
    654     //if ( (nGetChar() == 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) */
    655805    //{
    656806    //  singclap_divide_content(ph);
    657     //  if(!nGreaterZero(pGetCoeff(ph))) ph = pNeg(ph);
     807    //  if(!n_GreaterZero(pGetCoeff(ph),r)) ph = p_Neg(ph,r);
    658808    //}
    659809#endif
     
    675825      {
    676826        number nn=nMult(pGetCoeff(p),n);
    677         nNormalize(nn);
     827        nNormalize(nn);
    678828        pSetCoeff(p,nn);
    679829      }
Note: See TracChangeset for help on using the changeset viewer.