[patch, fix - testcase] Formatted output of IEEE exceptional values - regression

Brooks Moses bmoses@stanford.edu
Mon Jul 18 05:10:00 GMT 2005


One clarification:

Brooks Moses wrote, quoting from the F2003 standard:
> For an internal value that is an IEEE infinity, the output field 
> consists of blanks, if necessary, followed by a minus sign for negative 
> infinity or an optional plus sign otherwise, followed by the letters 
> 'Inf' or 'Infinity', right justified within the field. If w is less than 
> 3, the field is filled with asterisks; otherwise, if w is less than 8, 
> 'Inf' is produced.


On rereading this, I realized that this seems to state that if w is less 
than 8 but not less than 3, "Inf" is required to be produced.  Further, 
the minus sign is required.

This might appear to be a contradiction in the case of w=3 and a 
negative infinity.

(That apparent contradiction is, I think, the reason people have been 
erroneously interpreting that the w=3 negative-infinity case should 
produce "Inf".)

However, it isn't a contradiction, albeit one has to have very fine 
hair-splitting ability to see it.  Note that the phrase is "'Inf' is 
produced", not "the field contains 'Inf'".  And section 10.6.1 of the 
F2003 standard makes it clear that these phrases are not the same thing. 
  To quote:

--------
On output, if the number of characters produced exceeds the field width 
or if an exponent exceeds its specified length using the Ew.d Ee, ENw.d 
Ee, ESw.d Ee, or Gw.d Ee edit descriptor, the processor shall fill the 
entire field of width w with asterisks.
--------

So.  The "characters produced" consist of "-Inf" in the case of w=3. 
This is four characters, which is greater than three; thus, the output 
field is required to be "***".


On a related note, the standard does _not_ say that "Infinity" is 
produced if w is 8 or greater.  It appears that the author of the test 
case in question misunderstood this point.

- Brooks



More information about the Fortran mailing list