An Extended-Precision Library
Figure 4 describes the functions included in the library of extended-precision functions. Complete source code for the 100-digit library, written by S. L. Moshier, is included with the code for this article.
These routines operate on floating-point data that consists of 24 words of type short per datum. This data is referred to as "q-type data" by Moshier [14]. The layout of this data type is:
s e o 21-word significand | 1 | 2 | 3 | _____________________ | s - sign (0 for plus, -1 for minus) e - exponent (0x7fff at most, 0x4001 for 1.0) o - overflow from significand
The 336 bits of significand in q-type data yield slightly more than 100 digits of precision. Versions of these programs that operate with 144 bits of significand (about 43 digits of precision) are described in Moshier [14].
You can build three extended-precision libraries with the source files provided with this article. The first is a version that produces results that obey strict rounding rules. This version consists of objects compiled from all C source files. Of the three libraries, executables produced with this library are the slowest.
The second library also uses all C source files but does not obey strict rounding rules. This library enjoys a speed advantage of about 4.9 over the first library.
The third library uses assembly-language routines to provide the fastest execution of the extra-precision arithmetic. The speed improvement is roughly a factor of 2.5 over the second library and 12.4 over the first one. The assembler source used in the DOS version of the program with this article is for a computer with an Intel x86 compatible CPU. Source for a Motorola 68000 is included but we have not used it. Stephen L. Moshier indicates that: "the 68k routines of the arithmetic were used extensively to check the big-endian versions."