Changeset 42aa8b8 in git


Ignore:
Timestamp:
Jun 3, 2014, 6:28:02 PM (10 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'fc741b6502fd8a97288eaa3eba6e5220f3c3df87')
Children:
9e74d36ab6179b1687991fad57ad4613a9816f7cd7295ff2c24f0d2b03594917a387c981bd47eedd
Parents:
ee121df974c1705dca6d334a16b69f52ee5fc0d4
Message:
activate 64bit repr. for Q
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/ssiLink.cc

    ree121d r42aa8b8  
    6262// 7->8: qring
    6363
    64 // 64 bit version:
    65 #if SIZEOF_LONG == 8
    66 #define MAX_NUM_SIZE 60
    67 #define POW_2_28 (1L<<60)
    68 #define LONG long
    69 #else
    70 // 32 bit version:
    71 #define MAX_NUM_SIZE 28
    72 #define POW_2_28 (1L<<28)
    73 #define LONG int
    74 #endif
    75 
    7664#define SSI_BASE 16
    7765typedef struct
     
    10189{
    10290  //  if (currRing!=NULL)
    103   //  Print("need to change the ring, currRing:%s, switch to: ssiRing%d\n",IDID(currRingHdl,nr);
     91  //  Print("need to change the ring, currRing:%s, switch to: ssiRing%d\n",IDID(currRingHdl),nr);
    10492  //  else
    10593  //  Print("no ring, switch to ssiRing%d\n",nr);
     
    132120void ssiWriteBigInt(const ssiInfo *d, const number n)
    133121{
    134   // syntax is as follows:
    135   // case 2 Q:     3 4 <int>
    136   //        or     3 3 <mpz_t nominator>
    137   if(SR_HDL(n) & SR_INT)
    138   {
    139     fprintf(d->f_write,"4 %ld ",SR_TO_INT(n));
    140     //if (d->f_debug!=NULL) fprintf(d->f_debug,"bigint: short \"%ld\" ",SR_TO_INT(n));
    141   }
    142   else if (n->s==3)
    143   {
    144     fputs("3 ",d->f_write);
    145     mpz_out_str(d->f_write,10,n->z);
    146     fputc(' ',d->f_write);
    147     //gmp_fprintf(d->f_write,"3 %Zd ",n->z);
    148     //if (d->f_debug!=NULL) gmp_fprintf(d->f_debug,"bigint: gmp \"%Zd\" ",n->z);
    149   }
    150   else WerrorS("illiegal bigint");
     122 coeffs_BIGINT->cfWriteFd(n,d->f_write,coeffs_BIGINT);
    151123}
    152124
     
    161133  //        or     3 5 <mpz_t raw nom.> <mpz_t raw denom.>
    162134  //        or     3 6 <mpz_t raw nom.> <mpz_t raw denom.>
    163   //        or     3 7 <mpz_t raw nom.>
     135  //        or     3 8 <mpz_t raw nom.>
    164136  if (getCoeffType(cf)==n_transExt)
    165137  {
     
    414386}
    415387
    416 number ssiReadBigInt(const ssiInfo *d)
    417 {
    418   int sub_type=-1;
    419   sub_type=s_readint(d->f_read);
    420   switch(sub_type)
    421   {
    422    case 3:
    423      {// read int or mpz_t or mpz_t, mpz_t
    424        number n=nlRInit(0);
    425        s_readmpz(d->f_read,n->z);
    426        n->s=sub_type;
    427        return n;
    428      }
    429    case 4:
    430      {
    431        int dd;
    432        dd=s_readint(d->f_read);
    433        return INT_TO_SR(dd);
    434      }
    435    default:
    436        Werror("error in reading bigint: invalid subtype %d",sub_type);
    437        return NULL;
    438    }
    439 }
    440 
    441388number ssiReadNumber_CF(const ssiInfo *d, const coeffs cf)
    442389{
     
    461408  else Werror("coeffs not implemented in ssiReadNumber");
    462409  return NULL;
     410}
     411
     412number ssiReadBigInt(const ssiInfo *d)
     413{
     414  number n=ssiReadNumber_CF(d,coeffs_BIGINT);
     415  if ((SR_HDL(n) & SR_INT)==0)
     416  {
     417    if (n->s!=3) Werror("invalid sub type in bigint:%d",n->s);
     418  }
     419  return n;
    463420}
    464421
  • libpolys/coeffs/longrat.cc

    ree121d r42aa8b8  
    1717
    1818// 64 bit version:
    19 #if SIZEOF_LONG == 8
    20 //#if 0
     19//#if SIZEOF_LONG == 8
     20#if 0
    2121#define MAX_NUM_SIZE 60
    2222#define POW_2_28 (1L<<60)
     23#define POW_2_28_32 (1L<<28)
    2324#define LONG long
    2425#else
    2526#define MAX_NUM_SIZE 28
    2627#define POW_2_28 (1L<<28)
     28#define POW_2_28_32 (1L<<28)
    2729#define LONG int
    2830#endif
     
    802804    LONG bb=SR_TO_INT(b);
    803805    LONG c=SR_TO_INT(a) % bb;
    804     /*if(c < 0)
    805     {
    806         if(bb < 0)
    807             c = c - bb;
    808         else
    809             c = c + bb;
    810     }*/
    811     /*if((((SR_TO_INT(a)) / (bb))*bb+c) != SR_TO_INT(a))
    812     {
    813         printf("\nERROR longrat:819\n");
    814         printf("\na = %ld\n",SR_TO_INT(a));
    815         printf("\nb = %ld\n",bb);
    816         printf("\nc = %ld\n",c);
    817     }*/
    818806    return INT_TO_SR(c);
    819807  }
    820808  if (SR_HDL(a) & SR_INT)
    821809  {
    822     // a is a small and b is a large int: -> a
    823     //  INCORRECT, IT COULD HAPPEN THAT b IS A SMALL NUMBER
    824     number aa=ALLOC_RNUMBER();
    825     mpz_init(aa->z);
    826     mpz_set_si(aa->z, SR_TO_INT(a));
     810    mpz_t aa;
     811    mpz_init(aa);
     812    mpz_set_si(aa, SR_TO_INT(a));
    827813    u=ALLOC_RNUMBER();
    828814#if defined(LDEBUG)
     
    831817    u->s = 3;
    832818    mpz_init(u->z);
    833     mpz_mod(u->z,aa->z,b->z);
    834     if (mpz_isNeg(u->z))
    835     {
    836       if (mpz_isNeg(b->z))
    837         mpz_sub(u->z,aa->z,b->z);
    838       else
    839         mpz_add(u->z,aa->z,b->z);
    840     }
    841     /*mpz_t dummy;
    842     mpz_init(dummy);
    843     mpz_fdiv_q(dummy, aa->z, b->z);
    844     mpz_mul(dummy, dummy, b->z);
    845     mpz_add(dummy, dummy, u->z);
    846     if(mpz_cmp(dummy,aa->z) != 0)
    847     {
    848         printf("\nERROR longrat:911\n");
    849         printf("\na = ");n_Print(aa,r);
    850         gmp_printf("\ndummy = %Zd",dummy);
    851         mpz_clear(dummy);mpz_init(dummy);mpz_tdiv_q(dummy, a->z, b->z);
    852         gmp_printf("\na div b = %Zd\n u = ", dummy);
    853         n_Print(u,r);
    854     }
    855     mpz_clear(dummy);*/
    856     mpz_clear(aa->z);
    857     #if defined(LDEBUG)
    858     aa->debug=654324;
    859     #endif
    860     FREE_RNUMBER(aa);
     819    mpz_mod(u->z,aa,b->z);
     820    mpz_clear(aa);
    861821    u=nlShort3(u);
    862822    nlTest(u,r);
     
    876836  u->s = 3;
    877837  mpz_mod(u->z,a->z,b->z);
    878   if (mpz_isNeg(u->z))
    879   {
    880     if (mpz_isNeg(b->z))
    881       mpz_sub(u->z,u->z,b->z);
    882     else
    883       mpz_add(u->z,u->z,b->z);
    884   }
    885838  if (bb!=NULL)
    886839  {
     
    891844    FREE_RNUMBER(bb);
    892845  }
    893   /*mpz_t dummy;
    894   mpz_init(dummy);
    895     mpz_fdiv_q(dummy, a->z, b->z);
    896     mpz_mul(dummy, dummy, b->z);
    897     mpz_add(dummy, dummy, u->z);
    898     if(mpz_cmp(dummy,a->z) != 0)
    899     {
    900         printf("\nERROR longrat:911\n");
    901         printf("\na = ");n_Print(a,r);
    902         gmp_printf("\ndummy = %Zd",dummy);
    903         mpz_clear(dummy);mpz_init(dummy);mpz_tdiv_q(dummy, a->z, b->z);
    904         gmp_printf("\na div b = %Zd\n u = ", dummy);
    905         n_Print(u,r);
    906     }
    907     mpz_clear(dummy);*/
    908846  u=nlShort3(u);
    909847  nlTest(u,r);
     
    11081046  nlTest(a, r);
    11091047#endif
    1110   //if (SR_HDL(a) & SR_INT) return (a==INT_TO_SR(-1L));
    1111   //return FALSE;
    11121048  return  (a==INT_TO_SR(-1L));
    11131049}
     
    29242860    #else
    29252861    long nn=SR_TO_INT(n);
    2926     if ((nn<POW_2_28)&&(nn>= -POW_2_28))
    2927       fprintf(f,"4 %ld ",nn);
     2862    if ((nn<POW_2_28_32)&&(nn>= -POW_2_28_32))
     2863    {
     2864      int nnn=(int)nn;
     2865      fprintf(f,"4 %d ",nnn);
     2866    }
    29282867    else
    29292868    {
Note: See TracChangeset for help on using the changeset viewer.