------------ Information about double-double arithmetic ------------ QMG 2.0.2 uses doubledouble arithmetic, written by Keith Briggs, whose home page is http://www-epidem.plantsci.cam.ac.uk/~kbriggs/ Doubledouble is based on ideas by Keith and others noted in the source files including W. Kahan. Doubledouble arithmetic simulates 106-bit arithmetic (almost quad precision) using two IEEE double-precision numbers. QMG invokes doubledouble arithmetic for computations involving curved surface patches in the case that it detects a degeneracy with the patch. For more information, see the official home page of doubledouble: http://www-epidem.plantsci.cam.ac.uk/~kbriggs/doubledouble.html Doubledouble arithmetic is suitable only for computers that use IEEE standard arithmetic. It has been tested on the following platforms: Pentium III/Windows NT, Pentium II/Linux, UltraSparc/Solaris, and RS6000/AIX. A subset of doubledouble is distributed with QMG. Keith Briggs has permitted it to be distributed under the same license that covers QMG 2.0. The standard distribution of doubledouble is covered by the Gnu Public License. It is recommended that you obtain the standard distribution if you plan to use double-double arithmetic in another project since the standard distribution is more functional and may have more bug-fixes. If you plan to use the doubledouble subset of QMG in a separate project, there are additional license terms that apply; see the new version of copyright shipped with QMG. As mentioned above, doubledouble does not work on all computers. It works on Pentiums, but only when the floating-point unit (FPU) is set for 53-bit mode. This requires machine-language instructions to set and reset the FPU control word. These instruction are coded in the source file doubledouble2.cpp. They are coded to work with either the Gnu assembler in GCC or the Microsoft assembler in Visual Studio. If you are using another C++ compiler for a Pentium machine, then you will have to modify doubledouble2.cpp to encode the two machine-language instructions according to the assembler for your compiler. Since doubledouble does not work on all computers, QMG invokes a self-test before using doubledouble. If the self-test fails, you will receive an error message that doubledouble validation failed. Some possible workarounds for this error message are: (1) Compiler optimization sometimes spoils the inner workings of doubledouble. Try recompiling the two files doubledouble2.cpp and qrfacdd.cpp with all compiler optimization disabled. (2) Find out more about the floating point unit on your processor. If it uses many extended guard digits in its registers, then doubledouble may fail. Find out if there is a setting to force the FPU to use only 53-bit IEEE mantissas. If so, modify doubledouble2.cpp so that the routines entitled set_float_control_to_53_bits and restore_float_control change the settings of your FPU. (3) You may not need doubledouble at all if your computer supports quad-precision natively. On some computers, quad precision is obtained with the type "long double." But on others, "long double" is the same as double. To switch to native long double, change doubledouble2.h so that it contains the single statement typedef long double doubledouble; Then change doubledouble2.cpp and inline2.h to be blank files. Finally, comment out the two statements in qrfacdd.cpp concerned with the float control register. The self-test procedure will then tell you whether this works. (In other words, you will not get an error from alltests if this works.) (4) If none of the above options work, then you will have to go back to using QMG 2.0 or QMG 2.0.1. These versions of QMG have known problems with robustness of curved-patch arithmetic.