public void Sequence_dSFMT()
        {
            var seed = Environment.TickCount;

            Test(DsfmtRandom.Create(seed, DsfmtEdition.Original_19937), DsfmtRandom.Create(seed, DsfmtEdition.Opt_19937));
            Test(DsfmtRandom.Create(seed, DsfmtEdition.Original_19937), DsfmtRandom.Create(seed, DsfmtEdition.OptGen_19937));
        }
 public void Random_dSFMT()
 {
     Test(DsfmtRandom.Create(DsfmtEdition.Original_19937));
     Test(DsfmtRandom.Create(DsfmtEdition.Opt_19937));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_521));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_1279));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_2203));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_4253));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_11213));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_19937));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_44497));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_86243));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_132049));
     Test(DsfmtRandom.Create(DsfmtEdition.OptGen_216091));
 }
Beispiel #3
0
        private static IEnumerable <Random> EnumRandoms()
        {
            var seed = Seed;

            System.Diagnostics.Trace.WriteLine("SEED: " + seed);
            yield return(new Random());

            yield return(MTRandom.Create(seed, MTEdition.Original_19937));

            yield return(MTRandom.Create(seed, MTEdition.Cok_19937));

            yield return(MTRandom.Create(seed, MTEdition.CokOpt_19937));

            yield return(MT64Random.Create(seed, MT64Edition.Original_19937));

            yield return(MT64Random.Create(seed, MT64Edition.Opt_19937));

            yield return(SfmtRandom.Create(seed, SfmtEdition.Original_19937));

            yield return(SfmtRandom.Create(seed, SfmtEdition.Opt_19937));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.Original_19937));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.Opt_19937));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_521));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_1279));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_2203));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_4253));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_11213));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_19937));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_44497));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_86243));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_132049));

            yield return(DsfmtRandom.Create(seed, DsfmtEdition.OptGen_216091));
        }
        static void Main(string[] args)
        {
            if (Debugger.IsAttached)
            {
                Console.WriteLine("***************************");
                Console.WriteLine("  Run without a debugger!");
                Console.WriteLine("***************************");
                Console.WriteLine();
            }
            //
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            Console.WriteLine("Wait for getting calm 3 seconds...");
            Thread.Sleep(3000);
            //
            var fmt = "   {0,23}: {1,6:f3} s (mean = {2:f10} * int.MaxValue)";
            Func <Random, long> proci = Next <Random>;
            var    seed1 = Environment.TickCount;
            var    N     = 300000000;
            double mean;

            Console.WriteLine();
            Console.WriteLine("Random.Next: N = {0:#,0}", N);
            //
            var t_null = Measure(NullRandom.Defalut, N, proci, out mean);

            Console.WriteLine(fmt, "Null", t_null, mean);
            var t_rand = Measure(new Random(), N, proci, out mean);

            Console.WriteLine(fmt, "Random", t_rand, mean);
            var t_mt32_org = Measure(MTRandom.Create(seed1, MTEdition.Original_19937), N, proci, out mean);

            Console.WriteLine(fmt, "MT19937", t_mt32_org, mean);
            var t_mt32_cok = Measure(MTRandom.Create(seed1, MTEdition.Cok_19937), N, proci, out mean);

            Console.WriteLine(fmt, "MT19937-c*k", t_mt32_cok, mean);
            var t_mt32_opt = Measure(MTRandom.Create(seed1, MTEdition.CokOpt_19937), N, proci, out mean);

            Console.WriteLine(fmt, "MT19937-c*k-opt", t_mt32_opt, mean);
            var t_mt64_org = Measure(MT64Random.Create(seed1, MT64Edition.Original_19937), N, proci, out mean);

            Console.WriteLine(fmt, "MT64-19937", t_mt64_org, mean);
            var t_mt64_opt = Measure(MT64Random.Create(seed1, MT64Edition.Opt_19937), N, proci, out mean);

            Console.WriteLine(fmt, "MT64-19937-opt", t_mt64_opt, mean);
            var t_sfmt_ptr = Measure(new SfmtRandom <unsafe_sfmt_t>(seed1), N, proci, out mean);

            Console.WriteLine(fmt, "SFMT-19937-ptr", t_sfmt_ptr, mean);
            var t_sfmt_org = Measure(SfmtRandom.Create(seed1, SfmtEdition.Original_19937), N, proci, out mean);

            Console.WriteLine(fmt, "SFMT-19937", t_sfmt_org, mean);
            var t_sfmt_opt = Measure(SfmtRandom.Create(seed1, SfmtEdition.Opt_19937), N, proci, out mean);

            Console.WriteLine(fmt, "SFMT-opt-19937", t_sfmt_opt, mean);
            var t_dsfmt_ptr = Measure(new DsfmtRandom <unsafe_dsfmt_t>(seed1), N, proci, out mean);

            Console.WriteLine(fmt, "dSFMT-19937-ptr", t_dsfmt_ptr, mean);
            var t_dsfmt_org = Measure(DsfmtRandom.Create(seed1, DsfmtEdition.Original_19937), N, proci, out mean);

            Console.WriteLine(fmt, "dSFMT-19937", t_dsfmt_org, mean);
            var t_dsfmt_opt = Measure(DsfmtRandom.Create(seed1, DsfmtEdition.Opt_19937), N, proci, out mean);

            Console.WriteLine(fmt, "dSFMT-opt-19937", t_dsfmt_opt, mean);
            var t_dsfmt_gen = Measure(DsfmtRandom.Create(seed1, DsfmtEdition.OptGen_19937), N, proci, out mean);

            Console.WriteLine(fmt, "dSFMT-opt-gen-19937", t_dsfmt_gen, mean);
            var t_accurate = Measure(new AccurateRandom(DsfmtRandom.Create(seed1, DsfmtEdition.Opt_19937)), N, proci, out mean);

            Console.WriteLine(fmt, "accurate+dSFMT-opt-19937", t_accurate, mean);
            t_dsfmt_gen = Measure(DsfmtRandom.Create(seed1, DsfmtEdition.OptGen_521), N, proci, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-gen-521", t_dsfmt_gen, mean);
            t_dsfmt_gen = Measure(DsfmtRandom.Create(seed1, DsfmtEdition.OptGen_216091), N, proci, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-gen-216091", t_dsfmt_gen, mean);
            //
            var buf     = new byte[sizeof(int) * 10];
            var t_cprng = Measure(new System.Security.Cryptography.RNGCryptoServiceProvider(), N, rng => {
                rng.GetBytes(buf);
                var x = 0L;
                x    += ToUInt32(buf, 0) >> 1;
                x    += ToUInt32(buf, 4) >> 1;
                x    += ToUInt32(buf, 8) >> 1;
                x    += ToUInt32(buf, 12) >> 1;
                x    += ToUInt32(buf, 16) >> 1;
                x    += ToUInt32(buf, 20) >> 1;
                x    += ToUInt32(buf, 24) >> 1;
                x    += ToUInt32(buf, 28) >> 1;
                x    += ToUInt32(buf, 32) >> 1;
                x    += ToUInt32(buf, 36) >> 1;
                return(x);
            }, out mean);

            Console.WriteLine(fmt, "RNGCrypt", t_cprng, mean);
            //
            fmt = "   {0,23}: {1,6:f3} s (mean = {2:f10})";
            Func <Random, double> procd = NextDouble <Random>;
            var seed2 = new uint[] { (uint)Environment.TickCount, (uint)Environment.WorkingSet };

            N = 200000000;
            Console.WriteLine();
            Console.WriteLine("Random.NextDouble: N = {0:#,0}", N);
            //
            t_null = Measure(NullRandom.Defalut, N, procd, out mean);
            Console.WriteLine(fmt, "Null", t_null, mean);
            t_rand = Measure(new Random(), N, procd, out mean);
            Console.WriteLine(fmt, "Random", t_rand, mean);
            t_mt32_org = Measure(MTRandom.Create(seed2, MTEdition.Original_19937), N, procd, out mean);
            Console.WriteLine(fmt, "MT19937", t_mt32_org, mean);
            t_mt32_cok = Measure(MTRandom.Create(seed2, MTEdition.Cok_19937), N, procd, out mean);
            Console.WriteLine(fmt, "MT19937-c*k", t_mt32_cok, mean);
            t_mt32_opt = Measure(MTRandom.Create(seed2, MTEdition.CokOpt_19937), N, procd, out mean);
            Console.WriteLine(fmt, "MT19937-c*k-opt", t_mt32_opt, mean);
            t_mt64_org = Measure(MT64Random.Create(seed1, MT64Edition.Original_19937), N, procd, out mean);
            Console.WriteLine(fmt, "MT64-19937", t_mt64_org, mean);
            t_mt64_opt = Measure(MT64Random.Create(seed1, MT64Edition.Opt_19937), N, procd, out mean);
            Console.WriteLine(fmt, "MT64-19937-opt", t_mt64_opt, mean);
            t_sfmt_ptr = Measure(new SfmtRandom <unsafe_sfmt_t>(seed2), N, procd, out mean);
            Console.WriteLine(fmt, "SFMT-19937-ptr", t_sfmt_org, mean);
            t_sfmt_org = Measure(SfmtRandom.Create(seed2, SfmtEdition.Original_19937), N, procd, out mean);
            Console.WriteLine(fmt, "SFMT-19937", t_sfmt_org, mean);
            t_sfmt_opt = Measure(SfmtRandom.Create(seed2, SfmtEdition.Opt_19937), N, procd, out mean);
            Console.WriteLine(fmt, "SFMT-opt-19937", t_sfmt_opt, mean);
            t_dsfmt_ptr = Measure(new DsfmtRandom <unsafe_dsfmt_t>(seed2), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-19937-ptr", t_dsfmt_ptr, mean);
            t_dsfmt_org = Measure(DsfmtRandom.Create(seed2, DsfmtEdition.Original_19937), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-19937", t_dsfmt_org, mean);
            t_dsfmt_opt = Measure(DsfmtRandom.Create(seed2, DsfmtEdition.Opt_19937), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-19937", t_dsfmt_opt, mean);
            t_dsfmt_gen = Measure(DsfmtRandom.Create(seed2, DsfmtEdition.OptGen_19937), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-gen-19937", t_dsfmt_gen, mean);
            t_accurate = Measure(new AccurateRandom(DsfmtRandom.Create(seed2, DsfmtEdition.Opt_19937)), N, procd, out mean);
            Console.WriteLine(fmt, "accurate+dSFMT-opt-19937", t_accurate, mean);
            t_dsfmt_gen = Measure(DsfmtRandom.Create(seed2, DsfmtEdition.OptGen_521), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-gen-521", t_dsfmt_gen, mean);
            t_dsfmt_gen = Measure(DsfmtRandom.Create(seed2, DsfmtEdition.OptGen_216091), N, procd, out mean);
            Console.WriteLine(fmt, "dSFMT-opt-gen-216091", t_dsfmt_gen, mean);
            //
            buf     = new byte[sizeof(ulong) * 10];
            t_cprng = Measure(new System.Security.Cryptography.RNGCryptoServiceProvider(), N, rng => {
                rng.GetBytes(buf);
                var x = 0d;
                x    += ToDouble(buf, 0);
                x    += ToDouble(buf, 8);
                x    += ToDouble(buf, 16);
                x    += ToDouble(buf, 24);
                x    += ToDouble(buf, 32);
                x    += ToDouble(buf, 40);
                x    += ToDouble(buf, 48);
                x    += ToDouble(buf, 56);
                x    += ToDouble(buf, 64);
                x    += ToDouble(buf, 72);
                return(x);
            }, out mean);
            Console.WriteLine(fmt, "RNGCrypt", t_cprng, mean);
        }