int main()
{
  uint32_t errors = 0;
  int seed = 1;
  srand(seed);

  printf("Mersenne Twister -- printing the first 200 numbers seed %d\n\n",
    seed);

  for ( int n=0; n<200; ++n ) {
    uint32_t r = rand_u32();

    bool error = r != expected[n]; 
    if ( error ) ++errors;

    printf("%10u%c%c", r,
      error? '*' : ' ',
      n % 5 == 4 ? '\n' : ' ');
  }

  printf("\nGenerating 64-bit pseudo-random numbers\n\n");
  for ( int n=0; n<27; ++n )
    printf("%20llu%c", rand_u64(), n % 3 == 2 ? '\n' : ' ');

  printf("\nFloat values in range [0..1]\n\n");
  for ( int n=0; n<40; ++n )
    printf("%f%c", randf_cc(), n % 5 == 4 ? '\n' : ' ');

  printf("\nDouble values in range [0..1]\n\n");
  for ( int n=0; n<40; ++n )
    printf("%f%c", randd_cc(), n % 5 == 4 ? '\n' : ' ');

  printf("\nFound %u incorrect numbers\n\n", errors);
  return errors > 0;
}
Exemple #2
0
int main()
{
  uint32_t errors = 0;
  int seed = 1;
  srand(seed);

  printf("Mersenne Twister -- printing the first %zu numbers w/seed %d\n\n",
    sizeof(expected)/sizeof(expected[0]), seed);

  for ( size_t n=0; n<sizeof(expected)/sizeof(expected[0]); ++n ) {
    uint32_t r = rand_u32();

    bool error = r != expected[n];
    if ( error ) ++errors;

    printf("%10u%c%c", r,
      error? '*' : ' ',
      n % 5 == 4 ? '\n' : ' ');
    fflush(stdout);
  }

  printf("\nGenerating 64-bit pseudo-random numbers\n\n");
  for ( int n=0; n<27; ++n )
    printf("%20" PRIu64 "%c", rand_u64(), n % 3 == 2 ? '\n' : ' ');

  printf("\nFloat values in range [0..1]\n\n");
  for ( int n=0; n<40; ++n )
    printf("%f%c", randf_cc(), n % 5 == 4 ? '\n' : ' ');

  printf("\nDouble values in range [0..1]\n\n");
  for ( int n=0; n<40; ++n )
    printf("%f%c", randd_cc(), n % 5 == 4 ? '\n' : ' ');

  printf("\nChecking reference numbers for seed 1 (may take some time)\n\n");
  srand(1);
  for ( size_t n=0, target=1, idx=0; n<=0xffffffff; ++n ) {
    uint32_t r = rand_u32();

    if ( n != (target-1) )
      continue;

    bool error = r != doubled_reference_seed1[idx];
    if ( error ) ++errors;

    printf("%11zu %11u%c %c", n, r,
      error? '*' : ' ',
      idx % 4 == 3 ? '\n' : ' ');
    fflush(stdout);
    target *= 2;
    ++idx;
  }

  printf("\nFound %u incorrect numbers\n\n", errors);
  return errors > 0;
}