/**
* @file sample1.c
*
* @brief sample jump using pre-computed jump polynomial.
*
* The jump polynomial used in this program was calculated like this:
$ ./calc-jump 100000000000000000000 characteristic.1279.txt
jump polynomial:
9d5b86a5d43ab13fe8df9176e597400e28a93d7a57e6a2c567af960cfe9918db3c5c6e61b00d546dd4296944888d4aea89f4ec6a89270b8a74e6e5dacd493bae9e64be470fef3db499c632fd0523ecb12e8156a9ce026cbe7cca3e18bf1867c71d876ef460dc1d7c44194aea55f8009d81712eaed8c58b7b1ef0e55e2a0f368ee2dd43d7ced024e565fc5b0f9e0c6561a9827fbe132b68d0e203a41ef3750573
*/
/*
* In this sample, jump polynomial is fixed, then SFMT_MEXP should be fixed.
*/
#define SFMT_MEXP 1279
#include
#include "SFMT.h"
#include "SFMT-jump.h"
/*
* jump step is SFMT internal state step,
* for 32-bit integer, 4 * jump step numbers are skipped.
*/
static const char * jump10_20 =
"9d5b86a5d43ab13fe8df9176e597400e28a93d7a57e6a2c567af960cfe9918d"
"b3c5c6e61b00d546dd4296944888d4aea89f4ec6a89270b8a74e6e5dacd493b"
"ae9e64be470fef3db499c632fd0523ecb12e8156a9ce026cbe7cca3e18bf186"
"7c71d876ef460dc1d7c44194aea55f8009d81712eaed8c58b7b1ef0e55e2a0f"
"368ee2dd43d7ced024e565fc5b0f9e0c6561a9827fbe132b68d0e203a41ef37"
"50573";
int main(int argc, char * argv[])
{
const int size = 5;
uint32_t seed = 4321;
sfmt_t sfmt[size];
sfmt_init_gen_rand(&sfmt[0], seed);
for (int i = 1; i < size; i++) {
sfmt[i] = sfmt[i - 1];
SFMT_jump(&sfmt[i], jump10_20);
}
/* generate and compare with serial generation */
for (int i = 0; i < 10; i++) {
/* simulating parallel generation */
for (int j = 0; j < size; j++) {
printf("%10"PRIu32" ", sfmt_genrand_uint32(&sfmt[j]));
}
printf("\n");
}
return 0;
}