bug report : gfortran E edit descriptor
Tobias Burnus
tobias.burnus@physik.fu-berlin.de
Thu Mar 10 10:14:00 GMT 2016
I think gfortran's result *is* *correct* according to the
Fortran standard.
(I concur that the result is not what one would expect but
it is now decades to late to change that.)
sudo.michio wrote:
> I have an trouble in E edit descriptor of gfortran.
> This is a example.
...
> write(*,'(e9.3,a,f7.1)')a,' ',b
> write(*,'(1pe9.3,a,f7.1)')a,' ',b
...
> (execute)
> a.exe
> (result)
> 135.000000 1737.50000
> 0.135E+03 1737.5
> 1.350E+02 17375.0 ( <--- wrong value )
Looking at the Fortran standard [1], the result looks
correct:
"The k P edit descriptor temporarily changes (9.5.2) the scale
factor for the connection to k. The scale factor affects the
editing done by the F, E, EN, ES, D, and G edit descriptors
for numeric quantities.
[...]
* On output, with F output editing, the effect is that the
externally represented number equals the internally represented
number multiplied by 10**k; the internal value is converted using
the I/O rounding mode and then the scale factor is applied to
the converted decimal value.
* On output, with E and D editing, the effect is that the
significand (R414) part of the quantity to be produced is
multiplied by 10**k and the exponent is reduced by k."
The referenced 9.5.2 contains the following, which implies
that the "1p" not only affects the immediately following "e9.3"
but also the later "f7.1":
"Edit descriptors take effect when they are encountered in
format processing. When a data transfer statement terminates,
the values for the modes are reset to the values in effect
immediately before the data transfer statement was executed."
Cheers,
Tobias
[1] http://j3-fortran.org/doc/year/10/10-007r1.pdf
Section "10.8.5 P editing"
Page 279 of the document, page number labelled as "261"
More information about the Gcc
mailing list