Possible explaination why large_real_kind_form_io_2.f90 is failing on PPC/OSX
Tim Prince
tprince@myrealbox.com
Sun Jan 14 20:05:00 GMT 2007
Dominique Dhumieres wrote:
> Trying to understand why large_real_kind_form_io_2.f90 is failing on PPC/OSX,
> I ended up with the following code:
>
> ! { dg-do run }
> ! { dg-require-effective-target fortran_large_real }
> ! PR libfortran/24685
> program large_real_kind_form_io_2
> ! This should be 10 or 16 on systems that support kind=10 or kind=16
> integer, parameter :: k = selected_real_kind (precision (0.0_8) + 1)
>
> print *, k
> print *, nearest(1.0_8,1.0_8)
> print *, nearest(1.0_8,-1.0_8)
> print '(1pg50.40))', nearest(1.0_8,1.0_8)
> print '(1pg50.40)', nearest(1.0_8,-1.0_8)
> print *, nearest(1.0_k,1.0_k), nearest(1.0_k,1.0_k)-1.0_k
> print *, nearest(1.0_k,-1.0_k), nearest(1.0_k,-1.0_k)-1.0_k
> print '(2(1pg60.50))', nearest(1.0_k,1.0_k), nearest(1.0_k,1.0_k)-1.0_k
> print '(2(1pg60.50))', nearest(1.0_k,-1.0_k), nearest(1.0_k,-1.0_k)-1.0_k
>
> end program large_real_kind_form_io_2
>
> which gives:
>
> 16
> 1.00000000000000
> 1.000000000000000222044604925031308084726
> 0.9999999999999998889776975374843459576368
> 1.0000000000000000000000000000000000 2.4651903288156618919116517665087070E-0032
> 1.0000000000000000000000000000000000 -1.2325951644078309459558258832543535E-0032
> 1.00000000000000000000000000000000000000000000000000 2.46519032881566189191165176650870696772900000000000E-32
> 1.00000000000000000000000000000000000000000000000000 -1.23259516440783094595582588325435348386400000000000E-32
>
> with two results that might explain the failure:
>
> (1) the default format is too short to distinguish close values,
> so codes such that:
>
> write (tmp, *) b
> read (tmp, *) a, c
>
> may fail to read a and c as b(1) and b(2) if the default format gives
> ambiguous output.
>
> (2) The general format for real(16) seems to stop the decoding too
> soon (without reaching the last significant digits).
>
>
The 33 digits shown in print* default are sufficient to distinguish
neighboring values for 128-bit IEEE format. IEE754 specifically permits
longer specified formats to display zeros for trailing digits beyond
that point.
More information about the Fortran
mailing list