Two of Eef's bugs, was: Re: gfortran

Tobias Schlüter tobias.schlueter@physik.uni-muenchen.de
Sat Dec 23 10:41:00 GMT 2006


Thomas Koenig <Thomas.Koenig@online.de> wrote on Fri, 22 Dec 2006:
> On Fri, Dec 22, 2006 at 09:20:12AM -0800, Steve Kargl wrote:
>
>>    "Integer output constants are produced with the effect of
>>     an Iw edit descriptor."
>>     ...
>>    "For numeric output, reasonable processor-dependent values
>>     of w, d, and e are used for each of the numeric constants
>>     output."
>
> In this case, we could make the default format for list-directed
> output of integers '(" ",I0)'.
>
>>
>> For portable code, Eef needs to determine the processor-dependent
>> value for w.
>
> I don't think w has to be the same value for all constants.  It
> would probably be best to use a format that cannot overflow
> the substring, such as
>
>     write (unit=c(1:5),fmt='(I5)') i

In fact, by the excerpts you posted from the standard, there are no  
guarantees that list-directed output to internal units could ever  
work, as the processor-chosen value for w could always exceed the  
length of the internal unit.  That said, g77 does something rather  
weird here: I had expected it to do the same as with formatted output:  
if there's not enough space, print asterisks '*', but it simply  
truncates the string:
schluter@pcl247d:~/src> cat internal.f
         character*20 c
         integer i
         c = ""
         i = 1
         do j=1,5
            c = "12345678901234567890"
            write (c(1:5),*) i
            print *, c
            i=i*100
         end do
         end

schluter@pcl247d:~/src> g77 internal.f
schluter@pcl247d:~/src> ./a.out
   1   678901234567890
   100 678901234567890
   1000678901234567890
   1000678901234567890
   1000678901234567890
schluter@pcl247d:~/src>

I don't think we should imitate g77 here, but as we've seen, no matter  
how we deviate from g77, someone will get bitten by it, and complain :-/

Cheers,
- Tobi

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.




More information about the Fortran mailing list