/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C COMPUTE FOURIER TRANSFORM OF RIEMANN SPECTRUM C C 06/20/19 (DKC) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ #include <stdio.h> #include <math.h> #include "zero1.h" // 100000 zeta function zeros extern char *malloc(); /****************************************************************************** * * * INTERPOLATE BETWEEN ZEROS * * 04/02/10 (dkc) * * * ******************************************************************************/ double interp1(double ND, double ND1, unsigned int I, double init, double *out) { unsigned int i; double F,inc; inc=(ND1-ND)/(double)I; F=init; for (i=0; i<I; i++) { out[i]=F; F=F+inc; } return ND1; } // unsigned int hmax=300; // number of s values unsigned int MAXN=100000; // number of zeros used to compute sum unsigned int I=5; // number of values to interpolate between zeros (plus 1) unsigned int numlim=20000; // numlim*I must equal MAXN double factor=0.1; // s value increment, I must exactly divide 1.0/factor // void main() { unsigned int h,i,N; double *output; double init,sum,temp,s; FILE *Outfp; Outfp = fopen("out2g.dat","w"); output=(double*) malloc(800008); if (output==NULL) { printf("not enough memory \n"); return; } init=riem[0]; for (i=0; i<(numlim+1); i++) init=interp1(riem[i],riem[i+1],I,init,&output[i*I]); // for (h=1; h<=hmax; h++) { s=factor*(double)h; sum=0.0; temp=log(s*(double)I); for (N=1; N<=MAXN; N++) sum=sum+cos(temp*output[N-1]); printf("h=%d, s=%llf, sum=%llf \n",h,s,sum); if ((s*(double)I)==1.0) sum=0.0; fprintf(Outfp," %llf \n",-sum); } fclose(Outfp); return; }