[BACK]Return to int.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2018 / builtin

Diff for /OpenXM_contrib2/asir2018/builtin/int.c between version 1.2 and 1.5

version 1.2, 2018/09/21 07:06:51 version 1.5, 2018/10/01 05:49:06
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2018/builtin/int.c,v 1.1 2018/09/19 05:45:06 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2018/builtin/int.c,v 1.4 2018/09/28 08:20:27 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 69  void Pigcdbin(), Pigcdbmod(), PigcdEuc(), Pigcdacc(), 
Line 69  void Pigcdbin(), Pigcdbmod(), PigcdEuc(), Pigcdacc(), 
 void Pihex();  void Pihex();
 void Pimaxrsh(), Pilen();  void Pimaxrsh(), Pilen();
 void Ptype_t_NB();  void Ptype_t_NB();
   void Plprime64();
   
 struct ftab int_tab[] = {  struct ftab int_tab[] = {
   {"dp_set_mpi",Pdp_set_mpi,-1},    {"dp_set_mpi",Pdp_set_mpi,-1},
Line 93  struct ftab int_tab[] = {
Line 94  struct ftab int_tab[] = {
   {"fac",Pfac,1},    {"fac",Pfac,1},
   {"prime",Pprime,1},    {"prime",Pprime,1},
   {"lprime",Plprime,1},    {"lprime",Plprime,1},
   #if SIZEOF_LONG==8
     {"lprime64",Plprime64,1},
   #endif
   {"random",Prandom,-1},    {"random",Prandom,-1},
   {"lrandom",Plrandom,1},    {"lrandom",Plrandom,1},
   {"iand",Piand,2},    {"iand",Piand,2},
Line 133  void Pntoint32(NODE arg,USINT *rp)
Line 137  void Pntoint32(NODE arg,USINT *rp)
   if ( !INT(q) || !smallz(q) )    if ( !INT(q) || !smallz(q) )
     error("ntoint32 : invalid argument");      error("ntoint32 : invalid argument");
   absz(q,&z);    absz(q,&z);
   t = QTOS(z);    t = ZTOS(z);
   if ( sgnz(q) < 0 )    if ( sgnz(q) < 0 )
     t = -(int)t;      t = -(int)t;
   MKUSINT(*rp,t);    MKUSINT(*rp,t);
Line 145  void Pint32ton(NODE arg,Z *rp)
Line 149  void Pint32ton(NODE arg,Z *rp)
   
   asir_assert(ARG0(arg),O_USINT,"int32ton");    asir_assert(ARG0(arg),O_USINT,"int32ton");
   t = (int)BDY((USINT)ARG0(arg));    t = (int)BDY((USINT)ARG0(arg));
   STOQ(t,*rp);    STOZ(t,*rp);
 }  }
   
 void Pdp_set_mpi(NODE arg,Z *rp)  void Pdp_set_mpi(NODE arg,Z *rp)
 {  {
   if ( arg ) {    if ( arg ) {
     asir_assert(ARG0(arg),O_N,"dp_set_mpi");      asir_assert(ARG0(arg),O_N,"dp_set_mpi");
     mpi_mag = QTOS((Q)ARG0(arg));      mpi_mag = ZTOS((Q)ARG0(arg));
   }    }
   STOQ(mpi_mag,*rp);    STOZ(mpi_mag,*rp);
 }  }
   
 void Psmall_jacobi(NODE arg,Z *rp)  void Psmall_jacobi(NODE arg,Z *rp)
Line 172  void Psmall_jacobi(NODE arg,Z *rp)
Line 176  void Psmall_jacobi(NODE arg,Z *rp)
     || !smallz(m) || !smallz(a) || sgnz(m) < 0 || evenz(m) )      || !smallz(m) || !smallz(a) || sgnz(m) < 0 || evenz(m) )
     error("small_jacobi : invalid input");      error("small_jacobi : invalid input");
   else {    else {
     a0 = QTOS(a); m0 = QTOS(m);      a0 = ZTOS(a); m0 = ZTOS(m);
     s = small_jacobi(a0,m0);      s = small_jacobi(a0,m0);
     STOQ(s,*rp);      STOZ(s,*rp);
   }    }
 }  }
   
Line 206  int small_jacobi(int a,int m)
Line 210  int small_jacobi(int a,int m)
   
 void Ptype_t_NB(NODE arg,Z *rp)  void Ptype_t_NB(NODE arg,Z *rp)
 {  {
   if ( TypeT_NB_check(QTOS((Q)ARG0(arg)),QTOS((Q)ARG1(arg))))    if ( TypeT_NB_check(ZTOS((Q)ARG0(arg)),ZTOS((Q)ARG1(arg))))
     *rp = ONE;      *rp = ONE;
   else    else
     *rp = 0;      *rp = 0;
Line 280  void Pmt_save(NODE arg,Z *rp)
Line 284  void Pmt_save(NODE arg,Z *rp)
   int ret;    int ret;
   
   ret = mt_save(BDY((STRING)ARG0(arg)));    ret = mt_save(BDY((STRING)ARG0(arg)));
   STOQ(ret,*rp);    STOZ(ret,*rp);
 }  }
   
 void Pmt_load(NODE arg,Z *rp)  void Pmt_load(NODE arg,Z *rp)
