[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

*To*: STDS-754@xxxxxxxxxxxxxxxxx*Subject*: Re: round32 ( round64 ( X ) ) ?= round32 ( X )*From*: "Nelson H. F. Beebe" <beebe@xxxxxxxxxxxxx>*Date*: Thu, 31 Mar 2011 17:41:22 -0600 (MDT)*Cc*: beebe@xxxxxxxxxxxxx*List-help*: <http://listserv.ieee.org/cgi-bin/wa?LIST=STDS-754>, <mailto:LISTSERV@LISTSERV.IEEE.ORG?body=INFO%20STDS-754>*List-owner*: <mailto:STDS-754-request@LISTSERV.IEEE.ORG>*List-subscribe*: <mailto:STDS-754-subscribe-request@LISTSERV.IEEE.ORG>*List-unsubscribe*: <mailto:STDS-754-unsubscribe-request@LISTSERV.IEEE.ORG>*Sender*: stds-754@xxxxxxxx

Peter Lawrence asks about the infamous problem of double rounding on systems with long internal registers (Honeywell mainframes of 1970s, Motorola 68K, and current Intel x86 and x86_64 families). Double rounding is indeed a nuisance, and there is a surprising recent discovery that it could have been prevented if there were an unusual rounding mode, round-to-odd (RO(x)). The authors of the paper below show how to implement that rounding in software, and discuss how it can be used to fix the double-rounding problem. It is too late now to repair the mistakes of the past that are present in millions of installed systems, but it is good to know that careful research before designing hardware can be helpful. @String{j-IEEE-TRANS-COMPUT = "IEEE Transactions on Computers"} @Article{Boldo:2008:EFC, author = "Sylvie Boldo and Guillaume Melquiond", title = "Emulation of a {FMA} and Correctly Rounded Sums: Proved Algorithms Using Rounding to Odd", journal = j-IEEE-TRANS-COMPUT, volume = "54", number = "4", pages = "462--471", month = apr, year = "2008", CODEN = "ITCOB4", DOI = "http://dx.doi.org/10.1109/TC.2007.70819";, ISSN = "0018-9340", bibdate = "Sat Feb 19 18:44:18 2011", abstract = "Rounding to odd is a nonstandard rounding on floating-point numbers. By using it for some intermediate values instead of rounding to nearest, correctly rounded results can be obtained at the end of computations. We present an algorithm for emulating the fused multiply-and-add operator. We also present an iterative algorithm for computing the correctly rounded sum of a set of floating-point numbers under mild assumptions. A variation on both previous algorithms is the correctly rounded sum of any three floating-point numbers. This leads to efficient implementations, even when this rounding is not available. In order to guarantee the correctness of these properties and algorithms, we formally proved them by using the Coq proof checker.", acknowledgement = ack-nhfb, fjournal = "IEEE Transactions on Computers", keyword = "round-to-odd (RO(x))", } See also discussions of the double-rounding problem in this recent useful book: @String{pub-BIRKHAUSER-BOSTON = "Birkh{\"a}user Boston Inc."} @String{pub-BIRKHAUSER-BOSTON:adr = "Cambridge, MA, USA"} @Book{Muller:2010:HFP, author = "Jean-Michel Muller and Nicolas Brisebarre and Florent de Dinechin and Claude-Pierre Jeannerod and Vincent Lef{\`e}vre and Guillaume Melquiond and Nathalie Revol and Damien Stehl{\'e} and Serge Torres", title = "Handbook of Floating-Point Arithmetic", publisher = pub-BIRKHAUSER-BOSTON, address = pub-BIRKHAUSER-BOSTON:adr, pages = "xxiii + 572", year = "2010", DOI = "http://dx.doi.org/10.1007/978-0-8176-4704-9";, ISBN = "0-8176-4704-X", ISBN-13 = "978-0-8176-4704-9", LCCN = "QA76.9.C62 H36 2010", bibdate = "Thu Jan 27 16:18:58 2011", price = "US\$90 (est.)", acknowledgement = ack-nhfb, } ------------------------------------------------------------------------------- - Nelson H. F. Beebe Tel: +1 801 581 5254 - - University of Utah FAX: +1 801 581 4148 - - Department of Mathematics, 110 LCB Internet e-mail: beebe@xxxxxxxxxxxxx - - 155 S 1400 E RM 233 beebe@xxxxxxx beebe@xxxxxxxxxxxx - - Salt Lake City, UT 84112-0090, USA URL: http://www.math.utah.edu/~beebe/ - -------------------------------------------------------------------------------

- Prev by Date:
**RE: round32 ( round64 ( X ) ) ?= round32 ( X )** - Next by Date:
**Re: round32 ( round64 ( X ) ) ?= round32 ( X )** - Previous by thread:
**round32 ( round64 ( X ) ) ?= round32 ( X )** - Next by thread:
**FW: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)** - Index(es):