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