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"