コード例 #1
0
ファイル: rk_isaac.c プロジェクト: 3660628/trunk
/* Call rand(rk_isaac_state *r) to retrieve a single 32-bit random value */
unsigned long rk_isaac_random(rk_isaac_state *state)
{
  if (!state->randcnt--)
  {
    register unsigned long a,b,x,y,*m,*mm,*m2,*r,*mend;
    mm=state->randmem; r=state->randrsl;
    a = state->randa; b = (state->randb + (++state->randc)) & 0xffffffff;
    for (m = mm, mend = m2 = m+(RK_ISAAC_STATE_LEN/2); m<mend; )
    {
      rngstep( a<<13, a, b, mm, m, m2, r, x);
      rngstep( a>>6 , a, b, mm, m, m2, r, x);
      rngstep( a<<2 , a, b, mm, m, m2, r, x);
      rngstep( a>>16, a, b, mm, m, m2, r, x);
    }
    for (m2 = mm; m2<mend; )
    {
      rngstep( a<<13, a, b, mm, m, m2, r, x);
      rngstep( a>>6 , a, b, mm, m, m2, r, x);
      rngstep( a<<2 , a, b, mm, m, m2, r, x);
      rngstep( a>>16, a, b, mm, m, m2, r, x);
    }
    state->randb = b; state->randa = a;
    state->randcnt=RK_ISAAC_STATE_LEN-1;
  }
  return state->randrsl[state->randcnt] & 0xFFFFFFFF;
}
コード例 #2
0
ファイル: rand64.c プロジェクト: vollmerm/TrappyBeowulf
void isaac64(void) {
  register u64 a,b,x,y,*m,*m2,*r,*mend;
  m = mm; r = RandResult;
  a = aa; b = bb + (++cc);
  for (m = mm, mend = m2 = m+(RANDSIZ/2); m<mend; ) {
    rngstep(~(a^(a<<21)), a, b, mm, m, m2, r, x);
    rngstep(  a^(a>>5)  , a, b, mm, m, m2, r, x);
    rngstep(  a^(a<<12) , a, b, mm, m, m2, r, x);
    rngstep(  a^(a>>33) , a, b, mm, m, m2, r, x);
  }
  for (m2 = mm; m2<mend; ) {
    rngstep(~(a^(a<<21)), a, b, mm, m, m2, r, x);
    rngstep(  a^(a>>5)  , a, b, mm, m, m2, r, x);
    rngstep(  a^(a<<12) , a, b, mm, m, m2, r, x);
    rngstep(  a^(a>>33) , a, b, mm, m, m2, r, x);
  }
  bb = b; aa = a;
}
コード例 #3
0
ファイル: isaac.c プロジェクト: test005/test
void isaac(randctx *ctx) {
   register ub4 a,b,x,y,*m,*mm,*m2,*r,*mend;

   mm=ctx->randmem; r=ctx->randrsl;
   a = ctx->randa; b = ctx->randb + (++ctx->randc);
   for (m = mm, mend = m2 = m+(RANDSIZ/2); m<mend; ) {
     rngstep( a<<13, a, b, mm, m, m2, r, x);
     rngstep( a>>6 , a, b, mm, m, m2, r, x);
     rngstep( a<<2 , a, b, mm, m, m2, r, x);
     rngstep( a>>16, a, b, mm, m, m2, r, x);
   }
   for (m2 = mm; m2<mend; ) {
     rngstep( a<<13, a, b, mm, m, m2, r, x);
     rngstep( a>>6 , a, b, mm, m, m2, r, x);
     rngstep( a<<2 , a, b, mm, m, m2, r, x);
     rngstep( a>>16, a, b, mm, m, m2, r, x);
   }
   ctx->randb = b; ctx->randa = a;
}
コード例 #4
0
ファイル: isaac.hpp プロジェクト: idea-lua-edit/cppmud
 void QTIsaac<ALPHA,T>::isaac(randctx* ctx)
 {
    T x,y;
 
    T* mm = ctx->randmem;
    T* r  = ctx->randrsl;
 
    T a = (ctx->randa);
    T b = (ctx->randb + (++ctx->randc));
 
    T* m    = mm; 
    T* m2   = (m+(N/2));
    T* mend = m2;
 
    for(; m<mend; )
    {
      #ifndef __ISAAC64
       rngstep((a<<13), a, b, mm, m, m2, r, x, y);
       rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
       rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
       rngstep((a>>16), a, b, mm, m, m2, r, x, y);
      #else   // __ISAAC64
      rngstep(~(a^(a<<21)), a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a>>5)  , a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a<<12) , a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a>>33) , a, b, mm, m, m2, r, x, y);
      #endif  // __ISAAC64
    }
 
    m2 = mm;
 
    for(; m2<mend; )
    {
      #ifndef __ISAAC64
       rngstep((a<<13), a, b, mm, m, m2, r, x, y);
       rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
       rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
       rngstep((a>>16), a, b, mm, m, m2, r, x, y);
      #else   // __ISAAC64
      rngstep(~(a^(a<<21)), a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a>>5)  , a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a<<12) , a, b, mm, m, m2, r, x, y);
      rngstep(  a^(a>>33) , a, b, mm, m, m2, r, x, y);
      #endif  // __ISAAC64
    }
 
    ctx->randb = b;
    ctx->randa = a;
 }