16.07.2014 Views

DRAFT IEEE Standard for Binary Floating-Point Arithmetic - Sonic.net

DRAFT IEEE Standard for Binary Floating-Point Arithmetic - Sonic.net

DRAFT IEEE Standard for Binary Floating-Point Arithmetic - Sonic.net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>DRAFT</strong> <strong>IEEE</strong> <strong>Standard</strong> <strong>for</strong> <strong>Floating</strong>-<strong>Point</strong> <strong>Arithmetic</strong> – 2003 August 12 10:20<br />

Appendix 1<br />

Recommended Functions and Predicates<br />

(This Appendix is not a part of ANSI/<strong>IEEE</strong> Std 754–1985, <strong>IEEE</strong> <strong>Standard</strong> <strong>for</strong> <strong>Binary</strong> <strong>Floating</strong>-<br />

<strong>Point</strong> <strong>Arithmetic</strong>.)<br />

The following functions and predicates are recommended as aids to program<br />

portability across different systems, perhaps per<strong>for</strong>ming arithmetic very differently.<br />

They are described generically, that is, the types of the operands and results are<br />

inherent in the operands. Languages that require explicit typing will have<br />

corresponding families of functions and predicates.<br />

Some functions, such as the copy operation y := x without change of <strong>for</strong>mat, may<br />

at the implementor's option be treated as nonarithmetic operations which do not<br />

signal the invalid operation exception <strong>for</strong> signaling NaNs; the functions in question<br />

are (1), (2), (6), and (7).§BI<br />

1. Copysign(x, y) returns x with the sign of y. Hence, abs(x) = copysign(x,<br />

1.0), even if x is NaN.§BI<br />

2. –x is x copied with its sign reversed, not 0 – x; the distinction is germane<br />

when x is ±0 or NaN. Consequently, it is a mistake to use the sign bit to<br />

distinguish signaling NaNs from quiet NaNs.§BI<br />

3. Scalb(y, N) returns y × b N <strong>for</strong> integral values N. without computing b N .<br />

The range of N must be large enough to support a single exact scaling<br />

operation between the smallest magnitude subnormal and the largest<br />

power of the base exactly representable in the <strong>for</strong>mat of y. In other<br />

words, <strong>for</strong> the <strong>for</strong>mat of y the range of N must include ±(emax - emin +<br />

(p -1)). The result scalb returns is computed as if the exact product was<br />

<strong>for</strong>med and then rounded to the destination <strong>for</strong>mat, subject to the current<br />

rounding mode. If y is a decimal value, scalb acts as if the 10 N were<br />

stored with an exponent of N. [In other words, in the absense of<br />

rounding you can just add or subtract N to the exponent <strong>for</strong><br />

decimal too. -JDD]<br />

4. Logb(x) returns the unbiased exponent of x, a signed integer in the <strong>for</strong>mat<br />

of x, except that logb (NaN) is a NaN, logb (¥ ) is +¥, and logb(0) is –<br />

¥ and signals the division by zero exception. When x is positive and finite<br />

the expression scalb(x, –logb(x)) lies strictly between 0 and b; it is less<br />

Copyright © 2003 by the Institute of Electrical and Electronics Engineers, Inc. This document is an unapproved<br />

draft of a proposed <strong>IEEE</strong>-SA <strong>Standard</strong> - USE AT YOUR OWN RISK. See statement on page 1.<br />

Page 63

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!