Changeset ace936 in git


Ignore:
Timestamp:
Feb 28, 2014, 4:27:12 PM (10 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
d469bf890482230cb7a3bd182e0fcc790589cf48
Parents:
b1a45330465577e955cfdf7d1befbe76825d088f
git-author:
Martin Lee <martinlee84@web.de>2014-02-28 16:27:12+01:00
git-committer:
Martin Lee <martinlee84@web.de>2014-03-06 11:04:13+01:00
Message:
chg: keep exponents positive in convex dense (de)compression
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/cfNewtonPolygon.cc

    rb1a453 race936  
    727727  int k= 0;
    728728  Variable alpha;
     729  mpz_t * exps= new mpz_t [2*size (F)];
     730  int count= 0;
    729731  for (CFIterator i= F; i.hasTerms(); i++)
    730732  {
     
    749751          mpz_set (minExpX, expX);
    750752      }
    751       result += i.coeff()*power (x, mpz_get_si (expX))*
    752                 power (y, mpz_get_si (expY));
     753      mpz_init_set (exps[count], expX);
     754      count++;
     755      mpz_init_set (exps[count], expY);
     756      count++;
    753757      continue;
    754758    }
     
    766770      mpz_set (minExpX, expX);
    767771      mpz_set (minExpY, expY);
    768       result += j.coeff()*power (x, mpz_get_si (expX))*
    769                 power (y, mpz_get_si (expY));
     772      mpz_init_set (exps[count], expX);
     773      count++;
     774      mpz_init_set (exps[count], expY);
     775      count++;
    770776      j++;
    771777      k= 1;
     
    782788      mpz_addmul_ui (expY, M[2], j.exp());
    783789
    784       result += j.coeff()*power (x, mpz_get_si (expX))*
    785                 power (y, mpz_get_si (expY));
     790      mpz_init_set (exps[count], expX);
     791      count++;
     792      mpz_init_set (exps[count], expY);
     793      count++;
    786794      if (mpz_cmp (minExpY, expY) > 0)
    787795        mpz_set (minExpY, expY);
     
    791799  }
    792800
    793   if (mpz_sgn (minExpX) < 0)
    794   {
    795     result *= power (x,-mpz_get_si(minExpX));
    796     result /= CanonicalForm (x, 0);
    797   }
    798   else
    799     result /= power (x,mpz_get_si(minExpX));
    800 
    801   if (mpz_sgn (minExpY) < 0)
    802   {
    803     result *= power (y,-mpz_get_si(minExpY));
    804     result /= CanonicalForm (y, 0);
    805   }
    806   else
    807     result /= power (y,mpz_get_si(minExpY));
     801  count= 0;
     802  int mExpX= mpz_get_si (minExpX);
     803  int mExpY= mpz_get_si (minExpY);
     804  for (CFIterator i= F; i.hasTerms(); i++)
     805  {
     806    if (i.coeff().inCoeffDomain() && hasFirstAlgVar (i.coeff(), alpha))
     807    {
     808      result += i.coeff()*power (x, mpz_get_si (exps[count])-mExpX)*
     809                power (y, mpz_get_si (exps[count+1])-mExpY);
     810      count += 2;
     811      continue;
     812    }
     813    CFIterator j= i.coeff();
     814    for (; j.hasTerms(); j++)
     815    {
     816      result += j.coeff()*power (x, mpz_get_si (exps[count])-mExpX)*
     817                power (y, mpz_get_si (exps[count+1])-mExpY);
     818      count += 2;
     819    }
     820  }
    808821
    809822  CanonicalForm tmp= LC (result);
     
    824837  }
    825838
     839  delete [] exps;
    826840  mpz_clear (expX);
    827841  mpz_clear (expY);
     
    845859  mpz_init (minExpY);
    846860
     861  mpz_t * exps= new mpz_t [2*size(F)];
     862  int count= 0;
    847863  if (F.isUnivariate() && F.level() == 1)
    848864  {
     
    861877    mpz_set (minExpX, expX);
    862878    mpz_set (minExpY, expY);
    863     result += i.coeff()*power (x, mpz_get_si (expX))*
    864               power (y, mpz_get_si (expY));
     879
     880    mpz_init_set (exps[count], expX);
     881    mpz_init_set (exps[count+1], expY);
     882    count += 2;
     883
    865884    i++;
    866885    for (; i.hasTerms(); i++)
     
    876895      mpz_submul (expY, inverseM[3], A[1]);
    877896
    878       result += i.coeff()*power (x, mpz_get_si (expX))*
    879                 power (y, mpz_get_si (expY));
     897      mpz_init_set (exps[count], expX);
     898      mpz_init_set (exps[count+1], expY);
     899      count += 2;
     900
    880901      if (mpz_cmp (minExpY, expY) > 0)
    881902        mpz_set (minExpY, expY);
     
    884905    }
    885906
    886     if (mpz_sgn (minExpX) < 0)
    887     {
    888       result *= power (x,-mpz_get_si(minExpX));
    889       result /= CanonicalForm (x, 0);
    890     }
    891     else
    892       result /= power (x,mpz_get_si(minExpX));
    893 
    894     if (mpz_sgn (minExpY) < 0)
    895     {
    896       result *= power (y,-mpz_get_si(minExpY));
    897       result /= CanonicalForm (y, 0);
    898     }
    899     else
    900       result /= power (y,mpz_get_si(minExpY));
     907    int mExpX= mpz_get_si (minExpX);
     908    int mExpY= mpz_get_si (minExpY);
     909    count= 0;
     910    for (i= F; i.hasTerms(); i++)
     911    {
     912      result += i.coeff()*power (x, mpz_get_si (exps[count])-mExpX)*
     913                power (y, mpz_get_si (exps[count+1])-mExpY);
     914      count += 2;
     915    }
    901916
    902917    mpz_clear (expX);
     
    905920    mpz_clear (minExpY);
    906921
     922    delete [] exps;
    907923    return result/ Lc (result); //normalize
    908924  }
     
    939955          mpz_set (minExpX, expX);
    940956      }
    941       result += i.coeff()*power (x, mpz_get_si (expX))*
    942                 power (y, mpz_get_si (expY));
     957      mpz_init_set (exps[count], expX);
     958      mpz_init_set (exps[count+1], expY);
     959      count += 2;
    943960      continue;
    944961    }
     
    962979      mpz_set (minExpX, expX);
    963980      mpz_set (minExpY, expY);
    964       result += j.coeff()*power (x, mpz_get_si (expX))*
    965                 power (y, mpz_get_si (expY));
     981
     982      mpz_init_set (exps[count], expX);
     983      mpz_init_set (exps[count+1], expY);
     984      count += 2;
     985
    966986      j++;
    967987      k= 1;
     
    9841004      mpz_addmul (expY, tmp, inverseM[3]);
    9851005
    986       result += j.coeff()*power (x, mpz_get_si (expX))*
    987                 power (y, mpz_get_si (expY));
     1006      mpz_init_set (exps[count], expX);
     1007      mpz_init_set (exps[count+1], expY);
     1008      count += 2;
     1009
    9881010      if (mpz_cmp (minExpY, expY) > 0)
    9891011        mpz_set (minExpY, expY);
     
    9931015  }
    9941016
    995   if (mpz_sgn (minExpX) < 0)
    996   {
    997     result *= power (x,-mpz_get_si(minExpX));
    998     result /= CanonicalForm (x, 0);
    999   }
    1000   else
    1001     result /= power (x,mpz_get_si(minExpX));
    1002 
    1003   if (mpz_sgn (minExpY) < 0)
    1004   {
    1005     result *= power (y,-mpz_get_si(minExpY));
    1006     result /= CanonicalForm (y, 0);
    1007   }
    1008   else
    1009     result /= power (y,mpz_get_si(minExpY));
     1017  int mExpX= mpz_get_si (minExpX);
     1018  int mExpY= mpz_get_si (minExpY);
     1019  count= 0;
     1020  for (CFIterator i= F; i.hasTerms(); i++)
     1021  {
     1022    if (i.coeff().inCoeffDomain() && hasFirstAlgVar (i.coeff(), alpha))
     1023    {
     1024      result += i.coeff()*power (x, mpz_get_si (exps[count])-mExpX)*
     1025                power (y, mpz_get_si (exps[count+1])-mExpY);
     1026      count += 2;
     1027      continue;
     1028    }
     1029    for (CFIterator j= i.coeff(); j.hasTerms(); j++)
     1030    {
     1031      result += j.coeff()*power (x, mpz_get_si (exps[count])-mExpX)*
     1032                power (y, mpz_get_si (exps[count+1])-mExpY);
     1033      count += 2;
     1034    }
     1035  }
    10101036
    10111037  mpz_clear (expX);
     
    10141040  mpz_clear (minExpY);
    10151041  mpz_clear (tmp);
     1042
     1043  delete [] exps;
    10161044
    10171045  return result/Lc (result); //normalize
Note: See TracChangeset for help on using the changeset viewer.