aboutsummaryrefslogtreecommitdiff
path: root/doc/testfloat_ver.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/testfloat_ver.html')
-rw-r--r--doc/testfloat_ver.html250
1 files changed, 250 insertions, 0 deletions
diff --git a/doc/testfloat_ver.html b/doc/testfloat_ver.html
new file mode 100644
index 0000000..4d1540e
--- /dev/null
+++ b/doc/testfloat_ver.html
@@ -0,0 +1,250 @@
+
+<HTML>
+
+<HEAD>
+<TITLE>testfloat_ver</TITLE>
+</HEAD>
+
+<BODY>
+
+<H1>Berkeley TestFloat Release 3: <CODE>testfloat_ver</CODE></H1>
+
+<P>
+John R. Hauser<BR>
+2014 ______<BR>
+</P>
+
+<P>
+*** CONTENT DONE.
+</P>
+
+<P>
+*** REPLACE QUOTATION MARKS.
+<BR>
+*** REPLACE APOSTROPHES.
+<BR>
+*** REPLACE EM DASH.
+</P>
+
+
+<H2>Overview</H2>
+
+<P>
+The <CODE>testfloat_ver</CODE> program takes test-case results obtained from
+exercising an implementation of floating-point arithmetic and verifies that
+those results conform to the IEEE Standard for Binary Floating-Point
+Arithmetic.
+<CODE>testfloat_ver</CODE> is part of the Berkeley TestFloat package, a small
+collection of programs for performing such tests.
+For general information about TestFloat, see file
+<A HREF="TestFloat-general.html"><NOBR><CODE>TestFloat-general.html</CODE></NOBR></A>.
+</P>
+
+<P>
+A single execution of <CODE>testfloat_ver</CODE> verifies results for only a
+single floating-point operation and associated options.
+The <CODE>testfloat_ver</CODE> program must be repeatedly executed to verify
+results for each operation to be tested.
+</P>
+
+<P>
+The test cases to be verified are read by <CODE>testfloat_ver</CODE> from
+standard input.
+This input will typically be piped from another program that, for each test
+case, invokes the floating-point operation and writes out the results.
+The format of <CODE>testfloat_ver</CODE>'s input is raw hexadecimal text,
+described in the section below titled <I>Input Format</I>.
+</P>
+
+<P>
+For each test case given to it, <CODE>testfloat_ver</CODE> examines the
+computed results and reports any unexpected results as likely errors.
+
+For more about the operation of <CODE>testfloat_ver</CODE> and how to interpret
+its output, refer to
+<A HREF="TestFloat-general.html"><NOBR><CODE>TestFloat-general.html</CODE></NOBR></A>.
+</P>
+
+
+<H2>Command Syntax</H2>
+
+<P>
+The <CODE>testfloat_ver</CODE> program is executed as a command with this
+syntax:
+<PRE>
+ testfloat_ver [&lt;option&gt;...] &lt;function&gt;
+</PRE>
+Square brackets (<CODE>[ ]</CODE>) denote optional arguments,
+<CODE>&lt;option&gt;</CODE> is a supported option, and
+<CODE>&lt;function&gt;</CODE> is the name of a testable operation.
+The available options are documented below.
+The testable operation names are listed in
+<A HREF="TestFloat-general.html"><NOBR><CODE>TestFloat-general.html</CODE></NOBR></A>.
+If <CODE>testfloat_ver</CODE> is executed without any arguments, a summary of
+usage is written.
+</P>
+
+
+<H2>Options</H2>
+
+<P>
+The <CODE>testfloat_ver</CODE> program accepts several command options.
+If mutually contradictory options are given, the last one has priority.
+</P>
+
+<H3><CODE>-help</CODE></H3>
+
+<P>
+The <CODE>-help</CODE> option causes a summary of program usage to be written,
+after which the program exits.
+</P>
+
+<H3><CODE>-errors &lt;num&gt;</CODE></H3>
+
+<P>
+The <CODE>-errors</CODE> option instructs <CODE>testfloat_ver</CODE> to report
+no more than the specified number of errors.
+The argument to <CODE>-errors</CODE> must be a nonnegative decimal integer.
+Once the specified number of error reports has been generated, the program
+exits.
+The default is <NOBR><CODE>-errors</CODE> <CODE>20</CODE></NOBR>.
+</P>
+
+<P>
+Against intuition, <NOBR><CODE>-errors</CODE> <CODE>0</CODE></NOBR> causes
+<CODE>testfloat_ver</CODE> to continue for any number of errors.
+</P>
+
+<H3><CODE>-checkNaNs</CODE></H3>
+
+<P>
+The <CODE>-checkNaNs</CODE> option causes <CODE>testfloat_ver</CODE> to verify
+the bitwise correctness of NaN results.
+In order for this option to be sensible, <CODE>testfloat_ver</CODE> must have
+been compiled so that its internal reference implementation of floating-point
+(SoftFloat) generates the proper NaN results for the system being tested.
+</P>
+
+<H3><CODE>-precision32, -precision64, -precision80</CODE></H3>
+
+<P>
+When <CODE>&lt;function&gt;</CODE> is an <NOBR>80-bit</NOBR>
+double-extended-precision operation affected by rounding precision control, the
+<CODE>-precision32</CODE> option indicates that the rounding precision should
+be <NOBR>32 bits</NOBR>, equivalent to <NOBR>32-bit</NOBR> single-precision.
+Likewise, <CODE>-precision64</CODE> indicates that the rounding precision
+should be <NOBR>64 bits</NOBR>, equivalent to <NOBR>64-bit</NOBR>
+double-precision, and <CODE>-precision80</CODE> indicates that the rounding
+precision should be the full <NOBR>80 bits</NOBR> of the
+double-extended-precision format.
+All these options are ignored for operations not affected by rounding precision
+control.
+When rounding precision is applicable but not specified, the default assumption
+is the full <NOBR>80 bits</NOBR>, same as <CODE>-precision80</CODE>.
+</P>
+
+<H3><CODE>-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax</CODE></H3>
+
+<P>
+When <CODE>&lt;function&gt;</CODE> is an operation that requires rounding, the
+<CODE>-rnear_even</CODE> option indicates that rounding should be to
+nearest/even, <CODE>-rnear_maxMag</CODE> indicates rounding to nearest/maximum
+magnitude (nearest-away), <CODE>-rminMag</CODE> indicates rounding to minimum
+magnitude (toward zero), <CODE>-rmin</CODE> indicates rounding to minimum
+(down, toward negative infinity), and <CODE>-rmax</CODE> indicates rounding to
+maximum (up, toward positive infinity).
+These options are ignored for operations that are exact and thus do not round.
+When rounding mode is relevant but not specified, the default assumption is
+rounding to nearest/even, same as <CODE>-rnear_even</CODE>.
+</P>
+
+<H3><CODE>-tininessbefore, -tininessafter</CODE></H3>
+
+<P>
+When <CODE>&lt;function&gt;</CODE> is an operation that requires rounding, the
+<CODE>-tininessbefore</CODE> option indicates that tininess on underflow should
+be detected before rounding, while <CODE>-tininessafter</CODE> indicates that
+tininess on underflow should be detected after rounding.
+These options are ignored for operations that are exact and thus do not round.
+When the method of tininess detection matters but is not specified, the default
+assumption is that tininess should be detected before rounding, same as
+<CODE>-tininessbefore</CODE>.
+</P>
+
+<H3><CODE>-notexact, -exact</CODE></H3>
+
+<P>
+When <CODE>&lt;function&gt;</CODE> is an operation that rounds to an integer
+(either conversion to an integer type or a <CODE>roundToInt</CODE> operation),
+the <CODE>-notexact</CODE> option indicates that the <I>inexact</I> exception
+flag should never be raised, while <CODE>-exact</CODE> indicates that the
+<I>inexact</I> exception flag should be raised when the result is inexact.
+For other operations, these options are ignored.
+If neither option is specified, the default assumption is that the
+<I>inexact</I> exception flag should not be raised when rounding to an integer,
+same as <CODE>-notexact</CODE>.
+</P>
+
+
+<H2>Input Format</H2>
+
+<P>
+For a given <CODE>&lt;function&gt;</CODE> argument, the input format expected
+by <CODE>testfloat_ver</CODE> is the same as the output generated by program
+<A HREF="testfloat_gen.html"><NOBR><CODE>testfloat_gen</CODE></NOBR></A> for
+the same argument.
+</P>
+
+<P>
+Input to <CODE>testfloat_ver</CODE> is expected to be text, with each line
+containing the data for one test case.
+The number of input lines thus equals the number of test cases.
+A single test case is organized as follows: first are the operands for the
+operation, next is the result value obtained, and last is a number indicating
+the exception flags that were raised.
+These values are all expected to be provided as raw hexadecimal numbers
+separated on the line by spaces.
+For example, for the command
+<PRE>
+ testfloat_ver f64_add
+</PRE>
+valid input could include these lines:
+<PRE>
+ 3F90EB5825D6851E C3E0080080000000 C3E0080080000000 01
+ 41E3C00000000000 C182024F8AE474A8 41E377F6C1D46E2D 01
+ 7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80 7FF0000000000000 05
+ 3FFFED6A25C534BE 3CA1000000020000 3FFFED6A25C534BF 01
+ ...
+</PRE>
+On each line above, the first two hexadecimal numbers represent the
+<NOBR>64-bit</NOBR> floating-point operands, the third hexadecimal number is
+the <NOBR>64-bit</NOBR> floating-point result of the operation (the sum), and
+the last hexadecimal number gives the exception flags that were raised by the
+operation.
+</P>
+
+<P>
+Note that, for floating-point values, the sign and exponent are at the
+most-significant end of the number.
+Thus, for the first number on the first line above, the leading hexadecimal
+digits <CODE>3F9</CODE> are the sign and encoded exponent of the
+<NOBR>64-bit</NOBR> floating-point value, and the remaining digits are the
+encoded significand.
+</P>
+
+<P>
+Exception flags are encoded with one bit per flag as follows:
+<BLOCKQUOTE>
+<TABLE>
+<TR><TD>bit 0</TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD><I>inexact</I> exception</TD></TR>
+<TR><TD>bit 1</TD><TD> </TD><TD><I>underflow</I> exception</TD></TR>
+<TR><TD>bit 2</TD><TD> </TD><TD><I>overflow</I> exception</TD></TR>
+<TR><TD>bit 3</TD><TD> </TD><TD><I>infinite</I> exception ("divide by zero")</TD></TR>
+<TR><TD>bit 4</TD><TD> </TD><TD><I>invalid</I> exception</TD></TR>
+</TABLE>
+</BLOCKQUOTE>
+</P>
+
+
+</BODY>
+