Multiply( Polynomial polynomial ) { int orderMin = Math.Min(Order, polynomial.Order); if (orderMin > 3) { int orderMax = Math.Max(Order, polynomial.Order); this.EnsureSupportForOrder(orderMax); polynomial.EnsureSupportForOrder(orderMax); return(MultiplyKaratsuba( this.coefficients, polynomial.coefficients, this.order, polynomial.order, SizeOfOrder(orderMax), 0 )); } else { double[] coeff = new double[1 + Order + polynomial.Order]; for (int i = 0; i <= order; i++) { for (int j = 0; j <= polynomial.order; j++) { coeff[i + j] += coefficients[i] * polynomial.coefficients[j]; } } return(new Polynomial(coeff)); } }
public Polynomial Multiply(Polynomial polynomial) { int orderMin = Math.Min(Order,polynomial.Order); if(orderMin > 3) { int orderMax = Math.Max(Order,polynomial.Order); this.EnsureSupportForOrder(orderMax); polynomial.EnsureSupportForOrder(orderMax); return MultiplyKaratsuba(this.coefficients,polynomial.coefficients,this.order,polynomial.order,SizeOfOrder(orderMax),0); } else { double[] coeff = new double[1 + Order + polynomial.Order]; for(int i=0;i<=order;i++) for(int j=0;j<=polynomial.order;j++) coeff[i+j] += coefficients[i]*polynomial.coefficients[j]; return new Polynomial(coeff); } }