[testsuite gfortran] partial fix for secnds*.f

Brooks Moses brooks.moses@codesourcery.com
Fri May 11 23:23:00 GMT 2007


Dominique Dhumieres wrote:
>> This is the standard-required behavior for DATE_AND_TIME.  SECNDS is 
>> nonstandard, and the G77 manual doesn't document its behavior at midnight.
> 
> From libgfortran/intrinsics/date_and_time.c, I get
[...]
> So, unless the C function 'fmod' is YAMIIOM (yet another math illiterate
> implementation of modulo), I don't understand how the tests can return
> 86400.0!

Strange, indeed.  Though it could possibly be rounding very slightly or 
something....

>> Probably we want to emulate whatever g77 did, 
> 
> This is not the case: the following codelet
> 
> print *, secnds(86400.0), secnds(86401.0)
> end
> 
> gives
> 
> -27613. -27614.
> 
> with g77 ( -27581.053 -27582.053 with g95, slightly later!-) and
> 
> 58799.91       58798.91
> 
> with gfortran, i.e., gfortran fold the result in [0.0,86400.0[ (or]?).

Hmm.  And it looks like this isn't just weirdness for values equal to 
86400 or greater in g77; it does the same thing for secnds(86300.0) too.

A further hmm is that g77 actually documents things this way -- the 
return value is explicitly the time since midnight, minus the reference 
time, with no mention of wrapping.  The gfortran documentation doesn't 
actually document what happens when a reference time is given.

This "reference time" argument seems to be relatively worthless as 
defined in g77, really; I wonder how it was defined in the compiler g77 
got it from.

> [...]
>> I don't really like using magic numbers like this.  How about defining
>>
>>    tol = 2.0 * (24.0 * 3600.0 - nearest (24.0 * 3600.0, -1.0))
>>
>> at the beginning, and using that?  Though, actually, there's a better 
>> phrasing of the same idea:
>>
>>    tol = 2.0 * spacing (24.0 * 3600.0)
>>
>> Does that seem to work as well?
> 
> Just a coding style question: is F90 syntax allowed in *.f codes? or
> are they supposed to be compiled with a f77 compiler?

F90 syntax is allowed; the only distinction is free-form versus fixed-form.

- Brooks



More information about the Fortran mailing list