Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
		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);
			}
		}