Changeset 042111 in git for kernel/polys1.cc


Ignore:
Timestamp:
Aug 17, 2005, 3:54:56 PM (19 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
ec7d7419da114fca1ac19c6e32f337aea021277a
Parents:
2c477e6cc69ee9025c77b5218d60f1a042b18d7a
Message:
*hannes: pContent for Q_a improved


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

Legend:

Unmodified
Added
Removed
  • kernel/polys1.cc

    r2c477e6 r042111  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: polys1.cc,v 1.13 2005-04-18 14:50:56 Singular Exp $ */
     4/* $Id: polys1.cc,v 1.14 2005-08-17 13:54:36 Singular Exp $ */
    55
    66/*
     
    495495    nNormalize(pGetCoeff(ph));
    496496    if(!nGreaterZero(pGetCoeff(ph))) ph = pNeg(ph);
     497    if (rField_is_Q_a())
     498    {
     499      h = nlInit(1);
     500      p=ph;
     501      while (p!=NULL)
     502      { // each monom: coeff in Q_a
     503        lnumber c_n_n=(lnumber)pGetCoeff(p);
     504        napoly c_n=c_n_n->z;
     505        while (c_n!=NULL)
     506        { // each monom: coeff in Q
     507          d=nlLcm(h,pGetCoeff(c_n),currRing->algring);
     508          n_Delete(&h,currRing->algring);
     509          h=d;
     510          pIter(c_n);
     511        }
     512        pIter(p);
     513      }
     514      /* contains the 1/lcm of all denominators in c_n_n->z*/
     515      number hz=h;
     516      h = nlInit(1);
     517      p=ph;
     518      while (p!=NULL)
     519      { // each monom: coeff in Q_a
     520        lnumber c_n_n=(lnumber)pGetCoeff(p);
     521        napoly c_n=c_n_n->n;
     522        while (c_n!=NULL)
     523        { // each monom: coeff in Q
     524          d=nlLcm(h,pGetCoeff(c_n),currRing->algring);
     525          n_Delete(&h,currRing->algring);
     526          h=d;
     527          pIter(c_n);
     528        }
     529        pIter(p);
     530      }
     531      /* contains the 1/lcm of all denominators in c_n_n->n*/
     532      number htmp=nlInvers(h);
     533      number hztmp=nlInvers(hz);
     534      number hh=nlMult(hz,h);
     535      nlDelete(&hz,currRing->algring);
     536      nlDelete(&h,currRing->algring);
     537      number hg=nlGcd(hztmp,htmp,currRing->algring);
     538      nlDelete(&hztmp,currRing->algring);
     539      nlDelete(&htmp,currRing->algring);
     540      h=nlMult(hh,hg);
     541      nlDelete(&hg,currRing->algring);
     542      nlDelete(&hh,currRing->algring);
     543      if(!nlIsOne(h))
     544      {
     545        p=ph;
     546        while (p!=NULL)
     547        { // each monom: coeff in Q_a
     548          lnumber c_n_n=(lnumber)pGetCoeff(p);
     549          napoly c_n=c_n_n->z;
     550          while (c_n!=NULL)
     551          { // each monom: coeff in Q
     552            d=nlMult(h,pGetCoeff(c_n));
     553            nlNormalize(d);
     554            nlDelete(&pGetCoeff(c_n),currRing->algring);
     555            pGetCoeff(c_n)=d;
     556            pIter(c_n);
     557          }
     558          pIter(p);
     559        }
     560        p=ph;
     561        while (p!=NULL)
     562        { // each monom: coeff in Q_a
     563          lnumber c_n_n=(lnumber)pGetCoeff(p);
     564          napoly c_n=c_n_n->n;
     565          while (c_n!=NULL)
     566          { // each monom: coeff in Q
     567            d=nlMult(h,pGetCoeff(c_n));
     568            nlNormalize(d);
     569            nlDelete(&pGetCoeff(c_n),currRing->algring);
     570            pGetCoeff(c_n)=d;
     571            pIter(c_n);
     572          }
     573          pIter(p);
     574        }
     575      }
     576      nlDelete(&h,currRing->algring);
     577    }
    497578    if (rField_is_Q())
    498579    {
     
    551632    }
    552633#endif
     634    if (rField_is_Q_a())
     635    {
     636      h = nlInit(1);
     637      p=ph;
     638      while (p!=NULL)
     639      { // each monom: coeff in Q_a
     640        lnumber c_n_n=(lnumber)pGetCoeff(p);
     641        napoly c_n=c_n_n->z;
     642        while (c_n!=NULL)
     643        { // each monom: coeff in Q
     644          d=nlLcm(h,pGetCoeff(c_n),currRing->algring);
     645          n_Delete(&h,currRing->algring);
     646          h=d;
     647          pIter(c_n);
     648        }
     649        pIter(p);
     650      }
     651      /* contains the 1/lcm of all denominators in c_n_n->z*/
     652      number hz=h;
     653      h = nlInit(1);
     654      p=ph;
     655      while (p!=NULL)
     656      { // each monom: coeff in Q_a
     657        lnumber c_n_n=(lnumber)pGetCoeff(p);
     658        napoly c_n=c_n_n->n;
     659        while (c_n!=NULL)
     660        { // each monom: coeff in Q
     661          d=nlLcm(h,pGetCoeff(c_n),currRing->algring);
     662          n_Delete(&h,currRing->algring);
     663          h=d;
     664          pIter(c_n);
     665        }
     666        pIter(p);
     667      }
     668      /* contains the 1/lcm of all denominators in c_n_n->n*/
     669      number htmp=nlInvers(h);
     670      number hztmp=nlInvers(hz);
     671      number hh=nlMult(hz,h);
     672      nlDelete(&hz,currRing->algring);
     673      nlDelete(&h,currRing->algring);
     674      number hg=nlGcd(hztmp,htmp,currRing->algring);
     675      nlDelete(&hztmp,currRing->algring);
     676      nlDelete(&htmp,currRing->algring);
     677      h=nlMult(hh,hg);
     678      nlDelete(&hg,currRing->algring);
     679      nlDelete(&hh,currRing->algring);
     680      if(!nlIsOne(h))
     681      {
     682        p=ph;
     683        while (p!=NULL)
     684        { // each monom: coeff in Q_a
     685          lnumber c_n_n=(lnumber)pGetCoeff(p);
     686          napoly c_n=c_n_n->z;
     687          while (c_n!=NULL)
     688          { // each monom: coeff in Q
     689            d=nlMult(h,pGetCoeff(c_n));
     690            nlNormalize(d);
     691            nlDelete(&pGetCoeff(c_n),currRing->algring);
     692            pGetCoeff(c_n)=d;
     693            pIter(c_n);
     694          }
     695          pIter(p);
     696        }
     697        p=ph;
     698        while (p!=NULL)
     699        { // each monom: coeff in Q_a
     700          lnumber c_n_n=(lnumber)pGetCoeff(p);
     701          napoly c_n=c_n_n->n;
     702          while (c_n!=NULL)
     703          { // each monom: coeff in Q
     704            d=nlMult(h,pGetCoeff(c_n));
     705            nlNormalize(d);
     706            nlDelete(&pGetCoeff(c_n),currRing->algring);
     707            pGetCoeff(c_n)=d;
     708            pIter(c_n);
     709          }
     710          pIter(p);
     711        }
     712      }
     713      nlDelete(&h,currRing->algring);
     714    }
    553715  }
    554716}
Note: See TracChangeset for help on using the changeset viewer.