SVECTOR* add_list_ss_r(SVECTOR *a, double min_non_zero) /* computes the linear combination of the SVECTOR list weighted by the factor of each SVECTOR */ { SVECTOR *oldsum,*sum,*f; WORD empty[2]; if(!a) { empty[0].wnum=0; sum=create_svector(empty,NULL,1.0); } else if(a && (!a->next)) { sum=smult_s(a,a->factor); } else { sum=multadd_ss_r(a,a->next,a->factor,a->next->factor,min_non_zero); for(f=a->next->next;f;f=f->next) { oldsum=sum; sum=multadd_ss_r(oldsum,f,1.0,f->factor,min_non_zero); free_svector(oldsum); } } return(sum); }
SVECTOR* multadd_ss(SVECTOR *a, SVECTOR *b, double fa, double fb) { return(multadd_ss_r(a,b,fa,fb,0)); }