This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: non-compatible round-off when printing for gfortran


satyaakam goswami wrote:
Hi
There is an incompatibility in round-off when printing between
gfortran (i tried both gcc411 and 412) and other fortran compiler (i
tried g77 from gcc3.2.3 and f77 from SUN forte 7 and 8)
Here is an example, it says better than me.
     program test
     real myr(10)
     integer i
     do i=1,10
       myr(i)=0.2+0.01*i
     enddo
     write(*,1) (myr(i),i=1,10)
     do i=1,10
       myr(i)=0.3+0.01*i
     enddo
     write(*,1) (myr(i),i=1,10)
1     format (10(f3.1,1x))
     end

For gfortran it outputs:
0.2 0.2 0.2 0.2 0.3 0.3 0.3 0.3 0.3 0.3
0.3 0.3 0.3 0.3 0.4 0.4 0.4 0.4 0.4 0.4
but for other compiler i tried (g77 and f77 from forte) it outputs:
0.2 0.2 0.2 0.2 0.2 0.3 0.3 0.3 0.3 0.3
0.3 0.3 0.3 0.3 0.4 0.4 0.4 0.4 0.4 0.4

I understand that correct round-off is "phylosofic issue" here, but
that causes inconvinience for cross-platforming and porting.

These results surely will change when you go between extended precision and non-extended. gfortran does have control over that. Default for i386 is -mfpmath=387 (extra precision) while for x86-64 it is -mfpmath=sse (no extra precision). If stuff like this is critical for your applications, you will also need attention to the data types of your constants. If high precision is important, you would evidently want 0.2d0, 0.01d0,... or the f90 equivalents.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]