DIMENSION A(16384),B(16384) CALL HEADER('SINGLE PRECISION U. OF SAN DIEGO BENCHMARK') CALL TIMRB !START OF TIMING LOOP N=16384 DA=1./(N-1) DO 1 I=1,N A(I)=DA*(I-1) 1 B(I)=0. CALL FFT2(A,B,N) CALL FFT2I(A,B,N) RMS=0. DO 2 I=1,N Z=A(I)-DA*(I-1) 2 RMS=RMS+Z*Z+B(I)*B(I) RMS=SQRT(RMS/N) WRITE(6,100)RMS 100 FORMAT(10X,E10.1) CALL TIMRE !END OF TIMING LOOP STOP END SUBROUTINE FFT2(AR,AI,N) DIMENSION AR(N),AI(N) MEX=ALOG(FLOAT(N))/.693147 NV2=N/2 NM1=N-1 J=1 DO 7 I=1,NM1 IF(I .GE. J) GO TO 5 TR=AR(J) TI=AI(J) AR(J)=AR(I) AI(J)=AI(I) AR(I)=TR AI(I)=TI 5 K=NV2 6 IF(K .GE. J) GO TO 7 J=J-K K=K/2 GO TO 6 7 J=J+K PI=3.14159265358979 DO 20 L=1,MEX LE=2**L LE1=LE/2 UR=1.0 UI=0. WR=COS(PI/LE1 ) WI=SIN(PI/LE1) DO 20 J=1,LE1 DO 10 I=J,N,LE IP=I+LE1 TR=AR(IP)*UR - AI(IP)*UI TI=AI(IP)*UR + AR(IP)*UI AR(IP)=AR(I)-TR AI(IP)=AI(I) - TI AR(I)=AR(I)+TR AI(I)=AI(I)+TI 10 CONTINUE UTEMP=UR UR=UR*WR - UI*WI UI=UI*WR + UTEMP*WI 20 CONTINUE RETURN END SUBROUTINE FFT2I(A,B,N) DIMENSION A(1),B(1) CALL FFT2(A,B,N) ANORM=1./N N1=1+N/2 DO 1 I=2,N1 NI=N-I+2 AI=A(I) A(I)=A(NI)*ANORM A(NI)=AI*ANORM AI=B(I) B(I)=B(NI)*ANORM 1 B(NI)=AI*ANORM A(1)=A(1)*ANORM B(1)=B(1)*ANORM RETURN END AR(I)=AR(I)+TR AI(I)=AI(I)+TI 10 CONTINUE UTEMP=UR UR=UR*WR - UI*WI UI=UI*WR + UTEMP*WI 20 CONTINUE RETURN END SUBROUTINE FFT2I(A,B,N) DIMENSION A(1),B(1) CALL FFT2(A,B,N) ANORM=1./N N1=1+N/2 DO 1 I=2,N1 NI=N-I+2 AI=A(I) A(I)=A(NI)*ANO