📄 testxg.f
字号:
! test of fft*g.f!! program main integer nmax, nmaxsqrt parameter (nmax = 32768) parameter (nmaxsqrt = 128) integer n, ip(0 : nmaxsqrt + 1) real*8 a(0 : nmax), w(0 : nmax * 5 / 4 - 1), t(0 : nmax / 2), & err, errorcheck! write (*, *) 'data length n=? (must be 2**m)' read (*, *) n ip(0) = 0!! check of CDFT call putdata(0, n - 1, a) call cdft(n, 1, a, ip, w) call cdft(n, -1, a, ip, w) err = errorcheck(0, n - 1, 2.0d0 / n, a) write (*, *) 'cdft err= ', err!! check of RDFT call putdata(0, n - 1, a) call rdft(n, 1, a, ip, w) call rdft(n, -1, a, ip, w) err = errorcheck(0, n - 1, 2.0d0 / n, a) write (*, *) 'rdft err= ', err!! check of DDCT call putdata(0, n - 1, a) call ddct(n, 1, a, ip, w) call ddct(n, -1, a, ip, w) a(0) = a(0) * 0.5d0 err = errorcheck(0, n - 1, 2.0d0 / n, a) write (*, *) 'ddct err= ', err!! check of DDST call putdata(0, n - 1, a) call ddst(n, 1, a, ip, w) call ddst(n, -1, a, ip, w) a(0) = a(0) * 0.5d0 err = errorcheck(0, n - 1, 2.0d0 / n, a) write (*, *) 'ddst err= ', err!! check of DFCT call putdata(0, n, a) a(0) = a(0) * 0.5d0 a(n) = a(n) * 0.5d0 call dfct(n, a, t, ip, w) a(0) = a(0) * 0.5d0 a(n) = a(n) * 0.5d0 call dfct(n, a, t, ip, w) err = errorcheck(0, n, 2.0d0 / n, a) write (*, *) 'dfct err= ', err!! check of DFST call putdata(1, n - 1, a) call dfst(n, a, t, ip, w) call dfst(n, a, t, ip, w) err = errorcheck(1, n - 1, 2.0d0 / n, a) write (*, *) 'dfst err= ', err! end!! subroutine putdata(nini, nend, a) integer nini, nend, j, seed real*8 a(0 : *), drnd seed = 0 do j = nini, nend a(j) = drnd(seed) end do end!! function errorcheck(nini, nend, scale, a) integer nini, nend, j, seed real*8 scale, a(0 : *), drnd, err, e, errorcheck err = 0 seed = 0 do j = nini, nend e = drnd(seed) - a(j) * scale err = max(err, abs(e)) end do errorcheck = err end!!! random number generator, 0 <= drnd < 1 real*8 function drnd(seed) integer seed seed = mod(seed * 7141 + 54773, 259200) drnd = seed * (1.0d0 / 259200.0d0) end!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -