summaryrefslogtreecommitdiff
path: root/test/math/ieetst.doc
diff options
context:
space:
mode:
Diffstat (limited to 'test/math/ieetst.doc')
-rw-r--r--test/math/ieetst.doc132
1 files changed, 132 insertions, 0 deletions
diff --git a/test/math/ieetst.doc b/test/math/ieetst.doc
new file mode 100644
index 000000000..be2388bcc
--- /dev/null
+++ b/test/math/ieetst.doc
@@ -0,0 +1,132 @@
+
+ ieetst, version 0.2
+
+ This software tests the numerical accuracy of floating point
+binary <-> decimal string conversion, as done by your C language
+library functions printf() and scanf(), for compliance with the
+IEEE arithmetic standards ANSI/IEEE Std 754-1985 and ANSI/IEEE
+Std 854-1987. The test covers 32-bit float, 64-bit double, and
+80-bit long double precision conversions to and from decimal
+ASCII strings.
+
+ The test program checks for proper implementation of the
+following specifications of the standards:
+
+ (1) correctly rounded conversions of numbers of the form M *
+ 10^N, where M and N are integers such that, in double precision,
+ for example, |M| < 10^17, |N| <= 27.
+
+ (2) binary -> decimal -> binary conversions to be an identity
+ if a sufficiently large number of decimal digits is requested.
+
+ (3) correctly rounded decimal outputs of less than the maximum
+ number of digits
+
+ (4) The maximum observed conversion error of numbers outside the
+ domain covered by (1) is reported by the test program; it is
+ not supposed to exceed 0.97 ulp.
+
+There are 10 separate tests. Tests 1 through 6 use values near
+2^n and 10^n. Test 7 addresses item (1) above. Test 8 checks
+the rounding of exact half-integer numbers. Test 9 is for item
+(4) above. Test 10 checks denormal numbers. Tests 8 through 10
+address item (3) using printf formats that produce outputs of 1,
+2, 3, ... digits after the decimal point. All tests check, when
+appropriate, that the binary output of scanf is the same as the
+binary input to printf, item (2).
+
+Example error messages:
+
+ 0000 0000 0000 1000 8000 3f80 ->printf-> 5.87748296e-39 ->scanf->
+ 0000 0000 0000 0000 8000 3f6e is not an identity.
+
+ scanf(-9.9999900000000003e-01) -> 0000 4800 085f ef39 ffff bffe
+ should be 0000 5000 085f ef39 ffff bffe .
+
+ printf("%.14e", 6.13592315154256467968352E-3) -> 6.13592315154257e-03
+ should be 6.13592315154256E-3 .
+
+Binary values are displayed as four-digit hex groups in the
+little-endian format of the internal reference arithmetic. The
+least significant 16-bit word is first, the exponent is last.
+
+ The design of the test program requires knowing the binary
+data structure of the floating point format under test. For
+configuration, check the .h files carefully. All the programs
+need to be told via mconf.h if the numeric format is
+little-endian (IBMPC) or big-endian (MIEEE). If your system
+supports an 80-bit long double precision data type, define
+LDOUBLE 1 in ieetst.c; otherwise define LDOUBLE 0. A provision
+for DEC PDP-11/VAX numbers is implemented (double precision
+only). Conversions for other data structures can be added by
+analogy to the ifdefs for DEC.
+
+ Most of the tests rely on comparison with the results of a
+portable reference arithmetic, contained in the file ieee.c.
+This is configured for an 80-bit significand, to have enough
+precision to satisfy the conversion requirements of IEEE 854 for
+the extended double format of IEEE 754. The reference arithmetic
+includes binary <--> ASCII conversion routines and single <-->
+double <--> extended double conversions. A strictly rounded
+square root function is given in esqrt.c. Additional functions
+are provided by elog.c, eexp.c, etanh.c, epow.c, all of which
+call on ieee.c for their arithmetic. Some of the ANSI C
+functions are supplied in ieee.c; for example, efloor(),
+efrexp(), eldexp(). The functions and the reference arithmetic
+are described further in the book _Methods and Programs for
+Mathematical Functions_ (Prentice-Hall or Simon & Schuster
+International, 1989), by S. L. Moshier.
+
+ As an aid in diagnosis, a calculator program, ecalc.c, is
+supplied. It uses ieee.c for its arithmetic. Documentation for
+the calculator's user interface is in the file calc100.doc
+(calc100 is a fuller featured 100-digit version of ecalc). The
+calculator needs to be told by qcalc.h if addresses are 32 bits
+long (define LARGEMEM 1) or 16 bits long (define LARGEMEM 0).
+
+ Because the source code of ieee.c is included here, a version
+of W. Kahan's PARANOIA is also provided; this has been heavily
+modified by substituting subroutine calls to ieee.c in place of
+all arithmetic operators. It is important that you use PARANOIA
+to check the arithmetic after any modifications you may make to
+ieee.c.
+
+ Several systems have been tested with the initial version of
+ieetst. Sun 4 (SPARC) passes; DEC VMS C has only a small flaw;
+Microsoft flunks; ATT SysVR2 (Motorola) flunks even worse.
+
+
+ Files:
+
+calc100.doc calculator documentaton
+descrip.mms part of VAX VMS makefile
+drand.c random number generator
+ecalc.c calculator
+ecalc.opt part of VAX VMS makefile
+econst.c constants for reference arithmetic
+eexp.c reference exponential function
+ehead.h declarations for reference arithmetic routines
+elog.c reference logarithm
+eparanoi.c floating point arithmetic tester
+eparanoi.opt part of VAX VMS makefile
+epow.c reference exponentiation
+esqrt.c reference square root
+etanh.c reference hyperbolic tangent
+etodec.c conversions to and from DEC double precision format
+ieee.c the reference arithmetic
+ieetst.c printf/scanf tester
+ieetst.doc this file
+ieetst.mak Microsoft make file
+ieetst.opt part of VAX VMS makefile
+makefile Unix make file
+mconf.h definitions for arithmetic format
+mtherr.c common error reporter
+qcalc.h definitions for calculator
+
+
+This software may be copied freely.
+
+-- Steve Moshier
+
+v0.1 July, 1992
+v0.2 January, 1993