/** * @file sample.c * * @brief sample jump using pre-computed jump polynomial. * * The jump polynomial used in this program was calculated like this:
$ ./calc-jump 100000000000000000000 poly.1279.txt
jump polynomial:
2c6b058dca1fbfb57ebf41e67fec066c8828f2bf9414331d2767fa740aba89987685a79114b3543edbc83476e35fd1e52b8b2436932b9d18a728d8c7d7009a31aabed9bf4646909b8138f3e2a05e611c48dd1ce58a46183adabf3314da38599af92720efca1535872e7f85ef916b2c1e41dfe8ea764730f6ba2654ab287a55214bcf08cfae416906e4979108d606819b5d9e5b2f11ce028577f6c3788a9c688f1d64f5ae341eb95169824954
*/ /* * In this sample, jump polynomial is fixed, then DSFMT_MEXP should be fixed. */ #define DSFMT_MEXP 1279 #include #include "dSFMT.h" #include "dSFMT-jump.h" /* * jump step is dSFMT internal state step, * for double, 2 * jump step numbers are skipped. */ static const int size = 5; /* 10^20 will be enough */ static const char * jumppoly = "2c6b058dca1fbfb57ebf41e67fec066c8828f2bf" "9414331d2767fa740aba89987685a79114b3543edbc83476e35fd1e52b8b2436932" "b9d18a728d8c7d7009a31aabed9bf4646909b8138f3e2a05e611c48dd1ce58a4618" "3adabf3314da38599af92720efca1535872e7f85ef916b2c1e41dfe8ea764730f6b" "a2654ab287a55214bcf08cfae416906e4979108d606819b5d9e5b2f11ce028577f6" "c3788a9c688f1d64f5ae341eb95169824954"; int main(int argc, char * argv[]) { uint32_t seed = 4321; dsfmt_t dsfmt[size]; dsfmt_init_gen_rand(&dsfmt[0], seed); for (int i = 1; i < size; i++) { dsfmt[i] = dsfmt[i - 1]; dSFMT_jump(&dsfmt[i], jumppoly); } for (int i = 0; i < 10; i++) { /* simulating parallel generation */ printf("%f %f %f %f %f\n", dsfmt_genrand_close_open(&dsfmt[0]), dsfmt_genrand_close_open(&dsfmt[1]), dsfmt_genrand_close_open(&dsfmt[2]), dsfmt_genrand_close_open(&dsfmt[3]), dsfmt_genrand_close_open(&dsfmt[4])); } return 0; }