static void period_certification(dSfmtPrimitiveState dsfmt) { ulong *pcv = stackalloc ulong[2]; pcv[0] = DSFMT_PCV1; pcv[1] = DSFMT_PCV2; ; ulong *tmp = stackalloc ulong[2]; ulong inner; int i; tmp[0] = (dsfmt.status[DSFMT_N].u[0] ^ DSFMT_FIX1); tmp[1] = (dsfmt.status[DSFMT_N].u[1] ^ DSFMT_FIX2); inner = tmp[0] & pcv[0]; inner ^= tmp[1] & pcv[1]; for (i = 32; i > 0; i >>= 1) { inner ^= inner >> i; } inner &= 1; /* check OK */ if (inner == 1) { return; } dsfmt.status[DSFMT_N].u[1] ^= 1; }
public static void dsfmt_gen_rand_all(dSfmtPrimitiveState dsfmt) { int i; FloatW128 lung = new FloatW128(); lung = dsfmt.status[DSFMT_N]; do_recursion(ref dsfmt.status[0], ref dsfmt.status[0], ref dsfmt.status[DSFMT_POS1], ref lung); for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { do_recursion(ref dsfmt.status[i], ref dsfmt.status[i], ref dsfmt.status[i + DSFMT_POS1], ref lung); } for (; i < DSFMT_N; i++) { do_recursion(ref dsfmt.status[i], ref dsfmt.status[i], ref dsfmt.status[i + DSFMT_POS1 - DSFMT_N], ref lung); } dsfmt.status[DSFMT_N] = lung; }
public static void initial_mask(dSfmtPrimitiveState dsfmt) { int i; ulong *psfmt; psfmt = &dsfmt.status[0].u[0]; for (i = 0; i < DSFMT_N * 2; i++) { psfmt[i] = (psfmt[i] & DSFMT_LOW_MASK) | DSFMT_HIGH_CONST; } }
private static void dsfmt_chk_init_gen_rand(dSfmtPrimitiveState dsfmt, uint seed, int mexp) { int i; uint *psfmt; /* make sure caller program is compiled with the same MEXP */ psfmt = &dsfmt.status[0].u32[0]; psfmt[idxof(0)] = seed; for (i = 1; i < (DSFMT_N + 1) * 4; i++) { psfmt[idxof(i)] = 1812433253U * (psfmt[idxof(i - 1)] ^ (psfmt[idxof(i - 1)] >> 30)) + (uint)i; } initial_mask(dsfmt); period_certification(dsfmt); dsfmt.idx = DSFMT_N64; }
public static void dsfmt_chk_init_by_array(dSfmtPrimitiveState dsfmt, uint[] init_key, int key_length) { unchecked {
public static void dsfmt_init_gen_rand(dSfmtPrimitiveState dsfmt, uint seed) => dsfmt_chk_init_gen_rand(dsfmt, seed, 19937);