Changeset 54bb6b in git


Ignore:
Timestamp:
Jul 3, 2018, 5:23:27 PM (5 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
Children:
acb07ec581d8593b7eb367dd1cbd785808f4ae86
Parents:
417a91a95b5bf03f8ca333971553909c72f2568f
Message:
opt: Z/n, Z: always !=NULL (except in Copy/Delete)
Location:
libpolys/coeffs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libpolys/coeffs/rintegers.cc

    r417a91a r54bb6b  
    135135static void nrzDelete(number *a, const coeffs)
    136136{
    137   if (*a == NULL) return;
    138   mpz_clear((mpz_ptr) *a);
    139   omFreeBin((ADDRESS) *a, gmp_nrz_bin);
    140   *a = NULL;
     137  if (*a != NULL)
     138  {
     139    mpz_clear((mpz_ptr) *a);
     140    omFreeBin((ADDRESS) *a, gmp_nrz_bin);
     141    *a = NULL;
     142  }
    141143}
    142144
     
    158160static int nrzSize(number a, const coeffs)
    159161{
    160   if (a == NULL) return 0;
    161   return (((mpz_ptr)a)->_mp_alloc);
     162  mpz_ptr p=(mpz_ptr)a;
     163  int s=p->_mp_alloc;
     164  if (s==1) s=(mpz_cmp_ui(p,0)!=0);
     165  return s;
     166
    162167}
    163168
     
    203208static BOOLEAN nrzIsOne (number a, const coeffs)
    204209{
    205   return (a!=NULL) && (0 == mpz_cmp_ui((mpz_ptr) a, 1));
     210  return (0 == mpz_cmp_ui((mpz_ptr) a, 1));
    206211}
    207212
    208213static BOOLEAN nrzIsMOne (number a, const coeffs)
    209214{
    210   return (a!=NULL) && (0 == mpz_cmp_si((mpz_ptr) a, -1));
     215  return (0 == mpz_cmp_si((mpz_ptr) a, -1));
    211216}
    212217
     
    303308  {
    304309    WerrorS("Non invertible element.");
    305     return (number)0; //TODO
     310    return (number)NULL;
    306311  }
    307312  return nrzCopy(c,r);
     
    685690static int nrzSize(number a, const coeffs)
    686691{
    687   if (a == NULL) return 0;
    688692  if (a==INT_TO_SR(0)) return 0;
    689693  if (n_Z_IS_SMALL(a)) return 1;
     
    717721#endif
    718722{
    719   if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) {
     723  if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b))
     724  {
    720725  //from longrat.cc
    721726    if (SR_TO_INT(a)==0)
     
    13151320static BOOLEAN nrzIsZero (number  a, const coeffs)
    13161321{
    1317   return (a==NULL) || (a==INT_TO_SR(0));
     1322  return (a==INT_TO_SR(0));
    13181323}
    13191324
     
    14831488  {
    14841489    WerrorS("Non invertible element.");
    1485     return (number)0; //TODO
     1490    return (number)NULL;
    14861491  }
    14871492  return c; // has to be 1 or -1....
  • libpolys/coeffs/rmodulon.cc

    r417a91a r54bb6b  
    164164static void nrnDelete(number *a, const coeffs)
    165165{
    166   if (*a == NULL) return;
    167   mpz_clear((mpz_ptr) *a);
    168   omFreeBin((void *) *a, gmp_nrz_bin);
    169   *a = NULL;
     166  if (*a != NULL)
     167  {
     168    mpz_clear((mpz_ptr) *a);
     169    omFreeBin((void *) *a, gmp_nrz_bin);
     170    *a = NULL;
     171  }
    170172}
    171173
    172174static int nrnSize(number a, const coeffs)
    173175{
    174   if (a == NULL) return 0;
    175176  mpz_ptr p=(mpz_ptr)a;
    176177  int s=p->_mp_alloc;
     178  if (s==1) s=(mpz_cmp_ui(p,0)!=0);
    177179  return s;
    178180}
     
    226228static BOOLEAN nrnIsZero(number a, const coeffs)
    227229{
    228 #ifdef LDEBUG
    229   if (a == NULL) return FALSE;
    230 #endif
    231230  return 0 == mpz_cmpabs_ui((mpz_ptr)a, 0);
    232231}
     
    251250 * Give the largest k, such that a = x * k, b = y * k has
    252251 * a solution.
     252 * a may be NULL, b not
    253253 */
    254254static number nrnGcd(number a, number b, const coeffs r)
    255255{
    256   if ((a == NULL) && (b == NULL)) return nrnInit(0,r);
    257256  mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin);
    258257  mpz_init_set(erg, r->modNumber);
    259258  if (a != NULL) mpz_gcd(erg, erg, (mpz_ptr)a);
    260   if (b != NULL) mpz_gcd(erg, erg, (mpz_ptr)b);
     259  mpz_gcd(erg, erg, (mpz_ptr)b);
    261260  if(mpz_cmp(erg,r->modNumber)==0)
    262261  {
     
    323322static BOOLEAN nrnIsOne(number a, const coeffs)
    324323{
    325 #ifdef LDEBUG
    326   if (a == NULL) return FALSE;
    327 #endif
    328324  return 0 == mpz_cmp_si((mpz_ptr)a, 1);
    329325}
     
    338334  if (mpz_divisible_p(r->modNumber, (mpz_ptr)k)) return nrnInit(1,r);
    339335
    340   mpz_ptr unit = (mpz_ptr)nrnGcd(k, 0, r);
     336  mpz_ptr unit = (mpz_ptr)nrnGcd(NULL, k, r);
    341337  mpz_tdiv_q(unit, (mpz_ptr)k, unit);
    342   mpz_ptr gcd = (mpz_ptr)nrnGcd((number)unit, 0, r);
     338  mpz_ptr gcd = (mpz_ptr)nrnGcd(NULL, (number)unit, r);
    343339  if (!nrnIsOne((number)gcd,r))
    344340  {
     
    347343    mpz_ptr tmp = (mpz_ptr) nrnMult((number) unit,(number) unit,r);
    348344    // gcd_new := gcd(tmp, 0)
    349     mpz_ptr gcd_new = (mpz_ptr) nrnGcd((number) tmp, 0, r);
     345    mpz_ptr gcd_new = (mpz_ptr) nrnGcd(NULL, (number) tmp, r);
    350346    while (!nrnEqual((number) gcd_new,(number) gcd,r))
    351347    {
     
    364360    mpz_add(unit, unit, tmp);
    365361    mpz_mod(unit, unit, r->modNumber);
    366     nrnDelete((number*) &gcd_new, NULL);
    367     nrnDelete((number*) &tmp, NULL);
    368   }
    369   nrnDelete((number*) &gcd, NULL);
     362    nrnDelete((number*) &gcd_new, r);
     363    nrnDelete((number*) &tmp, r);
     364  }
     365  nrnDelete((number*) &gcd, r);
    370366  return (number)unit;
    371367}
     
    473469static BOOLEAN nrnIsMOne(number a, const coeffs r)
    474470{
    475 #ifdef LDEBUG
    476   if (a == NULL) return FALSE;
    477 #endif
    478471  if((r->ch==2) && (nrnIsOne(a,r))) return FALSE;
    479472  mpz_t t; mpz_init_set(t, (mpz_ptr)a);
     
    511504  number tmp = nrnGcd(a, (number)r->modNumber, r);
    512505  bool res = nrnIsOne(tmp, r);
    513   nrnDelete(&tmp, NULL);
     506  nrnDelete(&tmp, r);
    514507  return res;
    515508}
     
    520513  mpz_init(tmp);
    521514  mpz_gcd(tmp, (mpz_ptr) k, r->modNumber);
    522   if (mpz_cmp_si(tmp, 1)==0) {
     515  if (mpz_cmp_si(tmp, 1)==0)
     516  {
    523517    mpz_set_ui(tmp, 0);
    524518    return (number) tmp;
     
    530524static BOOLEAN nrnDivBy(number a, number b, const coeffs r)
    531525{
    532   if (a == NULL)
    533     return mpz_divisible_p(r->modNumber, (mpz_ptr)b);
    534   else
    535   { /* b divides a iff b/gcd(a, b) is a unit in the given ring: */
    536     number n = nrnGcd(a, b, r);
    537     mpz_tdiv_q((mpz_ptr)n, (mpz_ptr)b, (mpz_ptr)n);
    538     bool result = nrnIsUnit(n, r);
    539     nrnDelete(&n, NULL);
    540     return result;
    541   }
     526  /* b divides a iff b/gcd(a, b) is a unit in the given ring: */
     527  number n = nrnGcd(a, b, r);
     528  mpz_tdiv_q((mpz_ptr)n, (mpz_ptr)b, (mpz_ptr)n);
     529  bool result = nrnIsUnit(n, r);
     530  nrnDelete(&n, NULL);
     531  return result;
    542532}
    543533
     
    559549    return erg;
    560550  }
    561   if (a == NULL) a = (number)r->modNumber;
    562551  mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin);
    563552  mpz_init(erg);
     
    574563    {
    575564      WerrorS("Division not possible, even by cancelling zero divisors.");
    576       WerrorS("Result is integer division without remainder.");
    577       mpz_tdiv_q(erg, (mpz_ptr) a, (mpz_ptr) b);
    578       nrnDelete((number*) &gcd, NULL);
    579       return (number)erg;
     565      nrnDelete((number*) &gcd, r);
     566      nrnDelete((number*) &erg, r);
     567      return (number)NULL;
    580568    }
    581569    // a / gcd(a,b) * [b / gcd (a,b)]^(-1)
     
    583571    mpz_divexact(erg, (mpz_ptr)a, gcd);
    584572    mpz_mul(erg, erg, tmp);
    585     nrnDelete((number*) &gcd, NULL);
    586     nrnDelete((number*) &tmp, NULL);
     573    nrnDelete((number*) &gcd, r);
     574    nrnDelete((number*) &tmp, r);
    587575    mpz_mod(erg, erg, r->modNumber);
    588576    return (number)erg;
     
    626614  mpz_ptr erg = (mpz_ptr)omAllocBin(gmp_nrz_bin);
    627615  mpz_init(erg);
    628   if (a == NULL) a = (number)r->modNumber;
    629616  mpz_tdiv_q(erg, (mpz_ptr)a, (mpz_ptr)b);
    630617  return (number)erg;
     
    838825      }
    839826      else
    840       if (nrnDivBy(NULL, (number) nrnMapModul,dst))
     827      if (mpz_divisible_p(dst->modNumber,nrnMapModul))
    841828      {
    842829        mpz_divexact(nrnMapCoef, dst->modNumber, nrnMapModul);
     
    901888BOOLEAN nrnDBTest (number a, const char *f, const int l, const coeffs r)
    902889{
    903   if (a==NULL) return TRUE;
    904890  if ( (mpz_sgn1((mpz_ptr) a) < 0) || (mpz_cmp((mpz_ptr) a, r->modNumber) > 0) )
    905891  {
Note: See TracChangeset for help on using the changeset viewer.