82 lines
3.3 KiB
Text
82 lines
3.3 KiB
Text
|
This directory contains source for several test programs:
|
||
|
|
||
|
dt is for conversion to/from double; it permits input of pairs of
|
||
|
32-bit hex integers as #hhhhhhhh hhhhhhhh (i.e., the initial '#'
|
||
|
indicates hex input). No initial # ==> decimal input.
|
||
|
After the input number is an optional : mode ndigits
|
||
|
(colon, and decimal integers for parameters "mode" and "ndigits"
|
||
|
to gdtoa).
|
||
|
|
||
|
Qtest, ddtest, dtest, ftest, xLtest and xtest are for conversion to/from
|
||
|
|
||
|
f IEEE single precision
|
||
|
d IEEE double precision
|
||
|
xL IEEE extended precision, as on Motorola 680x0 chips
|
||
|
x IEEE extended precision, as on Intel 80x87 chips or
|
||
|
software emulation of Motorola 680x0 chips
|
||
|
Q quad precision, as on Sun Sparc chips
|
||
|
dd double double, pairs of IEEE double numbers
|
||
|
whose sum is the desired value
|
||
|
|
||
|
They're all similar, except for the precision. They test both
|
||
|
directed roundings and interval input (the strtoI* routines).
|
||
|
Lines that begin with "r" specify or interrogate the desired rounding
|
||
|
direction:
|
||
|
|
||
|
0 = toward 0
|
||
|
1 = nearest (default)
|
||
|
2 = toward +Infinity
|
||
|
3 = toward -Infinity
|
||
|
|
||
|
These are the FPI_Round_* values in gdota.h. The "r" value is sticky:
|
||
|
it stays in effect til changed. To change the value, give a line that
|
||
|
starts with r followed by 0, 1, 2, or 3. To check the value, give "r"
|
||
|
by itself.
|
||
|
|
||
|
Lines that begin with n followed by a number specify the ndig
|
||
|
argument for subsequent calls to the relevant g_*fmt routine.
|
||
|
|
||
|
Lines that start with # followed by the appropriate number of
|
||
|
hexadecimal strings (see the comments) give the big-endian
|
||
|
internal representation of the desired number.
|
||
|
|
||
|
When routines Qtest, xLtest, and xtest are used on machines whose
|
||
|
long double is of type "quad" (for Qtest) or "extended" (for x*test),
|
||
|
they try to print with %Lg as another way to show binary values.
|
||
|
|
||
|
Program ddtest also accepts (white-space separated) pairs of decimal
|
||
|
input numbers; it converts both with strtod and feeds the result
|
||
|
to g_ddfmt.
|
||
|
|
||
|
Program dItest exercises strtodI and strtoId.
|
||
|
|
||
|
Programs dItestsi and ddtestsi are for testing the sudden-underflow
|
||
|
logic (on double and double-double conversions).
|
||
|
|
||
|
Program strtodt tests strtod on some hard cases (in file testnos3)
|
||
|
posted by Fred Tydeman to comp.arch.arithmetic on 26 Feb. 1996.
|
||
|
To get correct results on Intel (x86) systems, the rounding precision
|
||
|
must be set to 53 bits. This can be done, e.g., by invoking
|
||
|
fpinit_ASL(), whose source appears in
|
||
|
http://www.netlib.org/ampl/solvers/fpinit.c .
|
||
|
|
||
|
The obad directory shows results expected on (at least some) Intel x86
|
||
|
Linux systems and may not be relevant to other systems.
|
||
|
|
||
|
You can optionally compile getround.c with -DHonor_FLT_ROUNDS
|
||
|
to manually test strtof, strtod, etc., using fegetround().
|
||
|
You can also or alternatively compile getround.c with
|
||
|
-DUSE_MY_LOCALE (when ../gdtoa.a is compiled with -DUSE_LOCALE)
|
||
|
to test multi-byte decimal points.
|
||
|
|
||
|
If in the parent directory, you have sucessfully invoked "make Printf"
|
||
|
to add a "printf" (called Printf and accessed via ../stdio1.h), then
|
||
|
here you can use "make pf_test" and (if you have both a 64-bit long
|
||
|
double and a 113-bit "quad" double type) "make pf_testLq" for a brief
|
||
|
test of %g and %a variants in Printf.
|
||
|
|
||
|
These are simple test programs, not meant for exhaustive testing,
|
||
|
but for manually testing "interesting" cases. Paxson's testbase
|
||
|
is good for more exhaustive testing, in part with random inputs.
|
||
|
See ftp://ftp.ee.lbl.gov/testbase-report.ps.Z .
|