From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3333 invoked by alias); 8 Apr 2011 08:07:16 -0000 Received: (qmail 3323 invoked by uid 22791); 8 Apr 2011 08:07:15 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 08 Apr 2011 08:07:10 +0000 From: "thenlich at users dot sourceforge.net" To: gcc-bugs@gcc.gnu.org Subject: [Bug libfortran/48511] New: Implement Steele-White algorithm for numeric output X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libfortran X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: thenlich at users dot sourceforge.net X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Fri, 08 Apr 2011 08:07:00 -0000 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: 2011-04/txt/msg00844.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48511 Summary: Implement Steele-White algorithm for numeric output Product: gcc Version: unknown Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: libfortran AssignedTo: unassigned@gcc.gnu.org ReportedBy: thenlich@users.sourceforge.net Created attachment 23923 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=23923 Demonstration of correct rounding a la Steele-White In their paper "How to Print Floating-Point Numbers Accurately" [1], Steele & White describe an algorithm which for a internal binary floating-point number outputs the shortest external decimal representation of that number which converts back to the original number. This should be implemented in libfortran, possibly as a separate I/O rounding mode. It would eliminate the problem of getting "odd" numbers, like 0.177699999999... when the value 0.1977 is much shorter and represents the same exact binary value. Basically, their algorithm does the same as the attached program demonstrates, only more efficiently. [1] http://grouper.ieee.org/groups/754/email/pdfq3pavhBfih.pdf