Ejemplo n.º 1
0
static unif01_Gen *CreateDenga (unsigned long m, unsigned long b, int k,
   unsigned long S[], int id)
{
   unif01_Gen *gen;
   DX02_state *state;
   DX02_param *param;
   size_t leng;
   char name[LEN + 1];
   int j;

   gen = util_Malloc (sizeof (unif01_Gen));
   state = util_Malloc (sizeof (DX02_state));
   param = util_Malloc (sizeof (DX02_param));
   if (0 == id) {
      util_Assert (k < 129, "udeng_CreateDL00a:   k > 128");
   } else {
      util_Assert (k < 129, "udeng_CreateDX02a:   k > 128");
   }

   state->X = util_Calloc (MASK1 + 1, sizeof (double));
   for (j = 0; j < k; j++)
      state->X[k - j - 1] = S[j] % m;
   state->s = k - 1;
   state->K = k;
   param->b = b;
   param->m = m;

   if (0 == id)
      strcpy (name, "udeng_CreateDL00a:");
   else
#ifdef LAC
      strcpy (name, "udeng_CreateDX02a, Lac = {0, 101, 102}:");
#else
      strcpy (name, "udeng_CreateDX02a:");
#endif
   addstr_Ulong (name, "   m = ", m);
   addstr_Ulong (name, ",   b = ", b);
   addstr_Uint (name, ",   k = ", (unsigned) k);
   addstr_ArrayUlong (name, ",   S = ", k, S);
   leng = strlen (name);
   gen->name = util_Calloc (leng + 1, sizeof (char));
   strncpy (gen->name, name, leng);

   gen->param   = param;
   gen->state   = state;
   if (0 == id) {
      gen->GetBits = &DL00a_Bits;
      gen->GetU01  = &DL00a_U01;
   } else {
      gen->GetBits = &DX02a_Bits;
      gen->GetU01  = &DX02a_U01;
   }
   gen->Write   = &WrDX02a;
   return gen;
}
Ejemplo n.º 2
0
void  addstr_ArrayUlong (char *to, const char *add, 
                         int high, unsigned long val[])
{
   int j;
   strcat (to, add);
   addstr_Ulong (to, "(", val[0]);
   for (j = 1; (j < high) && (j < 5); j++)
      addstr_Ulong (to, ", ", val[j]);
   if (high > 5)
      strcat (to, ", ... )");
   else
      strcat (to, ")");
}
Ejemplo n.º 3
0
unif01_Gen * uautomata_CreateCA1 (int N, int S[ ], int r, int F[ ], 
                                  int k, int ts, int cs, int rot)
{
   unif01_Gen *gen;
   CA1_param *param;
   CA1_state *state;
   size_t leng;
   char name[LEN + 1];
   long i;
   unsigned long Z = 0;
   long L;                 /* Dimension of the rule F */

   i = 4*sizeof(long) - 1;
   util_Assert ((long) r < i, "uautomata_CreateCA1:   r too large");
   util_Assert (ts >= 0, "uautomata_CreateCA1:   ts < 0");
   util_Assert (cs >= 0, "uautomata_CreateCA1:   cs < 0");
   util_Assert (k > 0,  "uautomata_CreateCA1:   k < 1");
   gen = util_Malloc (sizeof (unif01_Gen));
   param = util_Malloc (sizeof (CA1_param));
   state = util_Malloc (sizeof (CA1_state));

   strncpy (name, "uautomata_CreateCA1:", (size_t) LEN);
   addstr_Long (name, "   N = ", (long) N);
   addstr_Long (name, ",   r = ", (long) r);
   L = num_TwoExp[2*r + 1];
   addstr_ArrayInt (name, ",   F = ",  (int) L, F);
   for (i = L-1; i >= 0; i--) {
      Z <<= 1;
      Z += F[i];
   }
   addstr_Ulong(name, " = Rule ", Z);   
   addstr_Long (name, ",   k = ", (long) k);
   addstr_Long (name, ",   ts = ", (long) ts);
   addstr_Long (name, ",   cs = ", (long) cs);
   addstr_Long (name, ",   rot = ", (long) rot);
   addstr_ArrayInt (name, ",   S = ",  N, S);
   leng = strlen (name);
   gen->name = util_Calloc (leng + 1, sizeof (char));
   strncpy (gen->name, name, (size_t) leng);

   param->r = r;
   param->tstep = ts + 1;
   param->cstep = cs + 1;
   param->rot = rot;
   param->k = k;
   param->F = F;
   param->L = L;
   state->Cell = util_Calloc ((size_t) N, sizeof (int));
   state->OldCell = util_Calloc ((size_t) N, sizeof (int));
   state->Rand = util_Calloc ((size_t) k, sizeof (unsigned long));
   state->N = N;
   state->nk = 0;
   param->imin = N/2 - k/2 * param->cstep;
   param->imax = N/2 + (k - 1)/2 * param->cstep;
   util_Assert (param->imin >= 0, "uautomata_CreateCA1:   k*cs too large");
   util_Assert (param->imax < N, "uautomata_CreateCA1:   k*cs too large");

   for (i = 0; i < N; i++) {
     /*     util_Assert (S[i] == 0 || S[i] == 1,
            "uautomata_CreateCA1:   all S[i] must be in { 0, 1 }."); */
      state->Cell[i] = S[i] & 1;
   }
   
   gen->GetBits = &CA1_Bits;
   gen->GetU01  = &CA1_U01;
   gen->Write   = &WrCA1;
   gen->param   = param;
   gen->state   = state;
   return gen;
}