Changeset 3e0c11d in git for factory


Ignore:
Timestamp:
Jul 19, 2013, 5:27:11 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
cd7ce9b4263a5891ddea76b64838ca31a35e2559
Parents:
f377d6d17c096643dc3242eba4b6200ae3630eb3
git-author:
Martin Lee <martinlee84@web.de>2013-07-19 17:27:11+02:00
git-committer:
Martin Lee <martinlee84@web.de>2013-07-22 15:49:54+02:00
Message:
chg: order of multiplicands if their sizes differ
chg: cut off for Karatsuba
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facMul.cc

    rf377d6 r3e0c11d  
    21302130  CanonicalForm F= mod (A, M);
    21312131  CanonicalForm G= mod (B, M);
    2132   if (F.inCoeffDomain() || G.inCoeffDomain())
     2132  if (F.inCoeffDomain())
     2133    return G*F;
     2134  if (G.inCoeffDomain())
    21332135    return F*G;
     2136
    21342137  Variable y= M.mvar();
    21352138  int degF= degree (F, y);
     
    22232226  CanonicalForm F= mod (A, M);
    22242227  CanonicalForm G= mod (B, M);
    2225   if (F.inCoeffDomain() || G.inCoeffDomain())
     2228  if (F.inCoeffDomain())
     2229    return G*F;
     2230  if (G.inCoeffDomain())
    22262231    return F*G;
    22272232
    2228   if (size (F) / MOD.length() < 100 || size (G) / MOD.length() < 100)
    2229     return mod (F*G, MOD);
     2233  int sizeF= size (F);
     2234  int sizeG= size (G);
     2235
     2236  if (sizeF / MOD.length() < 100 || sizeG / MOD.length() < 100)
     2237  {
     2238    if (sizeF < sizeG)
     2239      return mod (G*F, MOD);
     2240    else
     2241      return mod (F*G, MOD);
     2242  }
    22302243
    22312244  Variable y= M.mvar();
     
    22872300  else
    22882301  {
    2289     m= (int) ceil (tmax (degF, degG)/2.0);
     2302    m= (int) ceil (tmin (degF, degG)/2.0);
    22902303    CanonicalForm yToM= power (y, m);
    22912304    CanonicalForm F0= mod (F, yToM);
Note: See TracChangeset for help on using the changeset viewer.