Line 288  void Pmt_load(NODE arg,Z *rp)
Line 292  void Pmt_load(NODE arg,Z *rp)
   int ret;    int ret;
   
   ret = mt_load(BDY((STRING)ARG0(arg)));    ret = mt_load(BDY((STRING)ARG0(arg)));
   STOQ(ret,*rp);    STOZ(ret,*rp);
 }  }
   
 void isqrt(Z a,Z *r);  void isqrt(Z a,Z *r);
Line 365  void Piqr(NODE arg,LIST *rp)
Line 369  void Piqr(NODE arg,LIST *rp)
 void Pinttorat(NODE arg,LIST *rp)  void Pinttorat(NODE arg,LIST *rp)
 {  {
   int ret;    int ret;
   Z c,m,b,nm,dn;    Z c,m,t,b,nm,dn;
   NODE node;    NODE node;
   
   asir_assert(ARG0(arg),O_N,"inttorat");    asir_assert(ARG0(arg),O_N,"inttorat");
   asir_assert(ARG1(arg),O_N,"inttorat");    asir_assert(ARG1(arg),O_N,"inttorat");
   asir_assert(ARG2(arg),O_N,"inttorat");    asir_assert(ARG2(arg),O_N,"inttorat");
   c = (Z)ARG0(arg); m = (Z)ARG1(arg); b = (Z)ARG2(arg);    c = (Z)ARG0(arg); m = (Z)ARG1(arg); b = (Z)ARG2(arg);
     remz(c,m,&t); c = t;
   ret = inttorat(c,m,b,&nm,&dn);    ret = inttorat(c,m,b,&nm,&dn);
   if ( !ret )    if ( !ret )
     *rp = 0;      *rp = 0;
Line 513  void Pishift(NODE arg,Z *rp)
Line 518  void Pishift(NODE arg,Z *rp)
   s = (Z)ARG1(arg);    s = (Z)ARG1(arg);
   asir_assert(n1,O_N,"ixor");    asir_assert(n1,O_N,"ixor");
   asir_assert(s,O_N,"ixor");    asir_assert(s,O_N,"ixor");
   bshiftz(n1,QTOS(s),rp);    bshiftz(n1,ZTOS(s),rp);
 }  }
   
 void isqrt(Z a,Z *r)  void isqrt(Z a,Z *r)
Line 600  void Pinv(NODE arg,Num *rp)
Line 605  void Pinv(NODE arg,Num *rp)
         invz((Z)n,mod,(Z *)rp);          invz((Z)n,mod,(Z *)rp);
         break;          break;
       case N_M:        case N_M:
         inv = invm(CONT((MQ)n),QTOS(mod));          inv = invm(CONT((MQ)n),ZTOS(mod));
         STOMQ(inv,r);          STOMQ(inv,r);
         *rp = (Num)r;          *rp = (Num)r;
         break;          break;
Line 612  void Pinv(NODE arg,Num *rp)
Line 617  void Pinv(NODE arg,Num *rp)
 void Pfac(NODE arg,Z *rp)  void Pfac(NODE arg,Z *rp)
 {  {
   asir_assert(ARG0(arg),O_N,"fac");    asir_assert(ARG0(arg),O_N,"fac");
   factorialz(QTOS((Q)ARG0(arg)),rp);    factorialz(ZTOS((Q)ARG0(arg)),rp);
 }  }
   
 void Plrandom(NODE arg,Z *rp)  void Plrandom(NODE arg,Z *rp)
 {  {
   asir_assert(ARG0(arg),O_N,"lrandom");    asir_assert(ARG0(arg),O_N,"lrandom");
   randomz(QTOS((Q)ARG0(arg)),rp);    randomz(ZTOS((Q)ARG0(arg)),rp);
 }  }
   
 void Prandom(NODE arg,Z *rp)  void Prandom(NODE arg,Z *rp)
Line 630  void Prandom(NODE arg,Z *rp)
Line 635  void Prandom(NODE arg,Z *rp)
   r = mrand48()&BMASK;    r = mrand48()&BMASK;
 #else  #else
   if ( arg )    if ( arg )
     srandom(QTOS((Q)ARG0(arg)));      srandom(ZTOS((Q)ARG0(arg)));
   r = random()&BMASK;    r = random()&BMASK;
 #endif  #endif
 #endif  #endif
   if ( arg )    if ( arg )
     mt_sgenrand(QTOS((Q)ARG0(arg)));      mt_sgenrand(ZTOS((Q)ARG0(arg)));
   r = mt_genrand();    r = mt_genrand();
   UTOQ(r,*rp);    UTOZ(r,*rp);
 }  }
   
 #if defined(VISUAL) || defined(__MINGW32__)  #if defined(VISUAL) || defined(__MINGW32__)
