The IEEE 754 standard was developed in the early 1980s in response to what had become a rather ugly situation. Each hardware vendor seemed to provide their own proprietary floating point implementation. Some implementations were based on base 16 arithmetic (i.e. their exponents indicated what power of 16 their fractional part should be multiplied by to get the actual value being represented) while others used base 2. How the different implementations handled programming errors and other exceptional situations varied wildly and round off behaviour ranged from reasonably well thought out to really quite brutal.

The end result was that porting scientific codes from one platform to another was potentially a gruesome task and even implementing algorithms with reasonably well understood error bounds was a massive undertaking on most platforms.

Into this chaos came William Kahan who, through force of will and intellect, managed to lead the development of an exceptionally well thought out approach to floating point arithmetic. Today's IEEE 754 standard is almost entirely the result of his efforts.

Considerable progress has occurred on the hardware front

The IEEE 754 standard has become, for all practical purposes, the way that floating point arithmetic is implemented on modern computers. Such is the power and influence of the standard that trying to launch a new incompatible floating point implementation is a fool’s quest which hasn’t been attempted in about fifteen years. The author of this w/u is not aware of any currently shipping floating point arithmetic implementations which can’t be configured to be IEEE 754 compliant (many implementations have minor deviations when used in their “default” modes which allow for somewhat better performance than one gets if the implementation is configured to be completely IEEE 754 compliant).

Progress on the programming language front is another story

Unfortunately, progress on the programming languages front has been considerably slower. Very few programming languages have been defined which require IEEE 754 compliance for their floating point arithmetic. As a consequence, scientific software developers are unable to safely assume that the floating point behaviour defined by IEEE 754 standard will be provided by all platforms that their code might encounter. Attempts to require full compliance with the IEEE 754 standard have even sometimes been met with quite hostile reactions from powerful players (see Sun Microsystem’s experience when they tried to mandate full IEEE 754 compliance in a variant of Java aimed at the scientific computing audience).

It is possible to write software today in many programming languages which takes advantage of most if not all aspects of the IEEE 754 standard. Sadly, writing truly portable software in any major programming language which tries to take advantage of more than the most basic aspects of the standard is still, over twenty years after the standard was adopted, nearly impossible.

What’s in a name?

The formal name of the standard is “IEEE Standard for Binary Floating-Point Arithmetic” and the standard’s full designation is ANSI/IEEE Std 754-1985. The standard has also been adopted by the International Electrotechnical Commission which designates the standard as “IEC 60559: Binary floating-point arithmetic for microprocessor systems”.


References

  • Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic by Professor W. Kahan, 1996 (available on the 'net at http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF (last accessed 2003/03/02))

    This paper is definitely worth reading if you're interested in IEEE 754 floating point.

  • personal experience