Beispiel #1
0
 /// <summary>Divide numerator by denominator.</summary>
 /// <remarks>Divide numerator by denominator. If impossible in exact mode, use rounding.
 ///     </remarks>
 protected internal virtual BigDecimal TryDivide(BigDecimal numerator, BigDecimal
                                                 denominator)
 {
     try
     {
         return(numerator.Divide(denominator));
     }
     catch (ArithmeticException)
     {
         return(numerator.Divide(denominator, BigDecimal.RoundHalfUp));
     }
 }
Beispiel #2
0
        public BigDecimal ToBigDecimal(BigDecimal.Context c)
        {
            BigDecimal numerator   = BigDecimal.Create(this.numerator);
            BigDecimal denominator = BigDecimal.Create(this.denominator);

            return(numerator.Divide(denominator, c));
        }
Beispiel #3
0
            public static BigDecimal CalculateRate(BigDecimal rate, TimeSpan timeSpan)
            {
                BigDecimal seconds = GetSeconds(timeSpan);
                BigDecimal log     = Ln(rate);

                return(seconds.Divide(log, MathContext.Decimal64));
            }
Beispiel #4
0
        public static Number operator %(Number a, Number b)
        {
            BigDecimal rem;

            BigDecimal.Divide(new BigDecimal.Config(), a.value, b.value, 0, out rem);
            return(rem);
        }
        static BigDecimal CalcTerm(int n)
        {
            Console.Write('.');
            BigDecimal neg1 = new BigDecimal(-1);

            neg1 = neg1.Pow(n);
            neg1 = neg1.Multiply(fact(4 * n));

            BigDecimal t1b = new BigDecimal(4);

            t1b = t1b.Pow(n);
            t1b = t1b.Multiply(fact(n));
            t1b = t1b.Pow(4);

            neg1 = neg1.Divide(t1b, acc, RoundingMode.HalfUp);

            BigDecimal t2 = new BigDecimal(21460);

            t2 = t2.Multiply(n);
            t2 = t2.Add(1123);

            BigDecimal t2b = new BigDecimal(882);

            t2b = t2b.Pow(2 * n);

            t2 = t2.Divide(t2b, acc, RoundingMode.HalfUp);

            return(neg1.Multiply(t2));
        }
Beispiel #6
0
        public void starinfo()
        {
            Console.WriteLine("======[Star]======");
            Console.WriteLine("name :" + getType());
            Console.WriteLine("Diameter :" + getDiameter() + " m");
            Console.WriteLine("Mass :" + getMass() + " Kg");
            Console.WriteLine("Temp :" + getSurfaceTemperature() + " K");
            BigDecimal dia = BigDecimal.Parse(diameter);

            this.density = base.calDens(dia.Divide(2));

            Console.WriteLine("Density : " + base.getdensity() + " Kg / m³");
            BigDecimal lum = luminosityOfAStar(getDiameter(), getSurfaceTemperature());

            volume(getDiameter());
            Console.WriteLine("Volume : " + getVolume().ToBigIntegerExact() + "  m³");
            Console.WriteLine("luminosity :" + getStarluminosity().ToBigIntegerExact() + " watts");
            BigDecimal eng = StarsEnergy(this.mass, this.massUsedUp, this.massAtCenter);

            Console.WriteLine("Energy :" + getEnergy().ToBigIntegerExact() + " J");
            StarsLifeSpan(lum.ToBigIntegerExact(), eng.ToBigIntegerExact());
            Console.WriteLine("Life Span: " + getAge() + " Years");
            gPull(mass, BigInteger.Parse("5972000000000000000000000"));
            Console.WriteLine("Gravitaional Pull: " + getgp() + " Newtons");
            if (base.getSpin() == null)
            {
                Console.WriteLine("Spin: Null Km/S");
                return;
            }
            Console.WriteLine("Spin: " + base.getSpin() + " Km/S");
        }
Beispiel #7
0
        private static BigDecimal Calculate(string[] a, char c)
        {
            BigDecimal value = BigDecimal.Parse(a[0].Trim());

            for (int i = 1; i < a.Length; i++)
            {
                if (c == '+')
                {
                    value = value.Add(BigDecimal.Parse(a[i].Trim()));
                }
                else if (c == '-')
                {
                    value = value.Subtract(BigDecimal.Parse(a[i].Trim()));
                }
                else if (c == '*')
                {
                    value = value.Multiply(BigDecimal.Parse(a[i].Trim()));
                }
                else
                {
                    value = value.Divide(BigDecimal.Parse(a[i].Trim()), 5, RoundingMode.HalfEven);
                }
            }
            return(value);
        }
        /// <summary>
        /// Phân số tối giản.
        /// </summary>
        public void Minimalism()
        {
            BigDecimal n = Minimalism(this.Numerator, this.Denominator);

            Numerator   = Numerator.Divide(n.Abs());
            Denominator = Denominator.SetScale(5, RoundingMode.HalfEven);
            Denominator = Denominator.Divide(n.Abs());
        }
