aboutsummaryrefslogtreecommitdiff
path: root/math/ieee/chap1/time/time12.f
blob: 774c2cc9e2a2e8a61e107124f893bd3a9cb289bc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
c-----------------------------------------------------------------------
c
c-----------------------------------------------------------------------
c
      parameter  (SIZE = 1024, ILOOP = 100)
      complex  a, w
      real     breal(SIZE), bimag(SIZE), qbreal(SIZE), qbimag(SIZE)
c
      ioutd = i1mach(2)
      nn = SIZE
      tpi = 8.*atan(1.)
      tpion = tpi/float(nn)
      w = cmplx(cos(tpion),-sin(tpion))
c
c generate a**k as test function
c result to b(i) for modification by dft and idft subroutines and
c a copy to qb(i) to compare final result with for error difference.
c
      a = (.9,.3)
      breal(1) = 1.0
      bimag(1) = 0.0
      qbreal(1) = 1.0
      qbimag(1) = 0.0
      do 10 k=2,nn
        w = a**(k-1)
        breal(k) = real(w)
        bimag(k) = aimag(w)
        qbreal(k) = breal(k)
        qbimag(k) = bimag(k)
  10  continue
c
c now compute dft, idft, dft, idft, ...
c first dft is computed specially, in case subroutine needs to be started.
c
      call fft842(0, SIZE, breal, bimag)
      do 25 icount = 1, ILOOP
         call fft842(1, SIZE, breal, bimag)
         call fft842(0, SIZE, breal, bimag)
   25 continue
      call fft842(1, SIZE, breal, bimag)
c
c calculate rms error between b(i) and qb(i).
c
      err = 0.
      do 30 i=1,nn
        err = err + (breal(i)-qbreal(i))**2
     *            + (bimag(i)-qbimag(i))**2
  30  continue
      err = sqrt(err / float(nn))
      write (ioutd,9994) ILOOP, err
 9994 format(' rms error, after ', i5, ' loops = ', e15.8)
      stop
      end