コード例 #1
0
        public static bool Multiply(ulong first, ulong second, out ulong result)
        {
            ulong t;

            result = DoubleArithmetic.BigMul(first, second, out t);
            return(0 != t);
        }
        public bool Test_BigMul_2(ulong m0, ulong n0)
        {
            var mm  = UInt64ArrayToBigIntegerUnsigned(m0);
            var nn  = UInt64ArrayToBigIntegerUnsigned(n0);
            var p0p = mm * nn;
            var p10 = DoubleArithmetic.BigMul(m0, n0, out UInt64 p11);
            var p1p = UInt64ArrayToBigIntegerUnsigned(p10, p11);

            return(p0p == p1p);
        }
        public bool Test_BigMul_1(ulong m0, ulong m1, ulong n0, ulong n1)
        {
            var mm  = UInt64ArrayToBigInteger(m0, m1);
            var nn  = UInt64ArrayToBigInteger(n0, n1);
            var p0p = mm * nn;
            var p10 = DoubleArithmetic.BigMul(m0, unchecked ((Int64)m1), n0, unchecked ((Int64)n1), out UInt64 p11, out UInt64 p12, out Int64 p13);
            var p1p = UInt64ArrayToBigInteger(p10, p11, p12, unchecked ((UInt64)p13));

            return(p0p == p1p);
        }
        public bool Test_BigMul_3(ulong m0, ulong n0)
        {
            var mm  = UInt64ArrayToBigInteger(m0);
            var nn  = UInt64ArrayToBigInteger(n0);
            var p0p = mm * nn;
            var p10 = DoubleArithmetic.BigMul(unchecked ((Int64)m0), unchecked ((Int64)n0), out Int64 p11);
            var p1p = UInt64ArrayToBigInteger(p10, unchecked ((UInt64)p11));

            return(p0p == p1p);
        }
 public static bool Multiply(long first, long second, out long result) {
     long t;
     var r = DoubleArithmetic.BigMul(first, second, out t);
     result = unchecked((long)r);
     if (0 > (first ^ second)) {
         if ((-1 == t && 0 > r) || (0 == t && 0 == r)) {
             return false;
         }
     } else {
         if (0 == t && r <= (ulong)long.MaxValue)
             return false;
     }
     return true;
 }
 public void Test_BigMul_1()
 {
     var run_count = 1000000;
     Func <Tuple <ulong, ulong, ulong, ulong>, bool> predicate = (a) => {
         var m0 = a.Item1;
         var m1 = a.Item2;
         var n0 = a.Item3;
         var n1 = a.Item4;
         var d0 = DoubleArithmetic.BigMul(m0, m1, n0, n1, out UInt64 d1, out UInt64 d2, out UInt64 d3);
         var m  = UInt64ArrayToBigIntegerUnsigned(m0, m1);
         var n  = UInt64ArrayToBigIntegerUnsigned(n0, n1);
         var p  = m * n;
         var d  = UInt64ArrayToBigIntegerUnsigned(d0, d1, d2, d3);
         return(p == d);
     };