Exemple #1
0
        /// <summary>
        /// Compute the value using
        /// <see cref="Modular.Mod(long, long)"/>
        /// .
        /// </summary>
        internal virtual double Compute_modular()
        {
            long   e = E.value;
            long   n = N.value;
            double s = 0;

            for (; e > E.limit; e += E.delta)
            {
                s  = Modular.AddMod(s, Modular.Mod(e, n) / (double)n);
                n += N.delta;
            }
            return(s);
        }
Exemple #2
0
 internal static void ModBenchmarks()
 {
     Util.Timer t = new Util.Timer(false);
     t.Tick("modBenchmarks()");
     long[][][] en = GenerateEN(10000, 10);
     t.Tick("generateEN");
     for (int i = 0; i < en.Length; i++)
     {
         long n = en[i][0][0];
         for (int j = 1; j < en[i].Length; j++)
         {
             long e      = en[i][j][0];
             long answer = en[i][j][1];
             long s      = Modular.Mod(e, n);
             if (s != answer)
             {
                 NUnit.Framework.Assert.AreEqual("e=" + e + ", n=" + n + ", answer=" + answer + " but s="
                                                 + s, answer, s);
             }
         }
     }
     t.Tick("Modular.mod");
     TestModular.Montgomery2 m2 = new TestModular.Montgomery2();
     for (int i_1 = 0; i_1 < en.Length; i_1++)
     {
         long n = en[i_1][0][0];
         m2.Set(n);
         for (int j = 1; j < en[i_1].Length; j++)
         {
             long e      = en[i_1][j][0];
             long answer = en[i_1][j][1];
             long s      = m2.Mod(e);
             if (s != answer)
             {
                 NUnit.Framework.Assert.AreEqual("e=" + e + ", n=" + n + ", answer=" + answer + " but s="
                                                 + s, answer, s);
             }
         }
     }
     t.Tick("montgomery.mod");
     for (int i_2 = 0; i_2 < en.Length; i_2++)
     {
         long n = en[i_2][0][0];
         m2.Set(n);
         for (int j = 1; j < en[i_2].Length; j++)
         {
             long e      = en[i_2][j][0];
             long answer = en[i_2][j][1];
             long s      = m2.Mod2(e);
             if (s != answer)
             {
                 NUnit.Framework.Assert.AreEqual("e=" + e + ", n=" + n + ", answer=" + answer + " but s="
                                                 + s, answer, s);
             }
         }
     }
     t.Tick("montgomery.mod2");
     for (int i_3 = 0; i_3 < en.Length; i_3++)
     {
         long       n = en[i_3][0][0];
         BigInteger N = BigInteger.ValueOf(n);
         for (int j = 1; j < en[i_3].Length; j++)
         {
             long e      = en[i_3][j][0];
             long answer = en[i_3][j][1];
             long s      = Two.ModPow(BigInteger.ValueOf(e), N);
             if (s != answer)
             {
                 NUnit.Framework.Assert.AreEqual("e=" + e + ", n=" + n + ", answer=" + answer + " but s="
                                                 + s, answer, s);
             }
         }
     }
     t.Tick("BigInteger.modPow(e, n)");
 }