Standards are important in all areas of computing. They provide consistency, and allow implementations to be verified for conformance. The IEEE Standard for Binary Floating-Point Arithmetic (IEEE 754) was responsible for ensuring that (almost) all modern floating-point implementations use the same representations for single and double precision numbers, and produce the same results for the basic operations of addition, subtraction, multiplication, division, comparison, and type conversion, along with the single mathematical function square root.
The existence of the standard means that algorithms using floating-point arithmetic can be analyzed once to determine the effects of rounding errors on the final computed results. No comparable standard exists for the other basic mathematical functions, such as sine (sin), cosine (cos), exponential function (exp), and logarithm (log). The generation of such a standard, along with a means of producing conformance verification tests, would allow the level of reliability and rounding error analyses to be improved further.
Various approaches to producing a standard, based on IEEE 754, for the implementation of mathematical functions have appeared, although none have provided a complete framework on their own. The contribution of this paper is to draw together these approaches in order to form a complete framework. In addition, the author also presents a novel method for the design and implementation of verification test suites.
The core of the paper is a detailed description of all the individual properties of mathematical functions that need to be considered (the vast majority of these are presented with an illustrative example), along with the construction of the verification tests. This is followed by the practical application of the framework to the exponential function, and a report on the results of running the resultant conformance tests on a set of 17 different hardware/software configurations. This section is well worth dipping into, especially for reports of exp(1) returning a value of just over 4.0 on one system: rounding, but not as we understand it!
This well-written paper contains a mine of information for anyone wanting insight into the detailed considerations necessary to ensure accurately rounded results from floating-point implementations of mathematical functions. As such, it is not a paper for beginners, although they may find some of the examples and results of the tests illuminating.