public void Division_FirstPolynomialCoeffs_SecondPolynomialCoeffs_ExpectedPolynomialCoeffs_Result(double[] firstPolynomialCoeffs, double[] secondPolynomialCoeffs, double[] expectedQuotientCoeffs, double[] expectedRemainderCoeffs)
        {
            PolynomialDivisionResult outputDivisionResult = (new Polynomial(firstPolynomialCoeffs)) / (new Polynomial(secondPolynomialCoeffs));
            Polynomial expectedQuotient  = new Polynomial(expectedQuotientCoeffs);
            Polynomial expectedRemainder = new Polynomial(expectedRemainderCoeffs);

            Assert.IsTrue(outputDivisionResult.Quotient.Equals(expectedQuotient));
            Assert.IsTrue(outputDivisionResult.Remainder.Equals(expectedRemainder));
        }
Пример #2
0
        public static PolynomialDivisionResult operator /(Polynomial a, Polynomial b)
        {
            if (IsZero(b))
            {
                throw new DivideByZeroException();
            }

            PolynomialDivisionResult w = default(PolynomialDivisionResult);

            Polynomial q = new Polynomial(new double[] { 0 }, new uint[] { 0 });
            Polynomial r = a;
            Polynomial t;

            while (!IsZero(r) && (r.Degree >= b.Degree))
            {
                t = new Polynomial(new double[] { (r.coefficients[r.coefficients.Length - 1] / b.coefficients[b.coefficients.Length - 1]) }, new uint[] { (r.exponents[r.exponents.Length - 1] - b.exponents[b.exponents.Length - 1]) });
                q = q + t;
                r = r - (t * b);
            }

            w.quotient  = q;
            w.remainder = r;
            return(w);
        }