Beispiel #9
0
        public void Divide(string result, string left, string right)
        {
            var resultDecimal = BigDecimal.Parse(result, CultureInfo.InvariantCulture);
            var leftDecimal   = BigDecimal.Parse(left, CultureInfo.InvariantCulture);
            var rightDecimal  = BigDecimal.Parse(right, CultureInfo.InvariantCulture);

            Assert.Equal(resultDecimal, BigDecimal.Divide(leftDecimal, rightDecimal));
        }
Beispiel #10
0
        public static BigDecimal /*!*/ Div(RubyContext /*!*/ context, BigDecimal /*!*/ self, BigDecimal /*!*/ other, int n)
        {
            if (n < 0)
            {
                throw RubyExceptions.CreateArgumentError("argument must be positive");
            }
            BigDecimal remainder;

            return(BigDecimal.Divide(GetConfig(context), self, other, n, out remainder));
        }
Beispiel #11
0
        /// <exclude/>
        /// <summary>
        /// Convert a time in the Universal Time Scale into another time scale. The
        /// division used to do the conversion rounds down.
        /// NOTE: This is an internal routine used by the tool that generates the to
        /// and from limits. Use it at your own risk.
        /// </summary>
        ///
        /// <param name="universalTime">the time in the Universal Time scale</param>
        /// <param name="timeScale">the time scale to convert to</param>
        /// <returns>the time in the given time scale</returns>
        public static BigDecimal ToBigDecimalTrunc(BigDecimal universalTime,
                                                   int timeScale)
        {
            UniversalTimeScale.TimeScaleData data = GetTimeScaleData(timeScale);
            BigDecimal units_0       = new BigDecimal(data.units);
            BigDecimal epochOffset_1 = new BigDecimal(data.epochOffset);

            return(universalTime.Divide(units_0, IBM.ICU.Math.BigDecimal.ROUND_DOWN).Subtract(
                       epochOffset_1));
        }
Beispiel #12
0
        public void Divide_ParametersFromData_Pass()
        {
            var    left     = new BigDecimal(TestContext.DataRow[0].ToString());
            var    right    = new BigDecimal(TestContext.DataRow[1].ToString());
            var    expected = TestContext.DataRow[2].ToString();
            string message  = TestContext.DataRow[3].ToString();

            var actual = left.Divide(right, RoundingMode.Up);

            Assert.AreEqual(expected, actual.ToString(), message);
        }
Beispiel #13
0
 public static BigDecimal /*!*/ Div(RubyContext /*!*/ context, BigDecimal /*!*/ self, BigDecimal /*!*/ other)
 {
     if (BigDecimal.IsFinite(other))
     {
         BigDecimal.Config config = GetConfig(context);
         BigDecimal        remainder;
         BigDecimal        result = BigDecimal.Divide(config, self, other, 0, out remainder);
         if (BigDecimal.IsFinite(result))
         {
             return(BigDecimal.IntegerPart(config, result));
         }
     }
     return(BigDecimal.NaN);
 }
Beispiel #14
0
        public void Red_Super_Giant()
        {
            Random ran = new Random();

            diameter           = range(BigInteger.Parse("1000000000000"), BigInteger.Parse("2000000000000"));
            mass               = range(Red_Super_Giantmax, Red_Super_Giantmin);
            surfaceTemperature = ran.Next(1000, 3500);
            this.massUsedUp    = BigDecimal.Parse("0.00147441058");
            this.massAtCenter  = BigDecimal.Parse(".4");
            BigDecimal dia = BigDecimal.Parse(diameter);

            spin    = BigInteger.Parse("1");
            density = calDens(dia.Divide(num2));
        }
Beispiel #15
0
        public void White_Dwarf()
        {
            Random ran = new Random();

            diameter           = range(BigInteger.Parse("6000000"), BigInteger.Parse("12000000"));
            mass               = range(White_Dwarfmax, White_Dwarfmin);
            surfaceTemperature = ran.Next(500000, 100000);
            this.massUsedUp    = BigDecimal.Parse(".007");
            this.massAtCenter  = BigDecimal.Parse("1");
            BigDecimal dia = BigDecimal.Parse(diameter);

            spin    = BigInteger.Parse("2000");
            density = calDens(dia.Divide(num2));
        }
