Changeset 994445 in git


Ignore:
Timestamp:
May 3, 2007, 3:50:10 PM (16 years ago)
Author:
Oliver Wienand <wienand@…>
Branches:
(u'spielwiese', '828514cf6e480e4bafc26df99217bf2a1ed1ef45')
Children:
bf64c41bd9346d70ecaaab3ee59f58f5d9d766e8
Parents:
68f702755adfca2ca864e4c2c157ecd0db64cea8
Message:
Neuer Koeffizientenbereich Z/n
Neuer Makrodatentyp NATNUMBER = unsigned long
Bisschen aufgeraeumt


git-svn-id: file:///usr/local/Singular/svn/trunk@10015 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • kernel/Makefile.in

    r68f7027 r994445  
    100100    longalg.cc longrat.cc longrat0.cc \
    101101    maps.cc matpol.cc misc.cc gnumpfl.cc gnumpc.cc \
    102     rmodulo2m.cc \
     102    rmodulo2m.cc rmodulon.cc\
    103103    modulop.cc mpr_complex.cc sparsmat.cc fast_maps.cc \
    104104    fglmzero.cc fglmvec.cc fglmgauss.cc fglmhom.cc fglmcomb.cc \
     
    158158        ffields.h khstd.h sparsmat.h gnumpfl.h gnumpc.h \
    159159        fglm.h kstd1.h \
    160         rmodulo2m.h ratgring.h\
     160        rmodulo2m.h rmodulon.h ratgring.h\
    161161        modulop.h sing_dbm.h weight.h \
    162162        fglmgauss.h fglmvec.h \
  • kernel/kstd2.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: kstd2.cc,v 1.41 2007-03-29 11:41:11 Singular Exp $ */
     4/* $Id: kstd2.cc,v 1.42 2007-05-03 13:50:08 wienand Exp $ */
    55/*
    66*  ABSTRACT -  Kernel: alg. of Buchberger
     
    188188*/
    189189
    190 long factorial(long arg)
    191 {
    192    long tmp = 1; arg++;
     190NATNUMBER factorial(NATNUMBER arg)
     191{
     192   NATNUMBER tmp = 1; arg++;
    193193   for (int i = 2; i < arg; i++)
    194194   {
     
    206206  poly p = input_p;
    207207  poly zeroPoly = NULL;
    208   long a = (long) pGetCoeff(p);
     208  NATNUMBER a = (NATNUMBER) pGetCoeff(p);
    209209
    210210  int k_ind2 = 0;
    211211  int a_ind2 = ind2(a);
    212212
    213   long k = 1;
     213  NATNUMBER k = 1;
    214214  // of interest is only k_ind2, special routine for improvement ... TODO OLIVER
    215215  for (int i = 1; i <= leadRing->N; i++)
     
    218218  }
    219219
    220   a = (long) pGetCoeff(p);
     220  a = (NATNUMBER) pGetCoeff(p);
    221221
    222222  number tmp1;
     
    241241      }
    242242      p_SetExp(lead_mult, i, p_GetExp(p, i,leadRing) - s_exp, tailRing);
    243       for (long j = 1; j <= s_exp; j++)
     243      for (NATNUMBER j = 1; j <= s_exp; j++)
    244244      {
    245245        tmp1 = nInit(j);
     
    270270    return tmp2;
    271271  }
    272 /*  long alpha_k = twoPow(leadRing->ch - k_ind2);
     272/*  NATNUMBER alpha_k = twoPow(leadRing->ch - k_ind2);
    273273  if (1 == 0 && alpha_k <= a)
    274274  {  // Temporarly disabled, reducing coefficients not compatible with std TODO Oliver
     
    276276    for (int i = 1; i <= leadRing->N; i++)
    277277    {
    278       for (long j = 1; j <= p_GetExp(p, i, leadRing); j++)
     278      for (NATNUMBER j = 1; j <= p_GetExp(p, i, leadRing); j++)
    279279      {
    280280        tmp1 = nInit(j);
     
    288288        else
    289289        {
    290           tmp3 = p_ISet((long) tmp1, tailRing);
     290          tmp3 = p_ISet((NATNUMBER) tmp1, tailRing);
    291291          zeroPoly = p_Mult_q(zeroPoly, p_Add_q(tmp2, tmp3, tailRing), tailRing);
    292292        }
    293293      }
    294294    }
    295     tmp2 = p_ISet((long) pGetCoeff(zeroPoly), leadRing);
     295    tmp2 = p_ISet((NATNUMBER) pGetCoeff(zeroPoly), leadRing);
    296296    for (int i = 1; i <= leadRing->N; i++)
    297297    {
  • kernel/kutil.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: kutil.cc,v 1.50 2007-04-30 15:47:41 Singular Exp $ */
     4/* $Id: kutil.cc,v 1.51 2007-05-03 13:50:08 wienand Exp $ */
    55/*
    66* ABSTRACT: kernel: utils for kStd
     
    10251025/* TODO move to numbers.cc
    10261026 */
    1027 inline int nComp(long a, long b)
     1027inline int nComp(NATNUMBER a, NATNUMBER b)
    10281028{
    10291029  assume(a != 0 && b != 0);
     
    25022502void superenterpairs (poly h,int k,int ecart,int pos,kStrategy strat, int atR)
    25032503{
    2504   assume (currRing->cring == 1)
     2504    assume (currRing->cring == 1);
    25052505    // enter also zero divisor * poly, if this is non zero and of smaller degree
    25062506    enterExtendedSpoly(h, strat);
  • kernel/numbers.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR      *
    33*****************************************/
    4 /* $Id: numbers.cc,v 1.5 2007-01-29 16:58:32 Singular Exp $ */
     4/* $Id: numbers.cc,v 1.6 2007-05-03 13:50:09 wienand Exp $ */
    55
    66/*
     
    2525#ifdef HAVE_RING2TOM
    2626#include "rmodulo2m.h"
     27#endif
     28#ifdef HAVE_RINGMODN
     29#include "rmodulon.h"
    2730#endif
    2831
     
    117120  }
    118121#endif 
     122#ifdef HAVE_RINGMODN
     123  /*----------------------ring Z / n----------------*/
     124  else if (rField_is_Ring_ModN(r))
     125  {
     126    nrnSetExp(c, r);
     127  }
     128#endif
    119129  else if (rField_is_Zp(r))
    120130  /*----------------------char. p----------------*/
     
    313323#ifdef LDEBUG
    314324//     n->nDBTest=nr2mDBTest;
     325#endif
     326  }
     327#endif
     328#ifdef HAVE_RINGMODN
     329  /* -------------- Z/n ----------------------- */
     330  else if (rField_is_Ring_ModN(r))
     331  {
     332     nrnInitExp(c,r);
     333     n->nInit  = nrnInit;
     334     n->nCopy  = ndCopy;
     335     n->nInt   = nrnInt;
     336     n->nAdd   = nrnAdd;
     337     n->nSub   = nrnSub;
     338     n->nMult  = nrnMult;
     339     n->nDiv   = nrnDiv;
     340     n->nIntDiv       = nrnIntDiv;
     341     n->nExactDiv= nrnDiv;
     342     n->nNeg   = nrnNeg;
     343     n->nInvers= nrnInvers;
     344     n->nGreater = nrnGreater;
     345     n->nEqual = nrnEqual;
     346     n->nIsZero = nrnIsZero;
     347     n->nIsOne = nrnIsOne;
     348     n->nIsMOne = nrnIsMOne;
     349     n->nGreaterZero = nrnGreaterZero;
     350     n->nWrite = nrnWrite;
     351     n->nRead = nrnRead;
     352     n->nPower = nrnPower;
     353     n->cfSetMap = nrnSetMap;
     354     n->nNormalize = nDummy2;
     355     n->nLcm          = nrnLcm;
     356     n->nGcd          = nrnGcd;
     357//     n->nGetUnit = nrnGetUnit; //TODO OLIVER
     358     n->nName= ndName;
     359#ifdef LDEBUG
     360//     n->nDBTest=nrnDBTest;
    315361#endif
    316362  }
  • kernel/pDebug.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: pDebug.cc,v 1.4 2007-02-07 10:47:53 Singular Exp $
     9 *  Version: $Id: pDebug.cc,v 1.5 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111
     
    140140  }
    141141  while (i);
     142#ifdef HAVE_RINGMODN
     143  if (currRing->cring == 2)
     144  {
     145    WarnS("Not implemenet, 2007-05-03 12:22:46");
     146  }
     147#endif
    142148#ifdef HAVE_RING2TOM
    143149  if (r->cring == 1) {
  • kernel/pInline1.h

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: pInline1.h,v 1.9 2007-03-10 15:41:49 levandov Exp $
     9 *  Version: $Id: pInline1.h,v 1.10 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111#ifndef PINLINE1_H
     
    2020#include "structs.h"
    2121#include "numbers.h"
     22#ifdef HAVE_RINGMODN
     23#include "febase.h"
     24#endif
    2225
    2326#if PDEBUG > 0 || defined(NO_PINLINE1)
     
    401404  else
    402405#endif
     406#ifdef HAVE_RINGMODN
     407  if (r->cring == 2) {
     408    PrintS("Not yet implemented, 2007-05-03 11:53:12");
     409  }
     410  else
     411#endif
    403412  return TRUE;
    404413}
     
    451460    long lside = (long) p_GetCoeff(a, r_a);
    452461    long rside = (long) p_GetCoeff(b, r_b);
    453     // Später durch bitvergleiche viel schneller TODO OLIVER
    454462    while (lside%2 == 0 && rside%2 == 0) {
    455463      lside = lside / 2;
     
    457465    }
    458466    return (lside%2 != 0);
     467  }
     468  else
     469#endif
     470#ifdef HAVE_RINGMODN
     471  if (r_a->cring == 2 || r_b->cring == 2) {
     472    PrintS("Not yet implemented, 2007-05-02 11:56:44");
    459473  }
    460474  else
     
    531545    else
    532546#endif
     547#ifdef HAVE_RINGMODN
     548    if (r->cring == 2) {
     549      PrintS("Not yet implemented 2007-05-02 11:55:20");
     550      return FALSE;
     551    }
     552    else
     553#endif
    533554      return _p_LmDivisibleByNoComp(a,b,r);
    534555  return FALSE;
     
    545566    else
    546567#endif
     568#ifdef HAVE_RINGMODN
     569    if (r_a->cring == 2) {
     570      PrintS("Not yet implemented, 2007-05-03 11:59:20");
     571    }
     572    else
     573#endif
    547574      return _p_LmDivisibleBy(a, r_a, b, r_b);
    548575  }
  • kernel/p_Minus_mm_Mult_qq__T.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Minus_mm_Mult_qq__T.cc,v 1.4 2006-02-15 13:01:22 Singular Exp $
     9 *  Version: $Id: p_Minus_mm_Mult_qq__T.cc,v 1.5 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111
     
    6767  Equal:   // qm equals p
    6868  tb = n_Mult(pGetCoeff(q), tm, r);
    69 #ifdef HAVE_RING2TOM
     69#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    7070  if ((long) tb != 0) {
    7171#endif
     
    8686    p = p_LmFreeAndNext(p, r);
    8787  }
    88 #ifdef HAVE_RING2TOM
     88#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    8989  }
    9090#endif
     
    9797
    9898  Greater:
    99 #ifdef HAVE_RING2TOM
     99#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    100100  tb = n_Mult(pGetCoeff(q), tneg, r);
    101101  if ((long) tb != 0)
     
    104104  pSetCoeff0(qm, n_Mult(pGetCoeff(q), tneg, r));
    105105  a = pNext(a) = qm;       // append qm to result and advance q
    106 #ifdef HAVE_RING2TOM
     106#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    107107  }
    108108  else
  • kernel/p_Mult_mm__T.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Mult_mm__T.cc,v 1.4 2006-06-08 18:00:34 wienand Exp $
     9 *  Version: $Id: p_Mult_mm__T.cc,v 1.5 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111
     
    3535    pn = pGetCoeff(p);
    3636    number tmp = n_Mult(ln, pn, ri);
    37 #ifdef HAVE_RING2TOM
     37#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    3838    if (n_IsZero(tmp, ri))
    3939    {
     
    5858      p_MemAdd(p->exp, m_e, length);
    5959      p_MemAddAdjust(p, ri);
    60 #ifdef HAVE_RING2TOM
     60#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    6161      before = p;
    6262#endif
  • kernel/p_Mult_nn__T.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Mult_nn__T.cc,v 1.6 2006-06-07 18:44:24 wienand Exp $
     9 *  Version: $Id: p_Mult_nn__T.cc,v 1.7 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111
     
    2323
    2424  poly q = p;
    25 #ifdef HAVE_RING2TOM
     25#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    2626  poly old = NULL;
    2727#endif
    2828  while (p != NULL)
    2929  {
    30 #ifndef HAVE_RING2TOM
     30#if not(defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN))
    3131    number nc = pGetCoeff(p);
    3232    pSetCoeff0(p, n_Mult(n, nc, r));
     
    3535#else
    3636    number tmp = n_Mult(n, pGetCoeff(p), r);
    37     if (r->cring==0 || (r->cring ==1 && tmp != NULL))
     37    if (r->cring==0 || (r->cring > 0 && tmp != NULL))
    3838    {
    3939       p_SetCoeff(p, tmp, r);
  • kernel/p_Mult_q.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: p_Mult_q.cc,v 1.2 2006-01-13 18:10:05 wienand Exp $
     9 *  Version: $Id: p_Mult_q.cc,v 1.3 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111#include "mod2.h"
     
    165165
    166166  poly res = pp_Mult_mm(p,q,r);     // holds initially q1*p
    167 #ifdef HAVE_RING2TOM
     167#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    168168  if (res == NULL) {
    169169    res = p_ISet(1, r);
     
    180180  // now the main loop
    181181  Top:
    182 #ifdef HAVE_RING2TOM
     182#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    183183  if (qn == NULL && rn == NULL) goto Work;
    184184  if (qn == NULL) goto Greater;
     
    237237    p_Delete(&q, r);
    238238  }
    239 #ifdef HAVE_RING2TOM
     239#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    240240  if (n_IsZero(p_GetCoeff(res, r), r)) {
    241241    res = p_LmDeleteAndNext(res, r);
  • kernel/polys.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: polys.cc,v 1.14 2007-04-26 09:22:34 wienand Exp $ */
     4/* $Id: polys.cc,v 1.15 2007-05-03 13:50:09 wienand Exp $ */
    55
    66/*
     
    141141  poly prev=NULL;
    142142  int i;
     143#ifdef HAVE_RINGMODN
     144  if (currRing->cring == 2)
     145  {
     146    WarnS("Not implemenet, 2007-05-03 12:22:46");
     147  }   
     148#endif
    143149#ifdef HAVE_RING2TOM
    144150  bool unit = true;
     
    715721  poly h;
    716722  number k, c;
     723#ifdef HAVE_RINGMODN
     724  if (currRing->cring == 2)
     725  {
     726    WarnS("Not implemenet, 2007-05-03 12:22:46");
     727  }   
     728#endif
    717729#ifdef HAVE_RING2TOM
    718730  if (currRing->cring != 0)
     
    738750    }
    739751  }
     752  else
    740753#endif
    741754  if (p1!=NULL)
  • kernel/polys1.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: polys1.cc,v 1.25 2007-04-03 15:16:39 Singular Exp $ */
     4/* $Id: polys1.cc,v 1.26 2007-05-03 13:50:09 wienand Exp $ */
    55
    66/*
     
    477477void pContent(poly ph)
    478478{
    479 #ifdef HAVE_RING2TOM
    480   if (currRing->cring != 0) {
     479#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     480  if (currRing->cring > 0) {
    481481    if (ph!=NULL)
    482482    {
     
    938938  poly p;
    939939
    940 #ifdef HAVE_RING2TOM
    941   if (currRing->cring == 1)
     940#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     941  if (currRing->cring > 0)
    942942  {
    943943    pContent(ph);
  • kernel/pp_Mult_mm__T.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: pp_Mult_mm__T.cc,v 1.3 2006-02-15 12:59:30 Singular Exp $
     9 *  Version: $Id: pp_Mult_mm__T.cc,v 1.4 2007-05-03 13:50:09 wienand Exp $
    1010 *******************************************************************/
    1111
     
    3838  {
    3939    tmp = n_Mult(ln, pGetCoeff(p), ri);
    40 #ifdef HAVE_RING2TOM
    41     if (ri->cring==0 || (ri->cring ==1 && (long) tmp != 0))
     40#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     41    if (! n_IsZero(tmp, ri))
    4242    {
    4343#endif
     
    4747      p_MemSum(q->exp, p->exp, m_e, length);
    4848      p_MemAddAdjust(q, ri);
    49 #ifdef HAVE_RING2TOM
     49#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    5050    }
    5151#endif
  • kernel/pp_Mult_nn__T.cc

    r68f7027 r994445  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 8/00
    9  *  Version: $Id: pp_Mult_nn__T.cc,v 1.3 2006-01-16 14:02:52 Singular Exp $
     9 *  Version: $Id: pp_Mult_nn__T.cc,v 1.4 2007-05-03 13:50:10 wienand Exp $
    1010 *******************************************************************/
    1111
     
    2828  do
    2929  {
    30 #ifndef HAVE_RING2TOM
     30#if not(defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN))
    3131    p_AllocBin(pNext(q), bin, r);
    3232    q = pNext(q);
  • kernel/ring.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ring.cc,v 1.56 2007-01-31 23:51:24 motsak Exp $ */
     4/* $Id: ring.cc,v 1.57 2007-05-03 13:50:10 wienand Exp $ */
    55
    66/*
     
    27352735
    27362736  // set intStrategy
    2737 #ifdef HAVE_RING2TOM
    2738   if (rField_is_Extension(r) || rField_is_Q(r) || rField_is_Ring_2toM(r))
     2737#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     2738  if (rField_is_Extension(r) || rField_is_Q(r) || r->cring > 0)
    27392739#else
    27402740  if (rField_is_Extension(r) || rField_is_Q(r))
  • kernel/ring.h

    r68f7027 r994445  
    77* ABSTRACT - the interpreter related ring operations
    88*/
    9 /* $Id: ring.h,v 1.17 2007-01-31 23:51:25 motsak Exp $ */
     9/* $Id: ring.h,v 1.18 2007-05-03 13:50:10 wienand Exp $ */
    1010
    1111/* includes */
     
    9292inline BOOLEAN rField_is_Ring_2toM(ring r=currRing)
    9393{ return (r->cring == 1); }
    94 
     94#endif
     95
     96#ifdef HAVE_RINGMODN
     97inline BOOLEAN rField_is_Ring_ModN(ring r=currRing)
     98{ return (r->cring == 2); }
     99#endif
     100
     101#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    95102inline BOOLEAN rField_is_Zp(ring r=currRing)
    96103{ return (r->cring == 0) && (r->ch > 1) && (r->parameter==NULL); }
     
    192199inline BOOLEAN rField_has_simple_inverse(ring r=currRing)
    193200/* { return (r->ch>1) || (r->ch== -1); } *//* Z/p, GF(p,n), R, long_R, long_C*/
    194 #ifdef HAVE_RING2TOM
    195 { return (r->cring==1) || (r->ch>1) || ((r->ch== -1) && (r->float_len < 10)); } /* Z/2^n, Z/p, GF(p,n), R, long_R, long_C*/
     201#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     202{ return (r->cring > 0) || (r->ch>1) || ((r->ch== -1) && (r->float_len < 10)); } /* Z/2^n, Z/p, GF(p,n), R, long_R, long_C*/
    196203#else
    197204{ return (r->ch>1) || ((r->ch== -1) && (r->float_len < 10)); } /* Z/p, GF(p,n), R, long_R, long_C*/
     
    199206
    200207inline BOOLEAN rField_has_simple_Alloc(ring r=currRing)
    201 #ifdef HAVE_RING2TOM
    202 { return (rField_is_Ring_2toM(r) || rField_is_Zp(r) || rField_is_GF(r) || rField_is_R(r)); }
     208#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
     209{ return (r->cring > 0 || rField_is_Zp(r) || rField_is_GF(r) || rField_is_R(r)); }
    203210#else
    204211{ return (rField_is_Zp(r) || rField_is_GF(r) || rField_is_R(r)); }
  • kernel/rmodulo2m.cc

    r68f7027 r994445  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: rmodulo2m.cc,v 1.6 2006-12-06 17:43:32 Singular Exp $ */
     4/* $Id: rmodulo2m.cc,v 1.7 2007-05-03 13:50:10 wienand Exp $ */
    55/*
    66* ABSTRACT: numbers modulo 2^m
     
    2121#ifdef HAVE_RING2TOM
    2222int nr2mExp;
    23 long nr2mModul;
     23NATNUMBER nr2mModul;
    2424
    2525/*
     
    2828number nr2mMult (number a,number b)
    2929{
    30   if (((long)a == 0) || ((long)b == 0))
     30  if (((NATNUMBER)a == 0) || ((NATNUMBER)b == 0))
    3131    return (number)0;
    3232  else
     
    3939number nr2mLcm (number a,number b,ring r)
    4040{
    41   long res = 0;
    42   if ((long) a == 0) a = (number) 1;
    43   if ((long) b == 0) b = (number) 1;
    44   while ((long) a % 2 == 0)
    45   {
    46     a = (number) ((long) a / 2);
    47     if ((long) b % 2 == 0) b = (number) ((long) b / 2);
     41  NATNUMBER res = 0;
     42  if ((NATNUMBER) a == 0) a = (number) 1;
     43  if ((NATNUMBER) b == 0) b = (number) 1;
     44  while ((NATNUMBER) a % 2 == 0)
     45  {
     46    a = (number) ((NATNUMBER) a / 2);
     47    if ((NATNUMBER) b % 2 == 0) b = (number) ((NATNUMBER) b / 2);
    4848    res++;
    4949  }
    50   while ((long) b % 2 == 0)
    51   {
    52     b = (number) ((long) b / 2);
     50  while ((NATNUMBER) b % 2 == 0)
     51  {
     52    b = (number) ((NATNUMBER) b / 2);
    5353    res++;
    5454  }
     
    6262number nr2mGcd (number a,number b,ring r)
    6363{
    64   long res = 0;
    65   if ((long) a == 0 && (long) b == 0) return (number) 1;
    66   while ((long) a % 2 == 0 && (long) b % 2 == 0)
    67   {
    68     a = (number) ((long) a / 2);
    69     b = (number) ((long) b / 2);
     64  NATNUMBER res = 0;
     65  if ((NATNUMBER) a == 0 && (NATNUMBER) b == 0) return (number) 1;
     66  while ((NATNUMBER) a % 2 == 0 && (NATNUMBER) b % 2 == 0)
     67  {
     68    a = (number) ((NATNUMBER) a / 2);
     69    b = (number) ((NATNUMBER) b / 2);
    7070    res++;
    7171  }
    72   if ((long) b % 2 == 0)
    73   {
    74     return (number) ((1L << res));// * (long) a);  // (2**res)*a    a ist Einheit
    75   }
    76   else
    77   {
    78     return (number) ((1L << res));// * (long) b);  // (2**res)*b    b ist Einheit
     72  if ((NATNUMBER) b % 2 == 0)
     73  {
     74    return (number) ((1L << res));// * (NATNUMBER) a);  // (2**res)*a    a ist Einheit
     75  }
     76  else
     77  {
     78    return (number) ((1L << res));// * (NATNUMBER) b);  // (2**res)*b    b ist Einheit
    7979  }
    8080}
     
    8585  {
    8686    //npInit(1,result);
    87     *(long *)result = 1;
     87    *(NATNUMBER *)result = 1;
    8888  }
    8989  else if (i==1)
     
    103103number nr2mInit (int i)
    104104{
    105   long ii = i;
     105  NATNUMBER ii = i;
    106106  while (ii < 0) ii += nr2mModul;
    107107  while ((ii>1) && (ii >= nr2mModul)) ii -= nr2mModul;
     
    114114int nr2mInt(number &n)
    115115{
    116   if ((long)n > (nr2mModul >>1)) return (int)((long)n - nr2mModul);
    117   else return (int)((long)n);
     116  if ((NATNUMBER)n > (nr2mModul >>1)) return (int)((NATNUMBER)n - nr2mModul);
     117  else return (int)((NATNUMBER)n);
    118118}
    119119
     
    130130BOOLEAN nr2mIsZero (number  a)
    131131{
    132   return 0 == (long)a;
     132  return 0 == (NATNUMBER)a;
    133133}
    134134
    135135BOOLEAN nr2mIsOne (number a)
    136136{
    137   return 1 == (long)a;
     137  return 1 == (NATNUMBER)a;
    138138}
    139139
    140140BOOLEAN nr2mIsMOne (number a)
    141141{
    142   return nr2mModul == (long)a + 1;
     142  return nr2mModul == (NATNUMBER)a + 1;
    143143}
    144144
     
    150150BOOLEAN nr2mGreater (number a,number b)
    151151{
    152   if ((long) a == 0) return TRUE;
    153   if ((long) b == 0) return FALSE;
    154   while ((long) a % 2 == 0 && (long) b % 2 == 0)
    155   {
    156     a = (number) ((long) a / 2);
    157     b = (number) ((long) b / 2);
    158 }
    159   return ((long) b % 2 == 1);
     152  if ((NATNUMBER) a == 0) return TRUE;
     153  if ((NATNUMBER) b == 0) return FALSE;
     154  while ((NATNUMBER) a % 2 == 0 && (NATNUMBER) b % 2 == 0)
     155  {
     156    a = (number) ((NATNUMBER) a / 2);
     157    b = (number) ((NATNUMBER) b / 2);
     158}
     159  return ((NATNUMBER) b % 2 == 1);
    160160}
    161161
    162162BOOLEAN nr2mGreaterZero (number k)
    163163{
    164   int h = (int)((long) k);
     164  int h = (int)((NATNUMBER) k);
    165165  return ((int)h !=0) && (h <= (nr2mModul>>1));
    166166}
     
    219219#endif
    220220
    221 long InvMod(long a)
     221NATNUMBER InvMod(NATNUMBER a)
    222222{
    223223   long d, s, t;
     
    235235{
    236236  // Table !!!
    237   long inv;
    238   inv = InvMod((long)c);
     237  NATNUMBER inv;
     238  inv = InvMod((NATNUMBER)c);
    239239  return (number) inv;
    240240}
     
    242242number nr2mDiv (number a,number b)
    243243{
    244   if ((long)a==0)
     244  if ((NATNUMBER)a==0)
    245245    return (number)0;
    246   else if ((long)b%2==0)
    247   {
    248     if ((long)b != 0)
     246  else if ((NATNUMBER)b%2==0)
     247  {
     248    if ((NATNUMBER)b != 0)
    249249    {
    250       while ((long) b%2 == 0 && (long) a%2 == 0)
     250      while ((NATNUMBER) b%2 == 0 && (NATNUMBER) a%2 == 0)
    251251      {
    252         a = (number) ((long) a / 2);
    253         b = (number) ((long) b / 2);
     252        a = (number) ((NATNUMBER) a / 2);
     253        b = (number) ((NATNUMBER) b / 2);
    254254      }
    255255    }
    256     if ((long) b%2 == 0)
     256    if ((NATNUMBER) b%2 == 0)
    257257    {
    258258      WerrorS("div by zero divisor");
     
    265265number nr2mIntDiv (number a,number b)
    266266{
    267   if ((long)a==0)
     267  if ((NATNUMBER)a==0)
    268268  {
    269269    return (number) 0;
     
    271271  else
    272272  {
    273     return (number) ((long) a / (long) b);
     273    return (number) ((NATNUMBER) a / (NATNUMBER) b);
    274274  }
    275275}
     
    277277number  nr2mInvers (number c)
    278278{
    279   if ((long)c%2==0)
     279  if ((NATNUMBER)c%2==0)
    280280  {
    281281    WerrorS("division by zero divisor");
     
    287287number nr2mNeg (number c)
    288288{
    289   if ((long)c==0) return c;
     289  if ((NATNUMBER)c==0) return c;
    290290  return nr2mNegM(c);
    291291}
     
    342342BOOLEAN nr2mDBTest (number a, char *f, int l)
    343343{
    344   if (((long)a<0) || ((long)a>nr2mModul))
     344  if (((NATNUMBER)a<0) || ((NATNUMBER)a>nr2mModul))
    345345  {
    346346    return FALSE;
     
    352352void nr2mWrite (number &a)
    353353{
    354   if ((long)a > (nr2mModul >>1)) StringAppend("-%d",(int)(nr2mModul-((long)a)));
    355   else                          StringAppend("%d",(int)((long)a));
     354  if ((NATNUMBER)a > (nr2mModul >>1)) StringAppend("-%d",(int)(nr2mModul-((NATNUMBER)a)));
     355  else                          StringAppend("%d",(int)((NATNUMBER)a));
    356356}
    357357
  • kernel/rmodulo2m.h

    r68f7027 r994445  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: rmodulo2m.h,v 1.3 2006-12-06 17:43:32 Singular Exp $ */
     6/* $Id: rmodulo2m.h,v 1.4 2007-05-03 13:50:10 wienand Exp $ */
    77/*
    88* ABSTRACT: numbers modulo 2^m
     
    1212
    1313extern int nr2mExp;
    14 extern long nr2mModul;
     14extern NATNUMBER nr2mModul;
    1515
    1616BOOLEAN nr2mGreaterZero (number k);
     
    4646{
    4747  return (number)
    48     ((((unsigned long) a)*((unsigned long) b)) % ((unsigned long) nr2mModul));
     48    ((((NATNUMBER) a)*((NATNUMBER) b)) % ((NATNUMBER) nr2mModul));
    4949}
    5050
    5151static inline number nr2mAddM(number a, number b)
    5252{
    53   long r = (long)a + (long)b;
     53  NATNUMBER r = (NATNUMBER)a + (NATNUMBER)b;
    5454  return (number) (r >= nr2mModul ? r - nr2mModul : r);
    5555}
     
    5757static inline number nr2mSubM(number a, number b)
    5858{
    59   return (number)((long)a<(long)b ?
    60                        nr2mModul-(long)b+(long)a : (long)a-(long)b);
     59  return (number)((NATNUMBER)a<(NATNUMBER)b ?
     60                       nr2mModul-(NATNUMBER)b+(NATNUMBER)a : (NATNUMBER)a-(NATNUMBER)b);
    6161}
    6262
    63 #define nr2mNegM(A) (number)(nr2mModul-(long)(A))
     63#define nr2mNegM(A) (number)(nr2mModul-(NATNUMBER)(A))
    6464#define nr2mEqualM(A,B)  ((A)==(B))
    6565
  • kernel/structs.h

    r68f7027 r994445  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: structs.h,v 1.34 2007-04-18 16:15:58 Singular Exp $ */
     6/* $Id: structs.h,v 1.35 2007-05-03 13:50:10 wienand Exp $ */
    77/*
    88* ABSTRACT
     
    1010
    1111#include <string.h> /* for memset */
     12
     13#ifndef NATNUMBER
     14#define NATNUMBER unsigned long
     15#endif
    1216
    1317/* standard types */
     
    532536  struct omBin_s*   PolyBin; /* Bin from where monoms are allocated */
    533537  int        ch;     /* characteristic */
    534 #ifdef HAVE_RING2TOM
     538#if defined(HAVE_RING2TOM)|| defined(HAVE_RINGMODN)
    535539  int        cring;  /* cring = 0 => coefficient field, cring = 1 => coeffs from Z/2^m */
    536540#endif
Note: See TracChangeset for help on using the changeset viewer.