http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48615
Summary: Invalid UP/DOWN rounding with E and ES descriptors Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libfortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: thenl...@users.sourceforge.net The E and ES descriptors ignore the I/O rounding mode: print "(RU,F17.0)", 1.1 print "(RU,G17.1)", 1.1e9 print "(RU,E17.1)", 1.1e9 ! 0.1E+10 expected 0.2E+10 print "(RU,ES17.0)", 1.1e9 ! 1.E+09 expected 2.E+09 print "(RU,EN17.0)", 1.1e9 print "(RD,F17.0)", 1.9 print "(RD,G17.1)", 1.9e9 print "(RD,E17.1)", 1.9e9 ! 0.2E+10 expected 0.1E+10 print "(RD,ES17.0)", 1.9e9 ! 2.E+09 expected 1.E+09 print "(RD,EN17.0)", 1.9e9 end Fortran 2008: 10.7.2.3.3 E and D editing 4 ... - x1 x2 ... xd are the d most significant digits of the internal value after rounding (10.7.2.3.7); 10.7.2.3.5 ES editing 5 ... - y is a decimal digit representative of the most significant digit of the internal value after rounding (10.7.2.3.7); - signifies a decimal symbol (10.6); - x1 x2 ... xd are the d next most significant digits of the internal value after rounding; 10.7.2.3.7 I/O rounding mode 3 When the I/O rounding mode is UP, the value resulting from conversion shall be the smallest representable value that is greater than or equal to the original value. When the I/O rounding mode is DOWN, the value resulting from conversion shall be the largest representable value that is less than or equal to the original value.