Beispiel #16
0
        public void Massive_Star()
        {
            Random ran = new Random();

            diameter           = range(BigInteger.Parse("5000000000"), BigInteger.Parse("100000000000"));
            mass               = range(Massive_Starmax, Massive_Starmin);
            surfaceTemperature = ran.Next(30000, 60000);
            this.massUsedUp    = BigDecimal.Parse(".007");
            this.massAtCenter  = BigDecimal.Parse(".24");
            BigDecimal dia = BigDecimal.Parse(diameter);

            spin    = range(BigInteger.Parse("200"), BigInteger.Parse("350"));
            density = calDens(dia.Divide(num2));
        }
Beispiel #17
0
        public void Black_hole()
        {
            Random ran = new Random();

            diameter           = range(BigInteger.Parse("100000000000"), BigInteger.Parse("10000000000000000"));
            mass               = range(Black_holemax, Black_holemin);
            surfaceTemperature = 1;
            this.massUsedUp    = BigDecimal.Parse(".007");
            this.massAtCenter  = BigDecimal.Parse("1");
            BigDecimal dia = BigDecimal.Parse(diameter);

            spin    = range(BigInteger.Parse("50000"), BigInteger.Parse("251825"));
            density = calDens(dia.Divide(num2));
        }
Beispiel #18
0
 public Number Divide(Number number)
 {
     if (numberState == 0)
     {
         if (number.numberState == 0)
         {
             BigDecimal divBy = number.bigDecimal;
             if (divBy.CompareTo(BdZero) != 0)
             {
                 return(new Number(NumberState.None, bigDecimal.Divide(divBy, 10, RoundingMode.HalfUp)));
             }
         }
     }
     // Return NaN if we can't divide
     return(new Number(NumberState.NotANumber, null));
 }
Beispiel #19
0
        public BigDecimal volume(BigInteger diameter)
        {
            BigDecimal vol  = BigDecimal.Parse("0");
            BigDecimal radi = BigDecimal.Parse(diameter);
            BigDecimal two  = BigDecimal.Parse("2.0");
            BigDecimal FOT  = BigDecimal.Parse("1.33333333333");
            BigDecimal PI   = BigDecimal.Parse(Math.PI.ToString());


            radi = radi.Divide(two);
            vol  = FOT * (PI);
            vol  = vol * (radi.Pow(3));

            setVolume(vol);
            return(vol);
        }
        public static String FormatBytes(long bytes)
        {
            long         inputBytes   = bytes;
            BigDecimal   bigBytes     = new BigDecimal(bytes);
            NumberFormat numberFormat = new DecimalFormat();

            numberFormat.MaximumFractionDigits = 1;
            int index;

            for (index = 0; index < BYTES_UNIT_LIST.Length; index++)
            {
                if (inputBytes < CONVERSION_BASE)
                {
                    break;
                }
                inputBytes /= CONVERSION_BASE;
            }
            return(numberFormat.Format(bigBytes.Divide(new BigDecimal(BASE_LIST[index]))) + " " + BYTES_UNIT_LIST[index]);
        }
Beispiel #21
0
        private static BigDecimal SqrtNewtonRaphson(BigDecimal c, BigDecimal xn, BigDecimal precision)
        {
            BigDecimal fx  = xn.Pow(2).Add(c.Negate());
            BigDecimal fpx = xn.Multiply(new BigDecimal(2));
            BigDecimal xn1 = fx.Divide(fpx, 2 * SqrtDig.ToInt32(), RoundingMode.HalfDown);

            xn1 = xn.Add(xn1.Negate());
            //----
            BigDecimal currentSquare    = xn1.Pow(2);
            BigDecimal currentPrecision = currentSquare.Subtract(c);

            currentPrecision = currentPrecision.Abs();
            if (currentPrecision.CompareTo(precision) <= -1)
            {
                return(xn1);
            }

            return(SqrtNewtonRaphson(c, xn1, precision));
        }
Beispiel #22
0
        /// <summary>
        /// Convert <seealso cref="BigInteger"/> value to <seealso cref="BigDecimal"/> value. </summary>
        /// <param name="bgInt"> <seealso cref="BigInteger"/> value </param>
        /// <param name="precision">  the precision value for VET and VeThor it is 18, means 10 power 18 </param>
        /// <param name="scale"> the remain digits number of fractional part. </param>
        /// <returns> <seealso cref="BigDecimal"/> value. </returns>
        public static BigDecimal BigIntToBigDecimal(BigInteger bgInt, int precision, int scale)
        {
            if (bgInt == null || precision < 0 || scale < 0)
            {
                return(null);
            }

            var integer2 = new System.Numerics.BigInteger(bgInt.ToByteArray());

            if (scale < precision)
            {
                integer2 /= (int)Math.Pow(10, scale);
                precision = precision - scale;
            }
            var dec = new BigDecimal(integer2);
            var precisionDecimal = BigDecimal.Pow(10, precision);
            var value            = BigDecimal.Divide(dec, precisionDecimal);

            return(value);
        }
