Puzzle computinig arrays

Angelo Graziosi angelo.graziosi@alice.it
Mon Jun 9 08:17:00 GMT 2008


The following happens on Cygwin with GFortran 4.3.1 and on GNU/Linux 
Kubuntu 8.04 with GFortran 4.3.1 and 4.2.3.

In the following test case (reduced to the simplest form), the array 
elements of BB() and b() are computed exactly with the same expression 
(copy/pasted), but the results seem a little different (only on 14-15th 
digit)

$ cat test_case.f90
!
! gfortran test_case.f90 -o test_case
!
program test_case
   implicit none
   integer :: k
   integer, parameter :: DP = kind(1.D0),&
        N = 3
   real(DP), parameter :: A(0:N) = &
        (/1.0000000000D0,3.8860009363D0,7.4167881843D0,&
          9.8599837415D0/)
   real(DP), parameter :: BB(0:N-1) = &
        (/((A(k+1)*(A(1)+k+1)),k = 0,N-2),(A(N)*(A(1)+N))/)
   real(DP) :: b(0:N-1)
   do k = 0,N-2
      b(k) = A(k+1)*(A(1)+k+1)
   enddo
   b(N-1) = A(N)*(A(1)+N)
   do k = 0,N-1
      !print *, k,b(k),BB(k),b(k)-BB(k)
      print *, k,b(k)-BB(k)
   enddo
end program test_case

$ gfortran test_case.f90 -o test_case

$ ./test_case.exe
            0   0.0000000000000000
            1 -7.10542735760100186E-015
            2   0.0000000000000000

Since BB() and b() are computed with the same expression, I would expect 
the same results. But BB() is a PARAMETER (computed at compile time???) 
and b() is computed at run time...

So, what could be the difference? What explanation may you give?


TIA,
   Angelo.



More information about the Fortran mailing list