The Wayback Machine - https://web.archive.org/web/20171230124220/http://grouper.ieee.org/groups/754/reading.html
This is not an exhaustive list of reading material but rather a short
collection directly related to the standard. The bibliographies below contain many more references.
has collected and annotated a focused set of references
on floating-point arithmetic and IEEE 754. maintains
comprehensive bibliographies
on many topics, including floating-point
arithmetic, interval
arithmetic, and elementary
functions. These track the available literature thoroughly, but they have
few annotations.
Both CiteSeer and
the Computer Science
Bibliography Collection are outstanding resources. Searches
for floating
point
and arithmetic
retrieve mountains of references. See also the social bookmarking
services Connotea
and CiteULike.
The March
1981 issue of IEEE Computer (vol. 14, no. 3) contains detailed
articles on the (then proposed) 754 standard.
- David Stevenson, et al., A Proposed Standard for Binary
Floating-Point Arithmetic
- Willian J. Cody, Analysis of Proposals for the Floating-Point
Standard
- Jerome T. Coonen, Underflow and the Denormalized Numbers
- David Hough, Applications of the Proposed IEEE-754 Standard for
Floating Point Arithmetic
The following contain rationale, (now slightly dated) implementation
techniques, and testing methods:
- Jerome Coonen, An Implementation Guide to a Proposed Standard for
Floating-Point Arithmetic, Computer, 13(1), 1980, pp. 68�79.
- Jerome Coonen, Contributions to a Proposed Standard for Binary
Floating-Point Arithmetic, Ph.D. Dissertation, UC Berkeley, 1984
An annotated draft of 854 is available in both IEEE Micro's August, 1984
issue (vol. 4, no. 4) and ACM SIGNUM's January 1985 newsletter (vol 20., no
1.). Extensive meeting minutes
are available, as well.
- William J. Cody, et al., A Proposed Radix and Word-Length
Independent Standard for Floating Point Arithmetic
The literature on floating-point arithmetic and the IEEE standards is
large. A few papers that cover under-appreciated facets of 754/854 are listed
below. See the bibliographies for further references.
- David Goldberg with Doug Priest, What
Every Computer Scientist Should Know about Floating-Point
Arithmetic (CiteSeer)
- , Underflow and the Reliability of
Numerical Software, SIAM J. Sci. Stat. Comput., 5(4), 1984, pp.
887-919. (CiteSeer)
-
and James Demmel, Faster Numerical
Algorithms via Exception Handling, IEEE Transactions on
Computers, 43(8), 1994, pp. 983-992. (CiteSeer)
- , Handling
Floating-Point Exceptions in Numeric Programs, ACM Transactions
on Programming Languages and Systems 18(2), 1996, pp. 139-174. (CiteSeer)
- , Number-Theoretic
Test Generation for Directed Rounding, IEEE Transactions on
Computers 49(2), 2000. (PostScript)
-
Douglas Priest, Algorithms
for Arbitrary Precision Floating Point
Arithmetic, Proceedings of the 10th IEEE
Symposium on Computer Arithmetic, 1991, pp. 132-144. (CiteSeer)
The Netlib Repository is always an
excellent starting point for finding numerical software. The floating point directory contains David
Gay's decimal <-> binary conversion routines along testing routines.
These and the freely distributable
libm provide the basis for many of the correct packages
available.
The functions from appendix 1 are implemented in
Implementation
There are many software-only or software-assisted implementations
publically available. Some software pieces include the following:
- SoftFloat
-
's package fully implements IEEE 754. It supports single, double,
double extended, and quadruple precision arithmetic.
- NetBSD
- Operating systems often provide software
assistance to supplement hardware capabilities and support
routines. The NetBSD code provides fairly straight-forward and easy
to read examples for a huge number of hardware architectures.
- Linux and GNU
libc
- Linux provides software
assistance and GNU libc provides support
routines. The Linux code is also a good example, but the GNU libc
code is an exercise in obfuscation.
- gcc
- Compilers can substitute inline code or function calls for missing
features. This often provides better performance than relying on
unimplemented instruction traps. GCC provides general
assistence and a software
implementation.
Testing
Writing software to test an implementation is at least as
difficult as writing the implementation itself. Thankfully, there are some
useful, publically available starting points.
- IEEE 754
Compliance Checker
- IeeeCC754 checks roundings, conversions, and exceptional cases with
precision-independent test vectors. This generalizes Jerome Coonen's
test vectors and UCBTEST's arithmetic tests.
- Nelson Beebe's collection
-
provides a collection of C, Fortran, and Maple programs to test aspects
of an IEEE754 implementation. This also includes an updated
hoc,
Kernighan and Pike's high-order calculator.
- TestFloat
- This companion to SoftFloat
uses SoftFloat to check special cases of 754 implementations. It also
tests basic soundness, but not difficult rounding situations.
- UCBTEST
- Contains the famous paranoia along with more general tests
for difficult rounding cases. Focuses on single and double precision,
and also contains tests for elementary functions.
- SRTEST
- Tests for SRT-style dividers. These are notable for their testing
along algorithmic singularities.
- Base conversions
- The program and corresponding report focus on
decimal <-> binary conversions. (Also described on Netlib)
A full 754 / 854 implementation includes the programming languages
available to the user. Unfortunately, few languages provide direct support. A
few that provide almost everything include
For further information on C99, see Jim Thomas's presentation from the
meeting.
Many languages give access to some aspects of IEEE 754
arithmetic. The following go a small step beyond simple single- and
double-precision data types.
- The Standard ML '97 Basis
Library supports exceptional values, classification, unordered
comparisons, and rounding modes. Implementations decide on 754 or 854
support and on the precision.
- The Common
Lisp standard provides optional
access to floating-point conditions that could be used to implement
efficient IEEE trap handlers. Alas, to this writer's knowledge, no
implementations support these.
- Jerome Coonen's RealJava
proposal and the resulting discussion outline issues in adding IEEE
754 support to existing languages.
A platform standard like IEEE 754 and 854 should have platform
documentation. The most thorough examples are Sun's Numerical
Computation Guide, Apple's Standard Apple Numerics Environment (SANE),
and Apple's Inside
Macintosh: PowerPC Numerics
- W. Kahan's page
contains many essays on the IEEE arithmetic standards.
-
and 's work on the table-maker's
dilemma outlines the difficulties in specifying elementary
functions.
- David Hough's site
has information from K-C Ng on trigonometric argument reduction,
historic Apple Lisa documents, and other references.