Line 665  void Pprime(NODE arg,Z *rp)
Line 670  void Pprime(NODE arg,Z *rp)
   int i;    int i;
   
   asir_assert(ARG0(arg),O_N,"prime");    asir_assert(ARG0(arg),O_N,"prime");
   i = QTOS((Q)ARG0(arg));    i = ZTOS((Q)ARG0(arg));
   if ( i < 0 || i >= 1900 )    if ( i < 0 || i >= 1900 )
     *rp = 0;      *rp = 0;
   else    else
     STOQ(sprime[i],*rp);      STOZ(sprime[i],*rp);
 }  }
   
 void Plprime(NODE arg,Z *rp)  void Plprime(NODE arg,Z *rp)
Line 677  void Plprime(NODE arg,Z *rp)
Line 682  void Plprime(NODE arg,Z *rp)
   int i,p;    int i,p;
   
   asir_assert(ARG0(arg),O_N,"lprime");    asir_assert(ARG0(arg),O_N,"lprime");
   i = QTOS((Q)ARG0(arg));    i = ZTOS((Q)ARG0(arg));
   if ( i < 0 )    if ( i < 0 )
     *rp = 0;      *rp = 0;
   else    else
     p = get_lprime(i);      p = get_lprime(i);
   STOQ(p,*rp);    STOZ(p,*rp);
 }  }
   
   #if SIZEOF_LONG==8
   void Plprime64(NODE arg,Z *rp)
   {
     int i;
     mp_limb_t p;
   
     asir_assert(ARG0(arg),O_N,"lprime64");
     i = ZTOS((Q)ARG0(arg));
     if ( i < 0 )
       *rp = 0;
     else
       p = get_lprime64(i);
     STOZ(p,*rp);
   }
   #endif
   
 extern int up_kara_mag, up_tkara_mag, up_fft_mag;  extern int up_kara_mag, up_tkara_mag, up_fft_mag;
   
 void Pset_upfft(NODE arg,Z *rp)  void Pset_upfft(NODE arg,Z *rp)
 {  {
   if ( arg ) {    if ( arg ) {
     asir_assert(ARG0(arg),O_N,"set_upfft");      asir_assert(ARG0(arg),O_N,"set_upfft");
     up_fft_mag = QTOS((Q)ARG0(arg));      up_fft_mag = ZTOS((Q)ARG0(arg));
   }    }
   STOQ(up_fft_mag,*rp);    STOZ(up_fft_mag,*rp);
 }  }
   
 void Pset_upkara(NODE arg,Z *rp)  void Pset_upkara(NODE arg,Z *rp)
 {  {
   if ( arg ) {    if ( arg ) {
     asir_assert(ARG0(arg),O_N,"set_upkara");      asir_assert(ARG0(arg),O_N,"set_upkara");
     up_kara_mag = QTOS((Q)ARG0(arg));      up_kara_mag = ZTOS((Q)ARG0(arg));
   }    }
   STOQ(up_kara_mag,*rp);    STOZ(up_kara_mag,*rp);
 }  }
   
 void Pset_uptkara(NODE arg,Z *rp)  void Pset_uptkara(NODE arg,Z *rp)
 {  {
   if ( arg ) {    if ( arg ) {
     asir_assert(ARG0(arg),O_N,"set_uptkara");      asir_assert(ARG0(arg),O_N,"set_uptkara");
     up_tkara_mag = QTOS((Q)ARG0(arg));      up_tkara_mag = ZTOS((Q)ARG0(arg));
   }    }
   STOQ(up_tkara_mag,*rp);    STOZ(up_tkara_mag,*rp);
 }  }
   
 extern int up2_kara_mag;  extern int up2_kara_mag;
Line 720  void Pset_up2kara(NODE arg,Z *rp)
Line 741  void Pset_up2kara(NODE arg,Z *rp)
 {  {
   if ( arg ) {    if ( arg ) {
     asir_assert(ARG0(arg),O_N,"set_up2kara");      asir_assert(ARG0(arg),O_N,"set_up2kara");
     up2_kara_mag = QTOS((Q)ARG0(arg));      up2_kara_mag = ZTOS((Q)ARG0(arg));
   }    }
   STOQ(up2_kara_mag,*rp);    STOZ(up2_kara_mag,*rp);
 }  }
   
 void Pigcdbin(NODE arg,Z *rp)  void Pigcdbin(NODE arg,Z *rp)

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.5

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>