Beispiel #23
0
        public SqlNumber Divide(SqlNumber value)
        {
            if (State == NumericState.None)
            {
                if (value.State == NumericState.None)
                {
                    if (IsNull || value.IsNull)
                    {
                        return(Null);
                    }

                    BigDecimal divBy = value.innerValue;
                    if (divBy.CompareTo(BigDecimal.Zero) != 0)
                    {
                        return(new SqlNumber(NumericState.None, innerValue.Divide(divBy, 10, RoundingMode.HalfUp)));
                    }
                }
            }

            // Return NaN if we can't divide
            return(new SqlNumber(NumericState.NotANumber, null));
        }
 public void DivideBigDecimalScaleRoundingModeFloor()
 {
     String a = "3736186567876876578956958765675671119238118911893939591735";
     int aScale = 100;
     String b = "74723342238476237823787879183470";
     int bScale = 15;
     int newScale = 45;
     RoundingMode rm = RoundingMode.Floor;
     String c = "0E-45";
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, newScale, rm);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(newScale, result.Scale, "incorrect scale");
 }
Beispiel #25
0
 public static int ErrorToPrecision(BigDecimal x, BigDecimal xerr)
 {
     return ErrorToPrecision(xerr.Divide(x, MathContext.Decimal64).ToDouble());
 }
Beispiel #26
0
        private void Poisson(byte[] discreteRow)
        {
            var   descreteTable = GetDiscreteTable(discreteRow);
            float expectedValue = GetDiscreteRowExpectedValue(discreteRow);
            float result        = 0f;

            var gridTable = (DataGridView)tabPage2.Controls["dataGridtab2"];

            gridTable.Columns.Add("a", "Штат");
            gridTable.Columns.Add("b", "Частота");
            gridTable.Columns.Add("c", "Теоритическая частота");
            gridTable.Columns.Add("d", "Хи-наблюдаемое");

            foreach (DataGridViewColumn column in gridTable.Columns)
            {
                column.SortMode = DataGridViewColumnSortMode.NotSortable;
            }

            gridTable.Rows.Add(descreteTable.GetLength(1) + 3);

            BigDecimal[] P = new BigDecimal[descreteTable.GetLength(1)];
            decimal[]    theoreticalFrequency = new Decimal[descreteTable.GetLength(1)];

            decimal collectionSize = (decimal)descreteTable[3, descreteTable.GetLength(1) - 1];

            for (int i = 0; i < descreteTable.GetLength(1); i++)
            {
                double x = Math.Pow(expectedValue, i) * Math.Exp(-expectedValue);
                P[i] = BigDecimal.Divide(x, Factorial(i));

                theoreticalFrequency[i] = collectionSize * (decimal)P[i];

                gridTable.Rows[i].Cells[0].Value = descreteTable[0, i];
                gridTable.Rows[i].Cells[1].Value = descreteTable[1, i];
                gridTable.Rows[i].Cells[2].Value = (double)theoreticalFrequency[i];
            }

            float Hi = 0F;

            for (int i = 0; i < descreteTable.GetLength(1); i++)
            {
                float   currHi    = 0;
                decimal frequency = (int)descreteTable[1, i];
                currHi = (float)(Math.Pow((double)(frequency - theoreticalFrequency[i]), 2) / (double)theoreticalFrequency[i]);
                Hi    += currHi;
                gridTable.Rows[i].Cells[3].Value = currHi;
            }

            int    d = descreteTable.GetLength(1) > 32 ? 30 : descreteTable.GetLength(1) - 1 - 1;
            double J = Math.Abs(Hi - d) / Math.Sqrt(2 * descreteTable.GetLength(1) + 2.4);
            double R = Math.Abs(Hi - d) / Math.Sqrt(2 * d);

            gridTable.Rows[descreteTable.GetLength(1)].Cells[0].Value = "Критерий Ястремского  (надо <= 3):";
            gridTable.Rows[descreteTable.GetLength(1)].Cells[1].Value = J;

            gridTable.Rows[descreteTable.GetLength(1) + 1].Cells[0].Value = "Критерий Романовского (надо <= 3):";
            gridTable.Rows[descreteTable.GetLength(1) + 1].Cells[1].Value = R;

            gridTable.Rows[descreteTable.GetLength(1)].Cells[2].Value     = "Критерий Пирсона:";
            gridTable.Rows[descreteTable.GetLength(1)].Cells[3].Value     = Hi;
            gridTable.Rows[descreteTable.GetLength(1) + 1].Cells[2].Value = "По таблице критических значений:";
            gridTable.Rows[descreteTable.GetLength(1) + 1].Cells[3].Value = hisqr[d];
            gridTable.Rows[descreteTable.GetLength(1) + 2].Cells[0].Value = "Вывод:";
            gridTable.Rows[descreteTable.GetLength(1) + 2].Cells[1].Value = J < 3 || R < 3 ? "Гипотеза подтверждена" : "Гипотеза не подтверждена";
            gridTable.Rows[descreteTable.GetLength(1) + 2].Cells[3].Value = Hi >= hisqr[d] ? "Гипотеза не подтверждена" : "Гипотеза подтверждена";

            var cell = gridTable.Rows[descreteTable.GetLength(1) + 2].Cells[3];

            cell.Style.Font = new Font(FontFamily.GenericMonospace, 8, FontStyle.Bold);
            cell            = gridTable.Rows[descreteTable.GetLength(1) + 2].Cells[1];
            cell.Style.Font = new Font(FontFamily.GenericMonospace, 8, FontStyle.Bold);
        }
