On Mon, Mar 7, 2011 at 10:39 AM, Thomas Henlich wrote: > Hi, > > I found the following bug in cygwin 1.7.8 on Windows XP: > > Fortran I/O rounding truncates the result after a certain number of > digits. The following program: > === > write(*, '(f35.32)') 0.14285714285714285d0 > end > === > gives this output: > 0.14285714285714284921269000000000 > The expected output is: > 0.14285714285714284921269268124888 > > This is in violation of the Fortran 2008 standard which demands:
I doubt our compiler is Fortran 2008 compliant, as at maximum it will be Fortran 2003 http://gcc.gnu.org/gcc-4.3/changes.html > > === > 10.7.2.3.7 I/O rounding mode > > 2. In what follows, the term "decimal value" means the exact decimal number as > given by the character string, while the term "internal value" means the > number > actually stored in the processor. For example, in dealing with the decimal > constant 0.1, the decimal value is the mathematical quantity 1/10, which has > no > exact representation in binary form. Formatted output of real data involves > conversion from an internal value to a decimal value; formatted input involves > conversion from a decimal value to an internal value. > > 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. ... > === > > Applied to the example this means, 0.14285714285714284921269268124888 > is the largest representable > (with 32 decimal digits) value that is less than the original value (binary > 1.001001001001001001001001001001001001001001001001001 * 2^-3 = decimal > 0.1428571428571428492126926812488818...), but > 0.14285714285714284921269000000000 is NOT. > > The problem seems limited to the Fortran language, because the C call > printf("%35.32f\n", 0.14285714285714285) prints the expected result: > 0.14285714285714284921269268124888 > > -- > Problem reports: http://cygwin.com/problems.html > FAQ: http://cygwin.com/faq/ > Documentation: http://cygwin.com/docs.html > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Have you tested gfortran 4.3 on other platform ? Marco -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple