divide method
Implementation
List<UGfPoly> divide(UGfPoly other) {
if (other.isZero) throw const UCodeDecodeException("Divide by zero");
UGfPoly quotient = UGfPoly(field, Int32List.fromList(<int>[0]));
UGfPoly remainder = this;
final int denominatorLeadingTerm = other.coefficient(other.degree);
final int inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);
while (remainder.degree >= other.degree && !remainder.isZero) {
final int degreeDifference = remainder.degree - other.degree;
final int scale = field.multiply(remainder.coefficient(remainder.degree), inverseDenominatorLeadingTerm);
final UGfPoly term = other.multiplyByMonomial(degreeDifference, scale);
quotient = quotient.addOrSubtract(UGfPoly.monomial(field, degreeDifference, scale));
remainder = remainder.addOrSubtract(term);
}
return <UGfPoly>[quotient, remainder];
}