Beispiel #27
0
 public static BigDecimal DivideRound(BigDecimal x, BigDecimal y)
 {
     /* The estimation of the relative error in the result is |err(y)/y|+|err(x)/x|
         */
     var mc = new MathContext(System.Math.Min(x.Precision, y.Precision));
     BigDecimal resul = x.Divide(y, mc);
     /* If x and y are precise integer values that may have common factors,
         * the method above will truncate trailing zeros, which may result in
         * a smaller apparent accuracy than starte... add missing trailing zeros now.
         */
     return ScalePrecision(resul, mc);
 }
Beispiel #28
0
 public static BigDecimal DivideRound(BigDecimal x, int n)
 {
     // The estimation of the relative error in the result is |err(x)/x|
     var mc = new MathContext(x.Precision);
     return x.Divide(new BigDecimal(n), mc);
 }
 public void DivideBigDecimalScaleMathContextHALF_UP()
 {
     String a = "3736186567876876578956958765675671119238118911893939591735";
     int aScale = 45;
     String b = "134432345432345748766876876723342238476237823787879183470";
     int bScale = 70;
     int precision = 21;
     RoundingMode rm = RoundingMode.HalfUp;
     MathContext mc = new MathContext(precision, rm);
     String c = "2.77923185514690367475E+26";
     int resScale = -6;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, mc);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
 public void DivideByZero()
 {
     String a = "1231212478987482988429808779810457634781384756794987";
     int aScale = 15;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = BigDecimal.ValueOf(0L);
     Assert.Throws<ArithmeticException>(() => aNumber.Divide(bNumber), "ArithmeticException has not been caught");
 }
Beispiel #31
0
        public void DivideTest2()
        {
            var res = BigDecimal.Divide(new BigDecimal(10), new BigDecimal(8));

            Assert.AreEqual(new BigDecimal(1.25m), res);
        }
Beispiel #32
0
    public void TestTruncateOnAllArithmeticOperations()
    {
        var savePrecision = BigDecimal.Precision;

        BigDecimal mod1 = BigDecimal.Parse("3141592653589793238462643383279502");
        BigDecimal mod2 = BigDecimal.Parse("27182818284590452");
        BigDecimal neg1 = BigDecimal.Parse("-3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647");
        BigDecimal lrg1 = BigDecimal.Parse("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647");
        BigDecimal lrg2 = BigDecimal.Parse("2.718281828459045235360287471352662497757247093699959574966967");

        var expected1  = "5.859874482";
        var expected2  = "0.4233108251";
        var expected3  = "8.5397342226";
        var expected4  = "0.8652559794";
        var expected5  = "9.869604401";
        var expected6  = "148.4131591";
        var expected7  = "8003077319547306";
        var expected8  = "-3.1415926535";
        var expected9  = "3";
        var expected10 = "4";
        var expected11 = "3.1415926535";

        var actual1  = "";
        var actual2  = "";
        var actual3  = "";
        var actual4  = "";
        var actual5  = "";
        var actual6  = "";
        var actual7  = "";
        var actual8  = "";
        var actual9  = "";
        var actual10 = "";
        var actual11 = "";

        try
        {
            BigDecimal.Precision      = 10;
            BigDecimal.AlwaysTruncate = true;

            TestContext.WriteLine($"E = {BigDecimal.E}");
            TestContext.WriteLine($"{new BigDecimal(lrg1.Mantissa, lrg1.Exponent)}");
            TestContext.WriteLine($"{new BigDecimal(lrg2.Mantissa, lrg2.Exponent)}");

            BigDecimal result1  = BigDecimal.Add(lrg1, lrg2);
            BigDecimal result2  = BigDecimal.Subtract(lrg1, lrg2);
            BigDecimal result3  = BigDecimal.Multiply(lrg1, lrg2);
            BigDecimal result4  = BigDecimal.Divide(lrg2, lrg1);
            BigDecimal result5  = BigDecimal.Pow(lrg1, 2);
            BigDecimal result6  = BigDecimal.Exp(new BigInteger(5));
            BigDecimal result7  = BigDecimal.Mod(mod1, mod2);
            BigDecimal result8  = BigDecimal.Negate(lrg1);
            BigDecimal result9  = BigDecimal.Floor(lrg1);
            BigDecimal result10 = BigDecimal.Ceiling(lrg1);
            BigDecimal result11 = BigDecimal.Abs(lrg1);

            actual1  = result1.ToString();
            actual2  = result2.ToString();
            actual3  = result3.ToString();
            actual4  = result4.ToString();
            actual5  = result5.ToString();
            actual6  = result6.ToString();
            actual7  = result7.ToString();
            actual8  = result8.ToString();
            actual9  = result9.ToString();
            actual10 = result10.ToString();
            actual11 = result11.ToString();
        }
        finally
        {
            BigDecimal.Precision      = savePrecision;
            BigDecimal.AlwaysTruncate = false;
        }

        Assert.AreEqual(expected1, actual1, $"Test Truncate On All Arithmetic Operations  - #1: ");
        Assert.AreEqual(expected2, actual2, $"Test Truncate On All Arithmetic Operations  - #2: ");
        Assert.AreEqual(expected3, actual3, $"Test Truncate On All Arithmetic Operations  - #3: ");
        Assert.AreEqual(expected4, actual4, $"Test Truncate On All Arithmetic Operations  - #4: ");
        Assert.AreEqual(expected5, actual5, $"Test Truncate On All Arithmetic Operations  - #5: ");
        StringAssert.StartsWith(expected6, actual6, $"Test Truncate On All Arithmetic Operations  - #6: ");
        Assert.AreEqual(expected7, actual7, $"Test Truncate On All Arithmetic Operations  - #7: ");
        Assert.AreEqual(expected8, actual8, $"Test Truncate On All Arithmetic Operations  - #8: ");
        Assert.AreEqual(expected9, actual9, $"Test Truncate On All Arithmetic Operations  - #9: ");
        Assert.AreEqual(expected10, actual10, $"Test Truncate On All Arithmetic Operations - #10: ");
        Assert.AreEqual(expected11, actual11, $"Test Truncate On All Arithmetic Operations - #11: ");

        Assert.AreEqual(5000, BigDecimal.Precision, "Restore Precision to 5000");
    }
        public void DivideExpLessZero()
        {
            // Divide: local variable exponent is less than zero

            const string a = "1231212478987482988429808779810457634781384756794987";
            const int aScale = 15;
            const string b = "747233429293018787918347987234564568";
            const int bScale = 10;
            string c = "1.64770E+10";
            const int resScale = -5;

            BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
            BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
            BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.Ceiling);
            Assert.AreEqual(c, result.ToString(), "incorrect value");
            Assert.AreEqual(resScale, result.Scale, "incorrect scale");
        }
Beispiel #34
0
        public void DivideTest()
        {
            var res = BigDecimal.Divide(new BigDecimal(10), new BigDecimal(2));

            Assert.AreEqual(new BigDecimal(5), res);
        }
 public void DivideBigDecimalScaleRoundingModeHalfEven()
 {
     String a = "3736186567876876578956958765675671119238118911893939591735";
     int aScale = 5;
     String b = "74723342238476237823787879183470";
     int bScale = 15;
     int newScale = 7;
     RoundingMode rm = RoundingMode.HalfEven;
     String c = "500002603731642864013619132621009722.1803810";
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, newScale, rm);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(newScale, result.Scale, "incorrect scale");
 }
 public void DivideBigDecimalScaleRoundingModeHalfUp()
 {
     String a = "3736186567876876578956958765675671119238118911893939591735";
     int aScale = -51;
     String b = "74723342238476237823787879183470";
     int bScale = 45;
     int newScale = 3;
     RoundingMode rm = RoundingMode.HalfUp;
     String c = "50000260373164286401361913262100972218038099522752460421" +
                "05959924024355721031761947728703598332749334086415670525" +
                "3761096961.670";
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, newScale, rm);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(newScale, result.Scale, "incorrect scale");
 }
 public void DivideBigDecimalScaleRoundingModeUp()
 {
     String a = "-37361671119238118911893939591735";
     int aScale = 10;
     String b = "74723342238476237823787879183470";
     int bScale = -15;
     int newScale = 31;
     RoundingMode rm = RoundingMode.Up;
     String c = "-5.00000E-26";
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, newScale, rm);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(newScale, result.Scale, "incorrect scale");
 }
