IEEE 754 / 854 FAQ

  1. About the Standard and Standards Process
    1. Where can I obtain the standard(s)?
    2. Is the standard set by an open process?
    3. Does my hardware implement IEEE 754?
  2. 754 / 854 Features
    1. Why do I care about gradual underflow?
    2. Why doesn't division by zero (or overflow, or underflow) stop the program or trigger an error?
  3. General Floating-Point Questions
    1. Why is 0.1 not 0.1?

About the Standard and Standards Process

Where can I obtain the standard(s)?

The current and previous IEEE 754 standards are available through the IEEE catalog. The previous IEEE 854 standard also are available through the IEEE catalog. The text of 754-1985 is also available in ACM SIGPLAN Notices 22(2), Feb. 1987. A public draft of 754 was published in IEEE Computer 14(3), Mar. 1981. Substantially annotated drafts of 854-1987 were made available in IEEE Micro 4(4), Aug. 1984 and ACM SIGNUM Newsletter 20(1), Jan. 1985.

Is the standard set by an open process?

Yes. The original standard group was open to interested parties, and drafts were published for public comment. The current revision is again open to interested parties. The general IEEE process is fully documented.

Does my hardware implement IEEE 754?

Except in special cases, no one component implements the standard. From the first paragraph of the standard (Section 1.1):

It is intended that an implementation of a floating-point system conforming to this standard can be realized entirely in software, entirely in hardware, or in any combination of software and hardware. It is the environment the programmer or user of the system sees that conforms or fails to conform to this standard. Hardware components that require software support to conform shall not be said to conform apart from such software.

Indeed, operating systems, compiler support libraries, or even general libraries can provide all the features if necessary.

754 / 854 Features

Why do I care about gradual underflow? Isn't flush-to-zero faster and just as reliable?

The short answer is that gradual underflow preserves more mathematical identities. For example, x - y == 0 imples x == y with gradual underflow. The former can hold without the latter with flush-to-zero.

The performance impact is not obvious. Many "modern" processors do not accelerate arithmetic involving subnormal numbers, so gradual underflow seems slow. The additional identities give more room for programmers and compilers to optimize, however.

A longer answer involves preserving relative error bounds in the face of underflow. See the paper by Dr. James Demmel for details. Gradual underflow keeps simple codes robust.

Why doesn't division by zero (or overflow, or underflow) stop the program or trigger an error? Why does a standard on numbers include "not-a-number" (NaN)?

The 754 model encourages robust programs. It is intended not only for numerical analysts but also for spreadsheet users, database systems, or even coffee pots. The propagation rules for NaNs and infinities allow inconsequential exceptions to vanish. Similarly, gradual underflow maintains error properties over a precision's range.

When exceptional situations need attention, they can be examined immediately via traps or at a convenient time via status flags. Traps can be used to stop a program, but unrecoverable situations are extremely rare. Simply stopping a program is not an option for embedded systems or network agents. More often, traps log diagnostic information or substitute valid results.

Flags offer both predictable control flow and speed. Their use requires the programmer be aware of exceptional conditions, but flag stickiness allows programmers to delay handling exceptional conditions until necessary.

General Floating-Point Questions

Why is 0.1 not 0.1?

Binary floating-point numbers consist of signed integers multiplied by powers of two. When fractional, you can also consider them as integers divided by powers of two. The decimal number 0.1, or 1/10, is not an integer over a power of two. The 854 standard encompasses decimal arithmetic, but there is little hardware support outside of desktop calculators.

Mike Cowlishaw maintains a large repository of decimal information, including decimal arithmetic FAQ..

754 | revision | FAQ | references