#include <math.h>

void smooft(y,n,pts)
float y[],pts;
int n;
{
	int nmin,m=2,mo2,k,j;
	float yn,y1,rn1,fac,cnst;
	void realft();

	nmin=n+(int) (2.0*pts+0.5);
	while (m < nmin) m *= 2;
	cnst=pts/m,cnst=cnst*cnst;
	y1=y[1];
	yn=y[n];
	rn1=1.0/(n-1);
	for (j=1;j<=n;j++)
		y[j] += (-rn1*(y1*(n-j)+yn*(j-1)));
	for (j=n+1;j<=m;j++) y[j]=0.0;
	mo2=m >> 1;
	realft(y,mo2,1);
	y[1] /= mo2;
	fac=1.0;
	for (j=1;j<mo2;j++) {
		k=2*j+1;
		if (fac) {
			if ( (fac=(1.0-cnst*j*j)/mo2) < 0.0) fac=0.0;
			y[k]=fac*y[k];
			y[k+1]=fac*y[k+1];
		} else  y[k+1]=y[k]=0.0;
	}
	if ( (fac=(1.0-0.25*pts*pts)/mo2) < 0.0) fac=0.0;
	y[2] *= fac;
	realft(y,mo2,-1);
	for (j=1;j<=n;j++)
		y[j] += rn1*(y1*(n-j)+yn*(j-1));
}