Exemple #1
0
        public void SumLongInteger_IncreasesSignificantBit()
        {
            var result = LongIntegerMath.SumLongInteger(LongInteger.Parse("9"), LongInteger.Parse("1"));

            Assert.AreEqual(LongInteger.Parse("10"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("99"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("100"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("1000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("9999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("10000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("99999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("100000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("999999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("1000000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("9999999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("10000000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("99999999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("100000000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("999999999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("1000000000"), result);

            result = LongIntegerMath.SumLongInteger(LongInteger.Parse("9999999999999999999999"), LongInteger.Parse("1"));
            Assert.AreEqual(LongInteger.Parse("10000000000000000000000"), result);
        }
        public void Compare_NegativeDifferentLength_FirstLarger()
        {
            LongIntegerMath.Compare(LongInteger.Parse("225"), LongInteger.Parse("856"));
            var result = LongIntegerMath.Compare(LongInteger.Parse("-98895"), LongInteger.Parse("-85595455488432574564857"));

            Assert.IsTrue(result > 0);
        }
Exemple #3
0
        public void SumLongInteger_ShouldNotChangeArguments()
        {
            var v1 = LongInteger.Parse("1");
            var v2 = LongInteger.Parse("200000000000000");
            var v3 = LongIntegerMath.SumLongInteger(v1, v2);

            Assert.AreEqual(v1.ToString(), "1");
            Assert.AreEqual(v2.ToString(), "200000000000000");
            Assert.AreEqual(v3.ToString(), "200000000000001");
        }
        public void MultiplicationLongInteger_WhithManyZeros()
        {
            var result = LongIntegerMath.MultiplicationLongInteger(LongInteger.Parse("786543767867865354"), LongInteger.Parse("100000000000000000"));

            Assert.AreEqual(LongInteger.Parse("78654376786786535400000000000000000"), result);

            result = LongIntegerMath.MultiplicationLongInteger(LongInteger.Parse("786543767867865354"), LongInteger.Parse("100000000000000086"));
            Assert.AreEqual(LongInteger.Parse("78654376786786603042764036636420444"), result);

            result = LongIntegerMath.MultiplicationLongInteger(LongInteger.Parse("78654376700000000007865354"), LongInteger.Parse("1000000000000080006"));
            Assert.AreEqual(LongInteger.Parse("78654376700006292829927614200000629275512124"), result);
        }
Exemple #5
0
        public static LongInteger Factorial(LongInteger value)
        {
            if (value.Negative)
            {
                throw new ArgumentException("Factorial x! is not defined for negative x");
            }
            var result = LongInteger.Parse("1");

            for (var i = LongInteger.Parse("1"); Compare(i, value) <= 0; i = SumLongInteger(i, LongInteger.Parse("1")))
            {
                result = MultiplicationLongInteger(result, i);
            }
            return(result);
        }
Exemple #6
0
        public static LongInteger MultiplicationLongInteger(LongInteger v1, LongInteger v2)
        {
            if (v1.Values.Count < v2.Values.Count)
            {
                MultiplicationLongInteger(v2, v1);
            }

            if (v1.Equals("0") || v2.Equals("0"))
            {
                return(LongInteger.Parse("0"));
            }

            var multResult = LongInteger.Parse("0");

            var j = v2.Values.Count - 1;
            var n = 0;

            while (j >= 0)
            {
                var result = Module(v1.Clone());
                var i      = v1.Values.Count - 1;
                var hold   = 0;
                while (i >= 0)
                {
                    var res = v1.Values[i] * v2.Values[j] + hold;
                    hold             = res / Constants.Radix;
                    result.Values[i] = res % Constants.Radix;
                    i--;
                }
                if (hold != 0)
                {
                    result.Values.Insert(0, hold);
                }

                for (var k = 0; k < n; k++)
                {
                    result.Values.Add(0);
                }

                multResult = SumLongInteger(multResult, result);
                j--;
                n++;
            }

            multResult.Negative = v1.Negative != v2.Negative;
            multResult.Normalize();
            return(multResult);
        }
Exemple #7
0
        public static ILongNumber Power(LongInteger value, LongInteger exponent)
        {
            var result = LongInteger.Parse("1");

            if (exponent.Negative)
            {
                return(DivisionLongInteger(result, Power(value, Module(exponent)) as LongInteger));
            }

            for (var i = LongInteger.Parse("1");
                 Compare(i, exponent) <= 0;
                 i = SumLongInteger(i, LongInteger.Parse("1")))
            {
                result = MultiplicationLongInteger(result, value);
            }
            return(result);
        }
Exemple #8
0
        public static ILongNumber DivisionIntoSmall(LongInteger v1, int v2)
        {
            if (v2 >= Constants.Radix)
            {
                var divider = LongInteger.Parse(Convert.ToString(v2));
                return(DivisionLongInteger(v1, divider));
            }

            if (v2 == 0)
            {
                return(v1.IsNegative() ? new InfinityLongNumber(true) : new InfinityLongNumber());
            }

            var result = v1.Clone();
            var modulo = 0;
            var i      = 0;

            while (i < v1.Values.Count)
            {
                var res = modulo * Constants.Radix + v1.Values[i];
                result.Values[i] = (res / Math.Abs(v2));
                modulo           = (res % Math.Abs(v2));
                i++;
            }

            if (v1.Negative || v2 < 0)
            {
                result.Negative = true;
            }
            if (v1.Negative && v2 < 0)
            {
                result.Negative = false;
            }

            result.Normalize();
            return(result);
        }
Exemple #9
0
        public static ILongNumber DivisionLongInteger(LongInteger v1, LongInteger v2)
        {
            ILongNumber result           = Module(v1);
            var         modulo           = Module(v2);
            var         resultIsNegative = v1.IsNegative() != v2.IsNegative();

            if (v2.Values.Count == 1)
            {
                result = DivisionIntoSmall(result as LongInteger, v2.Values[0]);
            }
            else
            {
                var low = 0;
                var up  = Constants.Radix;
                while ((up - low) > 1)
                {
                    var midRange = (low + up) / 2;
                    var res      = MultiplicationLongInteger(modulo, LongInteger.Parse(Convert.ToString(midRange)));
                    if (Compare(res, modulo) > 0)
                    {
                        //                        up = up - up/2;
                        up = midRange;
                    }
                    else
                    {
                        //                        low = low + up/2;
                        low = midRange;
                    }
                }
                throw new NotImplementedException();
            }
            if (resultIsNegative)
            {
                result.InverSign();
            }
            return(result);
        }
Exemple #10
0
        public static LongInteger SubstructLongInteger(LongInteger v1, LongInteger v2)
        {
            if (Compare(v1, v2) == 0)
            {
                return(LongInteger.Parse("0"));
            }

            if (v1.Negative)
            {
                return(OppositeValue(SumLongInteger(v2, OppositeValue(v1))));
            }

            if (v2.Negative)
            {
                return(SumLongInteger(v1, OppositeValue(v2)));
            }

            if (Compare(v1, v2) < 0)
            {
                return(OppositeValue(SubstructLongInteger(v2, v1)));
            }

            return(CalculationSumAndSubstruct(v1, v2, -1));
        }
 public void Factorial_Negative()
 {
     var result = LongIntegerMath.Factorial(LongInteger.Parse("-78637836786"));
 }
        public void Factorial_SmallValue()
        {
            var result = LongIntegerMath.Factorial(LongInteger.Parse("8"));

            Assert.AreEqual(LongInteger.Parse("40320"), result);
        }
        public void Create_NegativeIntegerManyZeroes()
        {
            var number = LongInteger.Parse("-450000000000000000000000000025");

            Assert.AreEqual("-450000000000000000000000000025", number.ToString());
        }
        public void Create_Positive()
        {
            var number = LongInteger.Parse("1");

            Assert.AreEqual("1", number.ToString());
        }
        public void Create_StartsWhithZero()
        {
            var number = LongInteger.Parse("005894");

            Assert.AreEqual("5894", number.ToString());
        }
 public void Create_DoubleComa()
 {
     LongInteger.Parse("15,99");
 }
 public void Create_Double()
 {
     LongInteger.Parse("15.99");
 }
        public void Module_Negative()
        {
            var result = LongIntegerMath.Module(LongInteger.Parse("-8675435878387378512222876"));

            Assert.AreEqual(LongInteger.Parse("8675435878387378512222876"), result);
        }
        public void Module_Zero()
        {
            var result = LongIntegerMath.Module(LongInteger.Parse("0"));

            Assert.AreEqual(LongInteger.Parse("0"), result);
        }
Exemple #20
0
        public void DivisionIntoSmall_AtSomeInteger()
        {
            var result = LongIntegerMath.DivisionIntoSmall(LongInteger.Parse("78652868637835437863"), 37);

            Assert.AreEqual(LongInteger.Parse("2125753206427984807"), result);
        }
 public void Create_Empty()
 {
     LongInteger.Parse("");
 }
Exemple #22
0
        public void DivisionIntoSmall_AtBigInteger()
        {
            var result = LongIntegerMath.DivisionIntoSmall(LongInteger.Parse("78652868637835437863"), 999);

            Assert.AreEqual(LongInteger.Parse("78731600238073511"), result);
        }
        public void Create_NegativeZero()
        {
            var number = LongInteger.Parse("-0");

            Assert.AreEqual("0", number.ToString());
        }
Exemple #24
0
        public void DivisionIntoSmall_AtRadix()
        {
            var result = LongIntegerMath.DivisionIntoSmall(LongInteger.Parse("78652868637835437863"), 1000);

            Assert.AreEqual(LongInteger.Parse("78652868637835437"), result);
        }
        public void Create_NegativeStartsWhithManyZero()
        {
            var number = LongInteger.Parse("-0000000000000005894");

            Assert.AreEqual("-5894", number.ToString());
        }
Exemple #26
0
        public void DivisionIntoSmall_AtIntegerGreaterThenRadix()
        {
            var result = LongIntegerMath.DivisionIntoSmall(LongInteger.Parse("78652868637835437863"), 5887637);

            Assert.AreEqual(LongInteger.Parse("13358987423619"), result);
        }
        public void Create_Integer()
        {
            var number = LongInteger.Parse("450025");

            Assert.AreEqual("450025", number.ToString());
        }
        public void Factorial()
        {
            var result = LongIntegerMath.Factorial(LongInteger.Parse("125"));

            Assert.AreEqual(LongInteger.Parse("188267717688892609974376770249160085759540364871492425887598231508353156331613598866882932889495923133646405445930057740630161919341380597818883457558547055524326375565007131770880000000000000000000000000000000"), result);
        }
 public void Create_Liter()
 {
     LongInteger.Parse("15fd");
 }
        public void Factorial_One()
        {
            var result = LongIntegerMath.Factorial(LongInteger.Parse("1"));

            Assert.AreEqual(LongInteger.Parse("1"), result);
        }