Changeset b902246 in git for kernel/sca.cc


Ignore:
Timestamp:
Jul 26, 2008, 4:28:03 PM (16 years ago)
Author:
Motsak Oleksandr <motsak@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
1c33e0d283423761177537ad5b17ac6eeba9901d
Parents:
050191fa505b5f43867ff2f00f542f9dbbb6735a
Message:
*motsak: p_ISet -> p_One, sca: xor instead of +, NCMultiplier reuse etc


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

Legend:

Unmodified
Added
Removed
  • kernel/sca.cc

    r050191 rb902246  
    77 *  Author:  motsak (Oleksandr Motsak)
    88 *  Created: 2006/12/18
    9  *  Version: $Id: sca.cc,v 1.26 2008-07-04 16:17:16 motsak Exp $
     9 *  Version: $Id: sca.cc,v 1.27 2008-07-26 14:28:03 motsak Exp $
    1010 *******************************************************************/
    1111
     
    120120      const unsigned int iExpMM = p_GetExp(pMonomMM, j, rRing);
    121121
     122#ifdef PDEBUG
     123      assume( iExpM <= 1);
     124      assume( iExpMM <= 1);
     125#endif
     126
    122127      if( iExpMM != 0 )
    123128      {
     
    126131          return 0; // lm(pMonomM) * lm(pMonomMM) == 0
    127132        }
    128         tpower += cpower; // compute degree of (-1).
     133        tpower ^= cpower; // compute degree of (-1).
    129134      }
    130 
    131       cpower += iExpM;
    132     }
    133 
    134     if( (tpower&1) != 0 ) // degree is odd => negate coeff.
    135       return -1;
    136 
    137     return(1);
     135      cpower ^= iExpM;
     136    }
     137
     138#ifdef PDEBUG
     139    assume(tpower <= 1);
     140#endif
     141
     142    // 1 => -1  // degree is odd => negate coeff.
     143    // 0 =>  1
     144
     145    return(1 - (tpower << 1) );
    138146}
    139147
     
    162170      const unsigned int iExpM  = p_GetExp(pMonomM,  j, rRing);
    163171      const unsigned int iExpMM = p_GetExp(pMonomMM, j, rRing);
     172
     173#ifdef PDEBUG
     174      assume( iExpM <= 1);
     175      assume( iExpMM <= 1);
     176#endif
    164177
    165178      if( iExpMM != 0 )
     
    170183        }
    171184
    172         tpower += cpower; // compute degree of (-1).
     185        tpower ^= cpower; // compute degree of (-1).
    173186      }
    174187
    175       cpower += iExpM;
    176     }
    177 
     188      cpower ^= iExpM;
     189    }
     190
     191#ifdef PDEBUG
     192    assume(tpower <= 1);
     193#endif
     194   
    178195    p_ExpVectorAdd(pMonomM, pMonomMM, rRing); // "exponents" are additive!!!
    179196
    180197    number nCoeffM = p_GetCoeff(pMonomM, rRing); // no new copy! should be deleted!
    181198
    182     if( (tpower&1) != 0 ) // degree is odd => negate coeff.
     199    if( (tpower) != 0 ) // degree is odd => negate coeff.
    183200      nCoeffM = n_Neg(nCoeffM, rRing); // negate nCoeff (will destroy the original number)
    184201
     
    217234      const unsigned int iExpMM = p_GetExp(pMonomMM, j, rRing);
    218235      const unsigned int iExpM  = p_GetExp(pMonomM,  j, rRing);
     236
     237#ifdef PDEBUG
     238      assume( iExpM <= 1);
     239      assume( iExpMM <= 1);
     240#endif
    219241
    220242      if( iExpM != 0 )
     
    225247        }
    226248
    227         tpower += cpower; // compute degree of (-1).
     249        tpower ^= cpower; // compute degree of (-1).
    228250      }
    229251
    230       cpower += iExpMM;
    231     }
     252      cpower ^= iExpMM;
     253    }
     254
     255#ifdef PDEBUG
     256    assume(tpower <= 1);
     257#endif
    232258
    233259    p_ExpVectorAdd(pMonomM, pMonomMM, rRing); // "exponents" are additive!!!
     
    235261    number nCoeffM = p_GetCoeff(pMonomM, rRing); // no new copy! should be deleted!
    236262
    237     if( (tpower&1) != 0 ) // degree is odd => negate coeff.
     263    if( (tpower) != 0 ) // degree is odd => negate coeff.
    238264      nCoeffM = n_Neg(nCoeffM, rRing); // negate nCoeff (will destroy the original number), creates new number!
    239265
     
    274300      const unsigned int iExp2 = p_GetExp(pMonom2, j, rRing);
    275301
     302#ifdef PDEBUG
     303      assume( iExp1 <= 1);
     304      assume( iExp2 <= 1);
     305#endif
     306     
    276307      if( iExp2 != 0 )
    277308      {
     
    281312        }
    282313
    283         tpower += cpower; // compute degree of (-1).
     314        tpower ^= cpower; // compute degree of (-1).
    284315      }
    285316
    286       cpower += iExp1;
    287     }
    288 
     317      cpower ^= iExp1;
     318    }
     319
     320#ifdef PDEBUG
     321    assume(cpower <= 1);
     322#endif
     323   
    289324    poly pResult;
    290325    omTypeAllocBin(poly, pResult, rRing->PolyBin);
     
    300335    number nCoeff = n_Mult(nCoeff1, nCoeff2, rRing); // new number!
    301336
    302     if( (tpower&1) != 0 ) // degree is odd => negate coeff.
     337    if( (tpower) != 0 ) // degree is odd => negate coeff.
    303338      nCoeff = n_Neg(nCoeff, rRing); // negate nCoeff (will destroy the original number)
    304339
     
    332367
    333368    for( unsigned int j = iFirstAltVar; j < i ; j++ )
    334       cpower += p_GetExp(pMonom, j, rRing);
     369      cpower ^= p_GetExp(pMonom, j, rRing);
     370
     371#ifdef PDEBUG
     372    assume(cpower <= 1);
     373#endif
    335374
    336375    poly pResult = p_LmInit(pMonom, rRing);
     
    341380    number nCoeff = n_Copy(p_GetCoeff(pMonom, rRing), rRing); // new number!
    342381
    343     if( (cpower&1) != 0 ) // degree is odd => negate coeff.
     382    if( cpower != 0 ) // degree is odd => negate coeff.
    344383      nCoeff = n_Neg(nCoeff, rRing); // negate nCoeff (will destroy the original number)
    345384
     
    747786  poly pL = p_Lcm(p1, p2, si_max(lCompP1, lCompP2), r);       // pL = lcm( lm(p1), lm(p2) )
    748787
    749   poly m1 = p_ISet(1, r);
     788  poly m1 = p_One( r);
    750789  p_ExpVectorDiff(m1, pL, p1, r);                  // m1 = pL / lm(p1)
    751790
     
    757796
    758797
    759   poly m2 = p_ISet(1, r);
     798  poly m2 = p_One( r);
    760799  p_ExpVectorDiff (m2, pL, p2, r);                  // m2 = pL / lm(p2)
    761800
     
    14531492    if( (i < b) || (i > e) ) // otherwise it's ok since rG is an SCA!
    14541493  {
    1455     poly square = p_ISet(1, rG);
     1494    poly square = p_One( rG);
    14561495    p_SetExp(square, i, 2, rG); // square = var(i)^2.
    14571496    p_Setm(square, rG);
     
    15791618
    15801619
    1581   poly xi =  p_ISet(1, rRing);
     1620  poly xi =  p_One( rRing);
    15821621  p_SetExp(xi, i, 1, rRing);
    15831622  p_Setm(xi, rRing);
Note: See TracChangeset for help on using the changeset viewer.