diff options
Diffstat (limited to 'test/math/ieetst.doc')
-rw-r--r-- | test/math/ieetst.doc | 264 |
1 files changed, 132 insertions, 132 deletions
diff --git a/test/math/ieetst.doc b/test/math/ieetst.doc index be2388bcc..bd5134beb 100644 --- a/test/math/ieetst.doc +++ b/test/math/ieetst.doc @@ -1,132 +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
+ + 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 |