From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26766 invoked by alias); 1 Oct 2007 23:28:49 -0000 Received: (qmail 26740 invoked by uid 48); 1 Oct 2007 23:28:40 -0000 Date: Mon, 01 Oct 2007 23:28:00 -0000 Message-ID: <20071001232840.26739.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug libfortran/33469] Default formats for real input are not precise enough In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "fxcoudert at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-10/txt/msg00096.txt.bz2 ------- Comment #5 from fxcoudert at gcc dot gnu dot org 2007-10-01 23:28 ------- Hum, the real(16) case looks like loads of fun to come! $ cat k.f90 integer, parameter :: k = 16 character(80) :: buf real(k) :: xk, yk xk = 1.0_k - epsilon(xk) write (buf,'(1PG60.40)') xk read (buf,*) yk write (*,'(1PG60.40)') xk write (*,'(1PG60.40)') yk if (xk /= yk) print *, "Mismatch" print * xk = 1.0_k + epsilon(xk) write (buf,'(1PG60.40)') xk read (buf,*) yk write (*,'(1PG60.40)') xk write (*,'(1PG60.40)') yk if (xk /= yk) print *, "Mismatch" print * end $ gfortran k.f90 && ./a.out 1.9999999999999999999999999999999753481000 4.9303806576313237838233035330174139355000E-32 Mismatch 1.0000000000000000000000000000000246519000 1.0000000000000000000000000000000246519000 (Also, in the case of real(16), you need to add an E4 to the format anyway.) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33469