Beispiel #38
0
        static void CalcPi(int t)
        {
            Console.WriteLine("You have entered " + t + " iterations");
            Console.WriteLine("Calculating constant...");

            acc = t * 20;
            BigDecimal c = new BigDecimal(1);

            c = c.Divide(882, acc, RoundingMode.HalfUp);

            Console.WriteLine("Calculating summation...");
            Console.ForegroundColor = ConsoleColor.Blue;

            BigDecimal sumTerm = new BigDecimal(0, acc);

            Parallel.For(0, t, i =>
            {
                BigDecimal a = CalcTerm(i);

                lock (l0ck)
                {
                    sumTerm = sumTerm.Add(a);
                }
            });

            Console.ForegroundColor = ConsoleColor.White;
            Console.Write('\n');

            c = c.Multiply(sumTerm);

            BigDecimal pi1 = new BigDecimal(1);

            pi1 = pi1.Divide(c, acc, RoundingMode.HalfUp);
            pi1 = pi1.Multiply(4);

            string pi = pi1.ToString();

            Console.WriteLine("Printing reliable digits...");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("π≈");
            //Check digits of pi against source
            int          idx = 0; int digits = 1;
            StreamReader sr = new StreamReader(File.OpenRead("pi.txt"));

            while (!sr.EndOfStream && (idx < pi.Length))
            {
                char ch = (char)sr.Read();
                if (ch == pi[idx])
                {
                    Console.Write(pi[idx]);
                    digits++;
                }

                idx++;
            }

            Console.ForegroundColor = ConsoleColor.White;
            Console.Write('\n');

            Console.WriteLine("Calculated " + digits + " digits of pi.");
        }
        public void DivideExpGreaterZero()
        {
            // Divide: local variable exponent is greater than zero

            String a = "1231212478987482988429808779810457634781384756794987";
            int aScale = -15;
            String b = "747233429293018787918347987234564568";
            int bScale = 20;
            String c = "1.647694590099337641891395686052735285121058381E+50";
            int resScale = -5;
            BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
            BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
            BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.Ceiling);
            Assert.AreEqual(c, result.ToString(), "incorrect value");
            Assert.AreEqual(resScale, result.Scale, "incorrect scale");
        }
 public void DivideBigDecimalScaleMathContextUp()
 {
     String a = "3736186567876876578956958765675671119238118911893939591735";
     int aScale = 15;
     String b = "748766876876723342238476237823787879183470";
     int bScale = 10;
     int precision = 21;
     RoundingMode rm = RoundingMode.Up;
     MathContext mc = new MathContext(precision, rm);
     String c = "49897861180.2562512996";
     int resScale = 10;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, mc);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
Beispiel #41
0
        public static BigDecimal Sqrt(BigDecimal x, MathContext mc)
        {
            if (x.CompareTo(BigDecimal.Zero) < 0)
                throw new ArithmeticException("negative argument " + x + " of square root");

            if (x.Abs().Subtract(new BigDecimal(System.Math.Pow(10d, -mc.Precision))).CompareTo(BigDecimal.Zero) < 0)
                return ScalePrecision(BigDecimal.Zero, mc);

            /* start the computation from a double precision estimate */
            var s = new BigDecimal(System.Math.Sqrt(x.ToDouble()), mc);
            BigDecimal half = BigDecimal.ValueOf(2);

            /* increase the local accuracy by 2 digits */
            var locmc = new MathContext(mc.Precision + 2, mc.RoundingMode);

            /* relative accuracy requested is 10^(-precision)
                */
            double eps = System.Math.Pow(10.0, -mc.Precision);
            while (true) {
                /* s = s -(s/2-x/2s); test correction s-x/s for being
                        * smaller than the precision requested. The relative correction is 1-x/s^2,
                        * (actually half of this, which we use for a little bit of additional protection).
                        */
                if (System.Math.Abs(BigDecimal.One.Subtract(x.Divide(s.Pow(2, locmc), locmc)).ToDouble()) < eps)
                    break;
                s = s.Add(x.Divide(s, locmc)).Divide(half, locmc);
            }

            return s;
        }
