Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
 public static void dsfmt_chk_init_by_array(dSfmtPrimitiveState dsfmt, uint[] init_key, int key_length)
 {
     unchecked
     {
Exemplo n.º 6
0
 public static void dsfmt_init_gen_rand(dSfmtPrimitiveState dsfmt, uint seed) =>
 dsfmt_chk_init_gen_rand(dsfmt, seed, 19937);