IEEE 754R Overview and Ballot
David Hough
1 May 2008


754R Overview

This memo provides an overview of important differences between IEEE 754R draft 1.9.0 and IEEE 754-1985. That overview is followed by a ballot and specific comments to be submitted with the ballot. This memo highlights certain important issues to draw them to the attention of balloters and commenters. There might or might not be a subsequent review draft after 1.9.0, and ballot comments might or might not influence that subsequent draft. The intent of the 754R Ballot Review Committee is to respond to all comments on 1.9.0 without changing the text of 1.9.0.

Differences between 754R 1.9.0 and IEEE 754-1985

Readers new to this draft standard will find some important differences between the current draft 1.9.0 and the previous 754-1985 standard. Some things were so obviously in the air that they amounted to unsurprising standardizing of existing practice: thus fused multiply add and 128-bit basic binary format. Others were more controversial: basic decimal formats with two possible encodings, min/max instructions with controversy about signed zeros and NaNs, and recommended correctly-rounded transcendental functions. Perhaps the most fundamental controversy was between those who wanted to extend 754 orthogonally, keeping it as close as possible to a hardware specification, and those who wanted to complete 754's unfinished business of creating suitable programming environments for diverse purposes. 754's most pressing gaps involve expression evaluation and exception handling.

In particular it came as a surprise to many programmers and users with less than graduate degrees in error analysis that the 754 "standard" didn't even standardize the result of z = x + y or z = x * y for double-precision variables. Differences among "conforming" implementations have been interpreted as hardware bugs or software bugs or performance bugs if the remedy were expensive, and in that form attracted the attention of executives who would not normally concern themselves with matters of language definition and implementation. 754R tries to recommend ways for languages to permit programmers to say what matters when they care.

A difference in expectations between 754 and 754R underlies the subtler structural differences between the two. 754 was drafted with no expectations about immediate language or operating system support, and so the hope was that some local implementations would arise without such support. Not surprisingly, the implementations that did arise did not permit coding the subtler aspects of 754 in a form portable across implementations, nor did these implementations facilitate obtaining reproducible results across implementations. Subsequent language and operating system standardizations made portability of source code possible, but not necessarily portable performance or reproducible results, as those subsequent standards generally did not remove any implementation freedoms granted by 754.

Based upon the success of 754 and subsequent language and operating system standardizations of aspects of it, 754R permits languages to focus on portability and reproducibility or on performance and encourages languages to provide means for programmers to select either one as needed. For parts of programs where performance is important, some languages might choose to delegate some choices to implementations. So many aspects of 754 that were explicitly or implicitly undefined or implementation-defined are called language-defined in 754R, with the understanding that a language standard might always, or upon programmer request, delegate some aspects to implementations.

Similarly many aspects of 754 that were best characterized as implementation mechanisms are replaced by end-user programmability features in 754R. Examples in this category were 754's extended rounding precision modes and traps, replaced by 754R's preferredWidth attributes and alternate exception handling attributes. 754R is explicit about what was implicit in 754: global dynamic modes and flags registers are only one possible implementation mechanism, and for many purposes not the best, so languages are encouraged to provide means for modifying semantics of operations and expressions in forms suitable for typical application programs rather than in the forms suitable for a particular hardware implementation. Thus languages intending to fully support 754R would do well to consider how to provide uniform and convenient syntactic means to associate static attributes with sections of program text. Not only could that apply to 754R's rounding directions, alternate exception handling, preferredWidth, optimization, and reproducibility attributes, but also to directives about parallelization and debugging that have grown into many languages by accretion from other sources. The experience of 754 implementations has shown that attribute changes are seldom invoked and limited in scope, yet the dynamic implementation mechanism in most 754 implementations is a performance and correctness burden for the entire hardware and software stack when programming conventions require instantaneous semantic response to controls changed asynchronously and remotely. The static attribute model of 754R is intended to accomplish what most programmers want most of the time without directly or indirectly burdening the majority of programs and programmers that find the default attributes satisfactory.

For one purpose, global dynamic modes and flags (and 754 trap enable) registers are an excellent implementation: debugging numerical programs without source code. Flags and traps allow some insight into where exceptional behavior is occurring, and modes allow varying roundoff characteristics to provide some insight into where numerical sensitivity is high. 754 recommends such capabilities in an informative annex but explicitly does not require that such modes and flags be supported by debuggers.

In summary, the most important results of the 754R revision are to

General comments on major changes

Vote DISAPPROVE

I vote DISAPPROVE on the proposed (recirculation ballot) DRAFT Standard for Floating-Point Arithmetic P754, draft 1.9.0 of 24 April 2008. Negative ballots must be accompanied by explicit changes required to change the negative ballot to affirmative, which may be found below.

Although the 754R Sponsor Ballot group membership is closed, anybody may submit comments on draft 1.9.0 during the ballot period to the MSC chair, Bob Davis, bob@scsi.com. To protect the IEEE's copyright, Draft 1.9.0 is not publicly available, but copies can be obtained for review purposes from Bob Davis.

Changes required for an APPROVE vote

According to IEEE-SA procedure, a DISAPPROVE vote must be accompanied by a list of changes required to convert it to an APPROVE vote.

xml-formatted comments

Late comments

Informative Annex: Lost causes

The following arguments were submitted in previous ballots but rejected by the Ballot Review Committee.

comments-190.html,1.4,08/05/01