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; }
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; }