Changeset c94036 in git


Ignore:
Timestamp:
Feb 25, 2005, 11:56:59 AM (19 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
e36a2c02d04f328d5cb0f65d06c9645636bd53c3
Parents:
dc6b576eab156ea960b83a3ed8a822d14adab0b7
Message:
*bricken:further optimized


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

Legend:

Unmodified
Added
Removed
  • kernel/fast_mult.cc

    rdc6b57 rc94036  
    400400  p_ExpVectorAdd(p,q,r);
    401401}
     402/*3
     403* compute for monomials p*q
     404* keeps p, q
     405* uses bin only available in MCPower
     406*/
     407static poly p_MonMultCMB(poly p, poly q, ring r)
     408{
     409  number x;
     410  int i;
     411  poly res = p_Init(r,lm_bin);
     412
     413  x = n_Mult(p_GetCoeff(p,r),p_GetCoeff(q,r),r);
     414  p_SetCoeff0(res,x,r);
     415  p_ExpVectorSum(res,p, q,r);
     416  return res;
     417}
    402418static poly p_MonPowerMB(poly p, int exp, ring r)
    403419{
     
    419435  return p;
    420436}
    421 static void buildTermAndAdd(int n,number* facult,poly* f_terms,int* exp,int f_len,kBucket_pt erg_bucket,ring r, number coef, poly & zw, poly tmp){
     437static void buildTermAndAdd(int n,number* facult,poly* f_terms,int* exp,int f_len,kBucket_pt erg_bucket,ring r, number coef, poly & zw, poly tmp, poly** term_pot){
    422438 
    423439  int i;
     
    442458    if(exp[i]!=0){
    443459      ///poly term=p_Copy(f_terms[i],r);
    444       poly term=tmp;
    445       p_ExpVectorCopy(term,f_terms[i],r);
    446       p_SetCoeff(term, n_Copy(p_GetCoeff(f_terms[i],r),r),r);
     460      poly term=term_pot[i][exp[i]];
     461        //tmp;
     462        //p_ExpVectorCopy(term,f_terms[i],r);
     463        //p_SetCoeff(term, n_Copy(p_GetCoeff(f_terms[i],r),r),r);
     464       
    447465      //term->next=NULL;
    448466     
    449       p_MonPowerMB(term, exp[i],r);
     467      //p_MonPowerMB(term, exp[i],r);
    450468      p_MonMultMB(erg,term,r);
    451469      //p_Delete(&term,r);
     
    460478
    461479
    462 static void MC_iterate(poly f, int n, ring r, int f_len,number* facult, int* exp,poly* f_terms,kBucket_pt erg_bucket,int pos,int sum, number coef, poly & zw, poly tmp){
     480static void MC_iterate(poly f, int n, ring r, int f_len,number* facult, int* exp,poly* f_terms,kBucket_pt erg_bucket,int pos,int sum, number coef, poly & zw, poly tmp, poly** term_pot){
    463481  int i;
    464482
     
    469487      number new_coef=n_IntDiv(coef,facult[i],r);
    470488      poly zw_real=NULL;
    471       MC_iterate(f, n, r, f_len,facult, exp,f_terms,erg_bucket,pos+1,sum+i,new_coef,zw_real,tmp);
     489      MC_iterate(f, n, r, f_len,facult, exp,f_terms,erg_bucket,pos+1,sum+i,new_coef,zw_real,tmp,term_pot);
    472490      if (pos==f_len-2){
    473491        //get first small polys
     
    488506    exp[pos]=i;
    489507    number new_coef=n_IntDiv(coef,facult[i],r);
    490     buildTermAndAdd(n,facult,f_terms,exp,f_len,erg_bucket,r, new_coef,zw, tmp);
     508    buildTermAndAdd(n,facult,f_terms,exp,f_len,erg_bucket,r, new_coef,zw, tmp,term_pot);
    491509    // n_Delete(& new_coef,r);
    492510  }
     
    518536  //poly f_terms[f_len];
    519537  poly* f_terms=(poly*)omalloc(f_len*sizeof(poly));
     538  poly** term_potences=(poly**) omalloc(f_len*sizeof(poly*));
     539 
    520540  poly f_iter=f;
    521541  for(i=0;i<f_len;i++){
     
    523543    f_iter=pNext(f_iter);
    524544  }
     545  for(i=0;i<f_len;i++){
     546    term_potences[i]=(poly*)omalloc((n+1)*sizeof(poly));
     547    term_potences[i][0]=p_ISet(1,r);
     548    int j;
     549    for(j=1;j<=n;j++){
     550      term_potences[i][j]=p_MonMultCMB(f_terms[i],term_potences[i][j-1],r);
     551    }
     552  }
    525553  assume(f_iter==NULL);
    526554  poly zw=NULL;
    527555  poly tmp=p_Init(r);
    528   MC_iterate(f,n,r,f_len,&facult[0], &exp[0], &f_terms[0],erg_bucket,0,0,facult[n],zw,tmp);
     556  MC_iterate(f,n,r,f_len,&facult[0], &exp[0], &f_terms[0],erg_bucket,0,0,facult[n],zw,tmp, term_potences);
    529557
    530558
     
    539567    n_Delete(&facult[i],r);
    540568  }
     569  int i2;
     570  for (i=0;i<f_len;i++){
     571    for(i2=0;i2<=n;i2++){
     572      p_Delete(&term_potences[i][i2],r);
     573    }
     574    omfree(term_potences[i]);
     575   
     576  }
     577  omfree(term_potences);
    541578  p_Delete(&tmp,r);
    542579  omfree(exp);
Note: See TracChangeset for help on using the changeset viewer.