help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Does your machine also FFT like mine?


From: John W. Eaton
Subject: Does your machine also FFT like mine?
Date: Mon, 11 May 1998 12:19:23 -0500 (CDT)

On 11-May-1998, Dirk Laurie <address@hidden> wrote:

| Encouraged by the prompt responses to my plot question -- thanks
| everyone! -- let me rephrase the FFT one to which nobody replied.
| 
| On my Linux/586 machine, I get
| 
| > ifft(fft([1 1 0 0 1]))
| ans =
|     1.0000e+00    1.0000e+00   -1.4682e-08   -1.4682e-08    1.0000e+00
| 
| This is only single precision accurate.  Unfortunately the other
| machines I have access to have the same architecture and use the
| same binary and not surprisingly gives the same result.
| 
| What happens on your machine?

I was getting the same as you, but then I made the following changes
and the problem seems to be fixed.  :-)

For people who are using g77 and tried this test and got the double
precision accuracy, what version of g77 do you have?

I think the problem is that older versions of g77 (I am using 0.5.19.1) 
handle things like

      double precision foo
      data foo /3.14159265358979/

by first constructing a single precision number (if you just look at
the number, there is nothing to tell you that it should be double),
then initializing the double variable foo with that.  I seem to
remember some heated debates on comp.lang.fortran about what the
proper interpretation should be.  In any case, I'd guess that g77's
default behavior has changed.  (Or were people who got the more accurate
result were using f2c?)

In any case, we can force double precision constants anyway, so I did
that for the next release of Octave by making the changes below.

If you apply this patch, be sure to also remove the libcruft.a file
to ensure that the new .o files are inserted (there is a small problem
with the libcruft makefiles, but fixing it would make the default
build process much slower).

Thanks,

jwe


*** libcruft/fftpack/passb3.f.orig      Thu Jul 18 20:29:15 1996
--- libcruft/fftpack/passb3.f   Mon May 11 12:03:13 1998
***************
*** 2,8 ****
        implicit double precision (a-h,o-z)
        dimension       cc(ido,3,l1)           ,ch(ido,l1,3)           ,
       1                wa1(1)     ,wa2(1)
!       data taur,taui /-.5,.866025403784439/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           tr2 = cc(1,2,k)+cc(1,3,k)
--- 2,8 ----
        implicit double precision (a-h,o-z)
        dimension       cc(ido,3,l1)           ,ch(ido,l1,3)           ,
       1                wa1(1)     ,wa2(1)
!       data taur,taui /-.5,.866025403784439d0/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           tr2 = cc(1,2,k)+cc(1,3,k)
*** libcruft/fftpack/passb5.f.orig      Thu Jul 18 20:29:15 1996
--- libcruft/fftpack/passb5.f   Mon May 11 12:03:13 1998
***************
*** 2,9 ****
        implicit double precision (a-h,o-z)
        dimension       cc(ido,5,l1)           ,ch(ido,l1,5)           ,
       1                wa1(1)     ,wa2(1)     ,wa3(1)     ,wa4(1)
!       data tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
!      1-.809016994374947,.587785252292473/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           ti5 = cc(2,2,k)-cc(2,5,k)
--- 2,9 ----
        implicit double precision (a-h,o-z)
        dimension       cc(ido,5,l1)           ,ch(ido,l1,5)           ,
       1                wa1(1)     ,wa2(1)     ,wa3(1)     ,wa4(1)
!       data tr11,ti11,tr12,ti12 /.309016994374947d0,.951056516295154d0,
!      1-.809016994374947d0,.587785252292473d0/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           ti5 = cc(2,2,k)-cc(2,5,k)
*** libcruft/fftpack/passf3.f.orig      Thu Jul 18 20:29:15 1996
--- libcruft/fftpack/passf3.f   Mon May 11 12:03:13 1998
***************
*** 2,8 ****
        implicit double precision (a-h,o-z)
        dimension       cc(ido,3,l1)           ,ch(ido,l1,3)           ,
       1                wa1(1)     ,wa2(1)
!       data taur,taui /-.5,-.866025403784439/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           tr2 = cc(1,2,k)+cc(1,3,k)
--- 2,8 ----
        implicit double precision (a-h,o-z)
        dimension       cc(ido,3,l1)           ,ch(ido,l1,3)           ,
       1                wa1(1)     ,wa2(1)
!       data taur,taui /-.5d0,-.866025403784439d0/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           tr2 = cc(1,2,k)+cc(1,3,k)
*** libcruft/fftpack/passf5.f.orig      Thu Jul 18 20:29:15 1996
--- libcruft/fftpack/passf5.f   Mon May 11 12:03:13 1998
***************
*** 2,9 ****
        implicit double precision (a-h,o-z)
        dimension       cc(ido,5,l1)           ,ch(ido,l1,5)           ,
       1                wa1(1)     ,wa2(1)     ,wa3(1)     ,wa4(1)
!       data tr11,ti11,tr12,ti12 /.309016994374947,-.951056516295154,
!      1-.809016994374947,-.587785252292473/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           ti5 = cc(2,2,k)-cc(2,5,k)
--- 2,9 ----
        implicit double precision (a-h,o-z)
        dimension       cc(ido,5,l1)           ,ch(ido,l1,5)           ,
       1                wa1(1)     ,wa2(1)     ,wa3(1)     ,wa4(1)
!       data tr11,ti11,tr12,ti12 /.309016994374947d0,-.951056516295154d0,
!      1-.809016994374947d0,-.587785252292473d0/
        if (ido .ne. 2) go to 102
        do 101 k=1,l1
           ti5 = cc(2,2,k)-cc(2,5,k)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]