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); };