3,880
社区成员




#include <iostream>
#include <stdio.h>
void product(float p[],float q[],float c[])
{
c[0]=p[0]*q[0];
c[2]=p[1]*q[1];
c[1]=(p[0]+p[1])*(q[0]+q[1])-c[0]-c[2];
}
void plus(float p[],float q[],float c[],int n)
{
int i;
for(i=0;i<n;i++)c[i]=p[i]+q[i];
}
void mins(float p[],float q[],int n)
{
int i;
for(i=0;i<n;i++)
p[i]=p[i]-q[i];
}
void poly_product(float p[],float q[],float r0[],int n)
{
int k,i;
float *r1,*r2,*r3;
r1=new float[2*n-1];
r2=new float[2*n-1];
r3=new float[2*n-1];
for(i=0;i<2*n-1;i++)
r1[i]=r2[i]=r3[i]=0;
if(n==2)product(p,q,r0);
else{
k=n/2;
poly_product(p,q,r0,k);
poly_product(p+k,q+k,r1+2*k,k);
plus(p,p+k,r2+k,k);
plus(q,q+k,r3,k);
poly_product(r2+k,r3,r2+k,k);
mins(r2+k,r0,2*k+1);
mins(r2+k,r1+2*k,2*k-1);
plus(r0+2,r2+k,r0+k,2*k-1);
plus(r0+2*k,r1+2*k,r0+2*k,2*k-1);
}
delete r1;
delete r2;
delete r3;
}
int main(int argc, const char * argv[]) {
int i;
float p[5]={1,2,3,4};
float q[5]={4,3,2,1};
float r0[7];
poly_product(p,q,r0,4);
for (i=0;i<7;i++) std::cout<<r0[i]<<' ';
return 0;
}