Beispiel #42
0
        public void DivideTest3()
        {
            var res = BigDecimal.Divide(new BigDecimal(101.0008m), new BigDecimal(0.05m));

            Assert.AreEqual(new BigDecimal(2020.016m), res);
        }
 public void DivideRemainderIsZero()
 {
     String a = "8311389578904553209874735431110";
     int aScale = -15;
     String b = "237468273682987234567849583746";
     int bScale = 20;
     String c = "3.5000000000000000000000000000000E+36";
     int resScale = -5;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.Ceiling);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
 public void DivideRoundHalfEvenPos()
 {
     String a = "92948782094488478231212478987482988429808779810457634781384756794987";
     int aScale = -24;
     String b = "7472334223847623782375469293018787918347987234564568";
     int bScale = 13;
     String c = "1.24390557635720517122423359799284E+53";
     int resScale = -21;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.HalfEven);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
 public void DivideExceptionRoundingMode()
 {
     String a = "1231212478987482988429808779810457634781384756794987";
     const int aScale = 15;
     String b = "747233429293018787918347987234564568";
     const int bScale = 10;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     Assert.Throws<ArithmeticException>(() => aNumber.Divide(bNumber, RoundingMode.Unnecessary));
 }
Beispiel #46
0
        public static BigDecimal /*!*/ Divide(RubyContext /*!*/ context, BigDecimal /*!*/ self, BigDecimal /*!*/ other)
        {
            BigDecimal remainder;

            return(BigDecimal.Divide(GetConfig(context), self, other, 0, out remainder));
        }
Beispiel #47
0
        public void DivideBigDecimalII()
        {
            BigDecimal divd1 = new BigDecimal(value2, 4);
            BigDecimal divd2 = BigDecimal.Parse("0.0023");
            BigDecimal divd3 = divd1.Divide(divd2, 3, RoundingMode.HalfUp);
            Assert.IsTrue(divd3.ToString().Equals("536285217.391") && divd3.Scale == 3, "1233456/0.0023 is not correct");
            divd2 = new BigDecimal(1345.5E-02D);
            divd3 = divd1.Divide(divd2, 0, RoundingMode.Down);
            Assert.IsTrue(divd3.ToString().Equals("91672") && divd3.Scale == 0,
                          "1233456/13.455 is not correct or does not have the correct scale");
            divd2 = new BigDecimal(0000D);

            Assert.Throws<ArithmeticException>(() => divd1.Divide(divd2, 4, RoundingMode.Down));
        }
 public void DivideRoundHalfUpNeg1()
 {
     String a = "-92948782094488478231212478987482988798104576347813847567949855464535634534563456";
     int aScale = -24;
     String b = "74723342238476237823754692930187879183479";
     int bScale = 13;
     String c = "-1.2439055763572051712242335979928354832010167729111113605E+76";
     int resScale = -21;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.HalfUp);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
 public void DivideRoundHalfUpNeg2()
 {
     String a = "-37361671119238118911893939591735";
     int aScale = 10;
     String b = "74723342238476237823787879183470";
     int bScale = 15;
     String c = "-1E+5";
     int resScale = -5;
     BigDecimal aNumber = new BigDecimal(BigInteger.Parse(a), aScale);
     BigDecimal bNumber = new BigDecimal(BigInteger.Parse(b), bScale);
     BigDecimal result = aNumber.Divide(bNumber, resScale, RoundingMode.HalfUp);
     Assert.AreEqual(c, result.ToString(), "incorrect value");
     Assert.AreEqual(resScale, result.Scale, "incorrect scale");
 }
Beispiel #50
-1
        public void DivideBigDecimalI()
        {
            BigDecimal divd1 = new BigDecimal(value, 2);
            BigDecimal divd2 = BigDecimal.Parse("2.335");
            BigDecimal divd3 = divd1.Divide(divd2, RoundingMode.Up);
            Assert.IsTrue(divd3.ToString().Equals("52873.27") && divd3.Scale == divd1.Scale, "123459.08/2.335 is not correct");
            Assert.IsTrue(divd3.UnscaledValue.ToString().Equals("5287327"),
                          "the unscaledValue representation of 123459.08/2.335 is not correct");
            divd2 = new BigDecimal(123.4D);
            divd3 = divd1.Divide(divd2, RoundingMode.Down);
            Assert.IsTrue(divd3.ToString().Equals("1000.47") && divd3.Scale == 2, "123459.08/123.4  is not correct");
            divd2 = new BigDecimal(000D);

            Assert.Throws<ArithmeticException>(() => divd1.Divide(divd2, RoundingMode.Down));
        }