https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022

--- Comment #14 from john.harper at vuw dot ac.nz ---
To add to my email copied below, you may find a reference to the standards 
helpful. k is the scale factor referred to in F2018 or F2023 13.7.2.3.3. 
The last paragraph of that says that in Ew.d and Ew.dE0 output format, one 
of these two inequalities must be satisfied: -d < k <= 0 or 0 < k < d+2.
With either E0.0 or E0.0E0 the value of k is not permitted.

On Sun, 27 Aug 2023, john.harper at vuw dot ac.nz wrote:

> Date: Sun, 27 Aug 2023 21:40:58 +0000
> From: john.harper at vuw dot ac.nz <gcc-bugzi...@gcc.gnu.org>
> To: John Harper <john.har...@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
>      high.
> Resent-Date: Mon, 28 Aug 2023 09:41:10 +1200 (NZST)
> Resent-From: <john.har...@vuw.ac.nz>
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #11 from john.harper at vuw dot ac.nz ---
> Jerry's test program is identical with mine.
> Because E format is supposed to give no digits before the decimal point
> except possibly a leading zero, E0.0 and E0.0E0 are both pointless, and
> Steve Lionel pointed out in Fortran Discourse that the standard forbids
> them because they would generate an illegal value of k for the kP edit
> descriptor (which happens not to be explicitly used here.) So I think
> gfortran ought to give a run-time error for it. If I compiled the program
> with ifort and more warning options, the first 2 write statements gave
>
> real kinds 4 8 16 16
> With (A,1X, E0.0E0)  *****************************************
> forrtl: error (63): output conversion error, unit 6, file /dev/pts/1
>
> The ES result from gfortran was correct and standard-conforming. The EN
> one should have said 666.E+0 not 666.
>
>  On Sun, 27 Aug 2023, jvdelisle at gcc dot gnu.org wrote:
>
>> Date: Sun, 27 Aug 2023 15:38:33 +0000
>> From: jvdelisle at gcc dot gnu.org <gcc-bugzi...@gcc.gnu.org>
>> To: John Harper <john.har...@vuw.ac.nz>
>> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d 
>> too
>>      high.
>> Resent-Date: Mon, 28 Aug 2023 03:38:51 +1200 (NZST)
>> Resent-From: <john.har...@vuw.ac.nz>
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>>
>> --- Comment #9 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
>> I am using this:
>>
>> program teste0es0en0
>>  integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
>>       p3 = selected_real_kind(precision(1.0_p2)+1), &
>>       hp = selected_real_kind(precision(1.0_p3)+1), &
>>       p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
>>  character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
>>  integer ifmt
>>  write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
>>  do ifmt = 1,3
>>     write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
>>     write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
>>     write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
>>     if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
>>  end do
>> end program teste0es0en0
>>
>> And I get the following output with some test patching:
>>
>> $ ./a.out
>> real kinds 4 8 10 16
>> With (A,1X, E0.0E0)  1.E+3
>> With (A,1X, E0.0E0)  1.E+3
>> With (A,1X, E0.0E0)  1.E+3
>> With (A,1X, E0.0E0)  1.E+3
>> With (A,1X,ES0.0E0)  7.E+2
>> With (A,1X,ES0.0E0)  7.E+2
>> With (A,1X,ES0.0E0)  7.E+2
>> With (A,1X,ES0.0E0)  7.E+2
>> With (A,1X,EN0.0E0)  666.
>> With (A,1X,EN0.0E0)  666.
>> With (A,1X,EN0.0E0)  666.
>> With (A,1X,EN0.0E0)  666.
>>
>> --
>> You are receiving this mail because:
>> You reported the bug.
>>
>
>
> -- John Harper, School of Mathematics and Statistics
> Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
> e-mail john.har...@vuw.ac.nz
>
> -- 
> You are receiving this mail because:
> You reported the bug.
>


-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.har...@vuw.ac.nz

Reply via email to