https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #26 from anlauf at gcc dot gnu.org ---
(In reply to Jerry DeLisle from comment #24)
> Currently gfortran does the following:
>
> character(20) :: fmt
> character(9) :: buffer
> fmt = "(1a1,d0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> fmt = "(1a1,e0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> end
>
>
> $ gfc question.f90
> $ ./a.out
> >0.30D+1<
> >0.30E+1<
>
> Why not:
>
> $ ./a.out
> >3.00D+0<
> >3.00E+0<
It seems the Fortran standard changed here between F2018 and F2023.
F2018, Table 13.1:
Ew.d |exp| ≤ 99 E±z1z2 or ±0z1 z2
99 < |exp| ≤ 999 ±z1 z2z3
So Intel implements this.
========
F2023, Table 13.1:
Ew.d E0 or E0.d any E±z1 z2 . . . zs
with footnote:
(1) where each z is a digit, and s is the minimum number of digits required to
represent the exponent. A plus sign is produced if the exponent value is zero.
========