From: Richard Kreckel Date: Mon, 28 Aug 2000 22:10:51 +0000 (+0000) Subject: * Argh, we are threshing CVS. Removed some non-sources. X-Git-Tag: cln_1-1-0~25 X-Git-Url: https://www.ginac.de/CLN/cln.git//cln.git?a=commitdiff_plain;h=f893f25f2d40c89d42e1d884b082966f8afeeb68;p=cln.git * Argh, we are threshing CVS. Removed some non-sources. --- diff --git a/doc/cln.dvi b/doc/cln.dvi deleted file mode 100644 index 78de3c1..0000000 Binary files a/doc/cln.dvi and /dev/null differ diff --git a/doc/cln.html b/doc/cln.html deleted file mode 100644 index 1c6aef9..0000000 --- a/doc/cln.html +++ /dev/null @@ -1,4898 +0,0 @@ - - - - -CLN, a Class Library for Numbers - - -

CLN, a Class Library for Numbers

-
by Bruno Haible
-

-


-

Table of Contents

- -


- - -

1. Introduction

- -

-CLN is a library for computations with all kinds of numbers. -It has a rich set of number classes: - - - -

- -

-The subtypes of the complex numbers among these are exactly the -types of numbers known to the Common Lisp language. Therefore -CLN can be used for Common Lisp implementations, giving -`CLN' another meaning: it becomes an abbreviation of -"Common Lisp Numbers". - - -

-The CLN package implements - - - -

- -

-CLN is a C++ library. Using C++ as an implementation language provides - - - -

- -

-CLN is memory efficient: - - - -

- -

-CLN is speed efficient: - - - -

- -

-CLN aims at being easily integrated into larger software packages: - - - -

- - - -

2. Installation

- -

-This section describes how to install the CLN package on your system. - - - - -

2.1 Prerequisites

- - - -

2.1.1 C++ compiler

- -

-To build CLN, you need a C++ compiler. -Actually, you need GNU g++ 2.90 or newer, the EGCS compilers will -do. -I recommend GNU g++ 2.95 or newer. - - -

-The following C++ features are used: -classes, member functions, overloading of functions and operators, -constructors and destructors, inline, const, multiple inheritance, -templates and namespaces. - - -

-The following C++ features are not used: -new, delete, virtual inheritance, exceptions. - - -

-CLN relies on semi-automatic ordering of initializations -of static and global variables, a feature which I could -implement for GNU g++ only. - - - - -

2.1.2 Make utility

-

- - - -

-To build CLN, you also need to have GNU make installed. - - - - -

2.1.3 Sed utility

-

- - - -

-To build CLN on HP-UX, you also need to have GNU sed installed. -This is because the libtool script, which creates the CLN library, relies -on sed, and the vendor's sed utility on these systems is too -limited. - - - - -

2.2 Building the library

- -

-As with any autoconfiguring GNU software, installation is as easy as this: - - - -

-$ ./configure
-$ make
-$ make check
-
- -

-If on your system, `make' is not GNU make, you have to use -`gmake' instead of `make' above. - - -

-The configure command checks out some features of your system and -C++ compiler and builds the Makefiles. The make command -builds the library. This step may take 4 hours on an average workstation. -The make check runs some test to check that no important subroutine -has been miscompiled. - - -

-The configure command accepts options. To get a summary of them, try - - - -

-$ ./configure --help
-
- -

-Some of the options are explained in detail in the `INSTALL.generic' file. - - -

-You can specify the C compiler, the C++ compiler and their options through -the following environment variables when running configure: - - -

- -
CC -
-Specifies the C compiler. - -
CFLAGS -
-Flags to be given to the C compiler when compiling programs (not when linking). - -
CXX -
-Specifies the C++ compiler. - -
CXXFLAGS -
-Flags to be given to the C++ compiler when compiling programs (not when linking). -
- -

-Examples: - - - -

-$ CC="gcc" CFLAGS="-O" CXX="g++" CXXFLAGS="-O" ./configure
-$ CC="gcc -V egcs-2.91.60" CFLAGS="-O -g" \
-  CXX="g++ -V egcs-2.91.60" CXXFLAGS="-O -g" ./configure
-$ CC="gcc -V 2.95.2" CFLAGS="-O2 -fno-exceptions" \
-  CXX="g++ -V 2.95.2" CFLAGS="-O2 -fno-exceptions" ./configure
-
- -

-Note that for these environment variables to take effect, you have to set -them (assuming a Bourne-compatible shell) on the same line as the -configure command. If you made the settings in earlier shell -commands, you have to export the environment variables before -calling configure. In a csh shell, you have to use the -`setenv' command for setting each of the environment variables. - - -

-Currently CLN works only with the GNU g++ compiler, and only in -optimizing mode. So you should specify at least -O in the CXXFLAGS, -or no CXXFLAGS at all. (If CXXFLAGS is not set, CLN will use -O.) - - -

-If you use g++ version 2.8.x or egcs-2.91.x (a.k.a. egcs-1.1) or -gcc-2.95.x, I recommend adding `-fno-exceptions' to the CXXFLAGS. -This will likely generate better code. - - -

-If you use g++ version egcs-2.91.x (egcs-1.1) or gcc-2.95.x on Sparc, -add either `-O', `-O1' or `-O2 -fno-schedule-insns' to the -CXXFLAGS. With full `-O2', g++ miscompiles the division routines. -Also, if you have g++ version egcs-1.1.1 or older on Sparc, you must -specify `--disable-shared' because g++ would miscompile parts of -the library. - - -

-By default, both a shared and a static library are built. You can build -CLN as a static (or shared) library only, by calling configure with -the option `--disable-shared' (or `--disable-static'). While -shared libraries are usually more convenient to use, they may not work -on all architectures. Try disabling them if you run into linker -problems. Also, they are generally somewhat slower than static -libraries so runtime-critical applications should be linked statically. - - - - -

2.2.1 Using the GNU MP Library

-

- - - -

-Starting with version 1.1, CLN may be configured to make use of a -preinstalled gmp library. Please make sure that you have at -least gmp version 3.0 installed since earlier versions are -unsupported and likely not to work. Enabling this feature by calling -configure with the option `--with-gmp' is known to be quite -a boost for CLN's performance. - - -

-If you have installed the gmp library and its header file in -some place where your compiler cannot find it by default, you must help -configure by setting CPPFLAGS and LDFLAGS. Here is -an example: - - - -

-$ CC="gcc" CFLAGS="-O2" CXX="g++" CXXFLAGS="-O2 -fno-exceptions" \
-  CPPFLAGS="-I/opt/gmp/include" LDFLAGS="-L/opt/gmp/lib" ./configure --with-gmp
-
- - - -

2.3 Installing the library

-

- - - -

-As with any autoconfiguring GNU software, installation is as easy as this: - - - -

-$ make install
-
- -

-The `make install' command installs the library and the include files -into public places (`/usr/local/lib/' and `/usr/local/include/', -if you haven't specified a --prefix option to configure). -This step may require superuser privileges. - - -

-If you have already built the library and wish to install it, but didn't -specify --prefix=... at configure time, just re-run -configure, giving it the same options as the first time, plus -the --prefix=... option. - - - - -

2.4 Cleaning up

- -

-You can remove system-dependent files generated by make through - - - -

-$ make clean
-
- -

-You can remove all files generated by make, thus reverting to a -virgin distribution of CLN, through - - - -

-$ make distclean
-
- - - -

3. Ordinary number types

- -

-CLN implements the following class hierarchy: - - - -

-                        Number
-                      cl_number
-                    <cln/number.h>
-                          |
-                          |
-                 Real or complex number
-                        cl_N
-                    <cln/complex.h>
-                          |
-                          |
-                     Real number
-                        cl_R
-                     <cln/real.h>
-                          |
-      +-------------------+-------------------+
-      |                                       |
-Rational number                     Floating-point number
-    cl_RA                                   cl_F
-<cln/rational.h>                         <cln/float.h>
-      |                                       |
-      |                +--------------+--------------+--------------+
-   Integer             |              |              |              |
-    cl_I          Short-Float    Single-Float   Double-Float    Long-Float
-<cln/integer.h>      cl_SF          cl_FF          cl_DF          cl_LF
-                 <cln/sfloat.h> <cln/ffloat.h> <cln/dfloat.h> <cln/lfloat.h>
-
- -

- - -The base class cl_number is an abstract base class. -It is not useful to declare a variable of this type except if you want -to completely disable compile-time type checking and use run-time type -checking instead. - - -

- - - -The class cl_N comprises real and complex numbers. There is -no special class for complex numbers since complex numbers with imaginary -part 0 are automatically converted to real numbers. - - -

- -The class cl_R comprises real numbers of different kinds. It is an -abstract class. - - -

- - - -The class cl_RA comprises exact real numbers: rational numbers, including -integers. There is no special class for non-integral rational numbers -since rational numbers with denominator 1 are automatically converted -to integers. - - -

- -The class cl_F implements floating-point approximations to real numbers. -It is an abstract class. - - - - -

3.1 Exact numbers

-

- - - -

-Some numbers are represented as exact numbers: there is no loss of information -when such a number is converted from its mathematical value to its internal -representation. On exact numbers, the elementary operations (+, --, *, /, comparisons, ...) compute the completely -correct result. - - -

-In CLN, the exact numbers are: - - - -

- -

-Rational numbers are always normalized to the form -numerator/denominator where the numerator and denominator -are coprime integers and the denominator is positive. If the resulting -denominator is 1, the rational number is converted to an integer. - - -

-Small integers (typically in the range -2^30...2^30-1, -for 32-bit machines) are especially efficient, because they consume no heap -allocation. Otherwise the distinction between these immediate integers -(called "fixnums") and heap allocated integers (called "bignums") -is completely transparent. - - - - -

3.2 Floating-point numbers

-

- - - -

-Not all real numbers can be represented exactly. (There is an easy mathematical -proof for this: Only a countable set of numbers can be stored exactly in -a computer, even if one assumes that it has unlimited storage. But there -are uncountably many real numbers.) So some approximation is needed. -CLN implements ordinary floating-point numbers, with mantissa and exponent. - - -

- -The elementary operations (+, -, *, /, ...) -only return approximate results. For example, the value of the expression -(cl_F) 0.3 + (cl_F) 0.4 prints as `0.70000005', not as -`0.7'. Rounding errors like this one are inevitable when computing -with floating-point numbers. - - -

-Nevertheless, CLN rounds the floating-point results of the operations +, --, *, /, sqrt according to the "round-to-even" -rule: It first computes the exact mathematical result and then returns the -floating-point number which is nearest to this. If two floating-point numbers -are equally distant from the ideal result, the one with a 0 in its least -significant mantissa bit is chosen. - - -

-Similarly, testing floating point numbers for equality `x == y' -is gambling with random errors. Better check for `abs(x - y) < epsilon' -for some well-chosen epsilon. - - -

-Floating point numbers come in four flavors: - - - -

- -

-Of course, computations with long floats are more expensive than those -with smaller floating-point formats. - - -

-CLN does not implement features like NaNs, denormalized numbers and -gradual underflow. If the exponent range of some floating-point type -is too limited for your application, choose another floating-point type -with larger exponent range. - - -

- -As a user of CLN, you can forget about the differences between the -four floating-point types and just declare all your floating-point -variables as being of type cl_F. This has the advantage that -when you change the precision of some computation (say, from cl_DF -to cl_LF), you don't have to change the code, only the precision -of the initial values. Also, many transcendental functions have been -declared as returning a cl_F when the argument is a cl_F, -but such declarations are missing for the types cl_SF, cl_FF, -cl_DF, cl_LF. (Such declarations would be wrong if -the floating point contagion rule happened to change in the future.) - - - - -

3.3 Complex numbers

-

- - - -

-Complex numbers, as implemented by the class cl_N, have a real -part and an imaginary part, both real numbers. A complex number whose -imaginary part is the exact number 0 is automatically converted -to a real number. - - -

-Complex numbers can arise from real numbers alone, for example -through application of sqrt or transcendental functions. - - - - -

3.4 Conversions

-

- - - -

-Conversions from any class to any its superclasses ("base classes" in -C++ terminology) is done automatically. - - -

-Conversions from the C built-in types `long' and `unsigned long' -are provided for the classes cl_I, cl_RA, cl_R, -cl_N and cl_number. - - -

-Conversions from the C built-in types `int' and `unsigned int' -are provided for the classes cl_I, cl_RA, cl_R, -cl_N and cl_number. However, these conversions emphasize -efficiency. Their range is therefore limited: - - - -

- -

-In a declaration like `cl_I x = 10;' the C++ compiler is able to -do the conversion of 10 from `int' to `cl_I' at compile time -already. On the other hand, code like `cl_I x = 1000000000;' is -in error. -So, if you want to be sure that an `int' whose magnitude is not guaranteed -to be < 2^29 is correctly converted to a `cl_I', first convert it to a -`long'. Similarly, if a large `unsigned int' is to be converted to a -`cl_I', first convert it to an `unsigned long'. - - -

-Conversions from the C built-in type `float' are provided for the classes -cl_FF, cl_F, cl_R, cl_N and cl_number. - - -

-Conversions from the C built-in type `double' are provided for the classes -cl_DF, cl_F, cl_R, cl_N and cl_number. - - -

-Conversions from `const char *' are provided for the classes -cl_I, cl_RA, -cl_SF, cl_FF, cl_DF, cl_LF, cl_F, -cl_R, cl_N. -The easiest way to specify a value which is outside of the range of the -C++ built-in types is therefore to specify it as a string, like this: - - -

-   cl_I order_of_rubiks_cube_group = "43252003274489856000";
-
- -

-Note that this conversion is done at runtime, not at compile-time. - - -

-Conversions from cl_I to the C built-in types `int', -`unsigned int', `long', `unsigned long' are provided through -the functions - - -

- -
int cl_I_to_int (const cl_I& x) -
- -
unsigned int cl_I_to_uint (const cl_I& x) -
- -
long cl_I_to_long (const cl_I& x) -
- -
unsigned long cl_I_to_ulong (const cl_I& x) -
- -Returns x as element of the C type ctype. If x is not -representable in the range of ctype, a runtime error occurs. -
- -

-Conversions from the classes cl_I, cl_RA, -cl_SF, cl_FF, cl_DF, cl_LF, cl_F and -cl_R -to the C built-in types `float' and `double' are provided through -the functions - - -

- -
float float_approx (const type& x) -
- -
double double_approx (const type& x) -
- -Returns an approximation of x of C type ctype. -If abs(x) is too close to 0 (underflow), 0 is returned. -If abs(x) is too large (overflow), an IEEE infinity is returned. -
- -

-Conversions from any class to any of its subclasses ("derived classes" in -C++ terminology) are not provided. Instead, you can assert and check -that a value belongs to a certain subclass, and return it as element of that -class, using the `As' and `The' macros. - -As(type)(value) checks that value belongs to -type and returns it as such. - -The(type)(value) assumes that value belongs to -type and returns it as such. It is your responsibility to ensure -that this assumption is valid. -Example: - - - -

-   cl_I x = ...;
-   if (!(x >= 0)) abort();
-   cl_I ten_x = The(cl_I)(expt(10,x)); // If x >= 0, 10^x is an integer.
-                // In general, it would be a rational number.
-
- - - -

4. Functions on numbers

- -

-Each of the number classes declares its mathematical operations in the -corresponding include file. For example, if your code operates with -objects of type cl_I, it should #include <cln/integer.h>. - - - - -

4.1 Constructing numbers

- -

-Here is how to create number objects "from nothing". - - - - -

4.1.1 Constructing integers

- -

-cl_I objects are most easily constructed from C integers and from -strings. See section 3.4 Conversions. - - - - -

4.1.2 Constructing rational numbers

- -

-cl_RA objects can be constructed from strings. The syntax -for rational numbers is described in section 5.1 Internal and printed representation. -Another standard way to produce a rational number is through application -of `operator /' or `recip' on integers. - - - - -

4.1.3 Constructing floating-point numbers

- -

-cl_F objects with low precision are most easily constructed from -C `float' and `double'. See section 3.4 Conversions. - - -

-To construct a cl_F with high precision, you can use the conversion -from `const char *', but you have to specify the desired precision -within the string. (See section 5.1 Internal and printed representation.) -Example: - -

-   cl_F e = "0.271828182845904523536028747135266249775724709369996e+1_40";
-
- -

-will set `e' to the given value, with a precision of 40 decimal digits. - - -

-The programmatic way to construct a cl_F with high precision is -through the cl_float conversion function, see -section 4.11.1 Conversion to floating-point numbers. For example, to compute -e to 40 decimal places, first construct 1.0 to 40 decimal places -and then apply the exponential function: - -

-   cl_float_format_t precision = cl_float_format(40);
-   cl_F e = exp(cl_float(1,precision));
-
- - - -

4.1.4 Constructing complex numbers

- -

-Non-real cl_N objects are normally constructed through the function - -

-   cl_N complex (const cl_R& realpart, const cl_R& imagpart)
-
- -

-See section 4.4 Elementary complex functions. - - - - -

4.2 Elementary functions

- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type operator + (const type&, const type&) -
- -Addition. - -
type operator - (const type&, const type&) -
- -Subtraction. - -
type operator - (const type&) -
-Returns the negative of the argument. - -
type plus1 (const type& x) -
- -Returns x + 1. - -
type minus1 (const type& x) -
- -Returns x - 1. - -
type operator * (const type&, const type&) -
- -Multiplication. - -
type square (const type& x) -
- -Returns x * x. -
- -

-Each of the classes cl_N, cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type operator / (const type&, const type&) -
- -Division. - -
type recip (const type&) -
- -Returns the reciprocal of the argument. -
- -

-The class cl_I doesn't define a `/' operation because -in the C/C++ language this operator, applied to integral types, -denotes the `floor' or `truncate' operation (which one of these, -is implementation dependent). (See section 4.6 Rounding functions.) -Instead, cl_I defines an "exact quotient" function: - - -

- -
cl_I exquo (const cl_I& x, const cl_I& y) -
- -Checks that y divides x, and returns the quotient x/y. -
- -

-The following exponentiation functions are defined: - - -

- -
cl_I expt_pos (const cl_I& x, const cl_I& y) -
- -
cl_RA expt_pos (const cl_RA& x, const cl_I& y) -
-y must be > 0. Returns x^y. - -
cl_RA expt (const cl_RA& x, const cl_I& y) -
- -
cl_R expt (const cl_R& x, const cl_I& y) -
-
cl_N expt (const cl_N& x, const cl_I& y) -
-Returns x^y. -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type abs (const type& x) -
- -Returns the absolute value of x. -This is x if x >= 0, and -x if x <= 0. -
- -

-The class cl_N implements this as follows: - - -

- -
cl_R abs (const cl_N x) -
-Returns the absolute value of x. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type signum (const type& x) -
- -Returns the sign of x, in the same number format as x. -This is defined as x / abs(x) if x is non-zero, and -x if x is zero. If x is real, the value is either -0 or 1 or -1. -
- - - -

4.3 Elementary rational functions

- -

-Each of the classes cl_RA, cl_I defines the following operations: - - -

- -
cl_I numerator (const type& x) -
- -Returns the numerator of x. - -
cl_I denominator (const type& x) -
- -Returns the denominator of x. -
- -

-The numerator and denominator of a rational number are normalized in such -a way that they have no factor in common and the denominator is positive. - - - - -

4.4 Elementary complex functions

- -

-The class cl_N defines the following operation: - - -

- -
cl_N complex (const cl_R& a, const cl_R& b) -
- -Returns the complex number a+bi, that is, the complex number with -real part a and imaginary part b. -
- -

-Each of the classes cl_N, cl_R defines the following operations: - - -

- -
cl_R realpart (const type& x) -
- -Returns the real part of x. - -
cl_R imagpart (const type& x) -
- -Returns the imaginary part of x. - -
type conjugate (const type& x) -
- -Returns the complex conjugate of x. -
- -

-We have the relations - - - -

- - - -

4.5 Comparisons

-

- - - -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
bool operator == (const type&, const type&) -
- -
bool operator != (const type&, const type&) -
- -Comparison, as in C and C++. - -
uint32 equal_hashcode (const type&) -
- -Returns a 32-bit hash code that is the same for any two numbers which are -the same according to ==. This hash code depends on the number's value, -not its type or precision. - -
cl_boolean zerop (const type& x) -
- -Compare against zero: x == 0 -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_signean compare (const type& x, const type& y) -
- -Compares x and y. Returns +1 if x>y, --1 if x<y, 0 if x=y. - -
bool operator <= (const type&, const type&) -
- -
bool operator < (const type&, const type&) -
- -
bool operator >= (const type&, const type&) -
- -
bool operator > (const type&, const type&) -
- -Comparison, as in C and C++. - -
cl_boolean minusp (const type& x) -
- -Compare against zero: x < 0 - -
cl_boolean plusp (const type& x) -
- -Compare against zero: x > 0 - -
type max (const type& x, const type& y) -
- -Return the maximum of x and y. - -
type min (const type& x, const type& y) -
- -Return the minimum of x and y. -
- -

-When a floating point number and a rational number are compared, the float -is first converted to a rational number using the function rational. -Since a floating point number actually represents an interval of real numbers, -the result might be surprising. -For example, (cl_F)(cl_R)"1/3" == (cl_R)"1/3" returns false because -there is no floating point number whose value is exactly 1/3. - - - - -

4.6 Rounding functions

-

- - - -

-When a real number is to be converted to an integer, there is no "best" -rounding. The desired rounding function depends on the application. -The Common Lisp and ISO Lisp standards offer four rounding functions: - - -

- -
floor(x) -
-This is the largest integer <=x. - -
ceiling(x) -
-This is the smallest integer >=x. - -
truncate(x) -
-Among the integers between 0 and x (inclusive) the one nearest to x. - -
round(x) -
-The integer nearest to x. If x is exactly halfway between two -integers, choose the even one. -
- -

-These functions have different advantages: - - -

-floor and ceiling are translation invariant: -floor(x+n) = floor(x) + n and ceiling(x+n) = ceiling(x) + n -for every x and every integer n. - - -

-On the other hand, truncate and round are symmetric: -truncate(-x) = -truncate(x) and round(-x) = -round(x), -and furthermore round is unbiased: on the "average", it rounds -down exactly as often as it rounds up. - - -

-The functions are related like this: - - - -

- -

-Each of the classes cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_I floor1 (const type& x) -
- -Returns floor(x). -
cl_I ceiling1 (const type& x) -
- -Returns ceiling(x). -
cl_I truncate1 (const type& x) -
- -Returns truncate(x). -
cl_I round1 (const type& x) -
- -Returns round(x). -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_I floor1 (const type& x, const type& y) -
-Returns floor(x/y). -
cl_I ceiling1 (const type& x, const type& y) -
-Returns ceiling(x/y). -
cl_I truncate1 (const type& x, const type& y) -
-Returns truncate(x/y). -
cl_I round1 (const type& x, const type& y) -
-Returns round(x/y). -
- -

-These functions are called `floor1', ... here instead of -`floor', ..., because on some systems, system dependent include -files define `floor' and `ceiling' as macros. - - -

-In many cases, one needs both the quotient and the remainder of a division. -It is more efficient to compute both at the same time than to perform -two divisions, one for quotient and the next one for the remainder. -The following functions therefore return a structure containing both -the quotient and the remainder. The suffix `2' indicates the number -of "return values". The remainder is defined as follows: - - - -

- -

-and similarly for the other three operations. - - -

-Each of the classes cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
struct type_div_t { cl_I quotient; type remainder; }; -
-
type_div_t floor2 (const type& x) -
-
type_div_t ceiling2 (const type& x) -
-
type_div_t truncate2 (const type& x) -
-
type_div_t round2 (const type& x) -
-
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
struct type_div_t { cl_I quotient; type remainder; }; -
-
type_div_t floor2 (const type& x, const type& y) -
- -
type_div_t ceiling2 (const type& x, const type& y) -
- -
type_div_t truncate2 (const type& x, const type& y) -
- -
type_div_t round2 (const type& x, const type& y) -
- -
- -

-Sometimes, one wants the quotient as a floating-point number (of the -same format as the argument, if the argument is a float) instead of as -an integer. The prefix `f' indicates this. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type ffloor (const type& x) -
- -
type fceiling (const type& x) -
- -
type ftruncate (const type& x) -
- -
type fround (const type& x) -
- -
- -

-and similarly for class cl_R, but with return type cl_F. - - -

-The class cl_R defines the following operations: - - -

- -
cl_F ffloor (const type& x, const type& y) -
-
cl_F fceiling (const type& x, const type& y) -
-
cl_F ftruncate (const type& x, const type& y) -
-
cl_F fround (const type& x, const type& y) -
-
- -

-These functions also exist in versions which return both the quotient -and the remainder. The suffix `2' indicates this. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - - - - - - -

- -
struct type_fdiv_t { type quotient; type remainder; }; -
-
type_fdiv_t ffloor2 (const type& x) -
- -
type_fdiv_t fceiling2 (const type& x) -
- -
type_fdiv_t ftruncate2 (const type& x) -
- -
type_fdiv_t fround2 (const type& x) -
- -
-

-and similarly for class cl_R, but with quotient type cl_F. - - - -

-The class cl_R defines the following operations: - - -

- -
struct type_fdiv_t { cl_F quotient; cl_R remainder; }; -
-
type_fdiv_t ffloor2 (const type& x, const type& y) -
-
type_fdiv_t fceiling2 (const type& x, const type& y) -
-
type_fdiv_t ftruncate2 (const type& x, const type& y) -
-
type_fdiv_t fround2 (const type& x, const type& y) -
-
- -

-Other applications need only the remainder of a division. -The remainder of `floor' and `ffloor' is called `mod' -(abbreviation of "modulo"). The remainder `truncate' and -`ftruncate' is called `rem' (abbreviation of "remainder"). - - - -

- -

-If x and y are both >= 0, mod(x,y) = rem(x,y) >= 0. -In general, mod(x,y) has the sign of y or is zero, -and rem(x,y) has the sign of x or is zero. - - -

-The classes cl_R, cl_I define the following operations: - - -

- -
type mod (const type& x, const type& y) -
- -
type rem (const type& x, const type& y) -
- -
- - - -

4.7 Roots

- -

-Each of the classes cl_R, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type sqrt (const type& x) -
- -x must be >= 0. This function returns the square root of x, -normalized to be >= 0. If x is the square of a rational number, -sqrt(x) will be a rational number, else it will return a -floating-point approximation. -
- -

-The classes cl_RA, cl_I define the following operation: - - -

- -
cl_boolean sqrtp (const type& x, type* root) -
- -This tests whether x is a perfect square. If so, it returns true -and the exact square root in *root, else it returns false. -
- -

-Furthermore, for integers, similarly: - - -

- -
cl_boolean isqrt (const type& x, type* root) -
- -x should be >= 0. This function sets *root to -floor(sqrt(x)) and returns the same value as sqrtp: -the boolean value (expt(*root,2) == x). -
- -

-For nth roots, the classes cl_RA, cl_I -define the following operation: - - -

- -
cl_boolean rootp (const type& x, const cl_I& n, type* root) -
- -x must be >= 0. n must be > 0. -This tests whether x is an nth power of a rational number. -If so, it returns true and the exact root in *root, else it returns -false. -
- -

-The only square root function which accepts negative numbers is the one -for class cl_N: - - -

- -
cl_N sqrt (const cl_N& z) -
- -Returns the square root of z, as defined by the formula -sqrt(z) = exp(log(z)/2). Conversion to a floating-point type -or to a complex number are done if necessary. The range of the result is the -right half plane realpart(sqrt(z)) >= 0 -including the positive imaginary axis and 0, but excluding -the negative imaginary axis. -The result is an exact number only if z is an exact number. -
- - - -

4.8 Transcendental functions

-

- - - -

-The transcendental functions return an exact result if the argument -is exact and the result is exact as well. Otherwise they must return -inexact numbers even if the argument is exact. -For example, cos(0) = 1 returns the rational number 1. - - - - -

4.8.1 Exponential and logarithmic functions

- -
- -
cl_R exp (const cl_R& x) -
- -
cl_N exp (const cl_N& x) -
-Returns the exponential function of x. This is e^x where -e is the base of the natural logarithms. The range of the result -is the entire complex plane excluding 0. - -
cl_R ln (const cl_R& x) -
- -x must be > 0. Returns the (natural) logarithm of x. - -
cl_N log (const cl_N& x) -
- -Returns the (natural) logarithm of x. If x is real and positive, -this is ln(x). In general, log(x) = log(abs(x)) + i*phase(x). -The range of the result is the strip in the complex plane --pi < imagpart(log(x)) <= pi. - -
cl_R phase (const cl_N& x) -
- -Returns the angle part of x in its polar representation as a -complex number. That is, phase(x) = atan(realpart(x),imagpart(x)). -This is also the imaginary part of log(x). -The range of the result is the interval -pi < phase(x) <= pi. -The result will be an exact number only if zerop(x) or -if x is real and positive. - -
cl_R log (const cl_R& a, const cl_R& b) -
-a and b must be > 0. Returns the logarithm of a with -respect to base b. log(a,b) = ln(a)/ln(b). -The result can be exact only if a = 1 or if a and b -are both rational. - -
cl_N log (const cl_N& a, const cl_N& b) -
-Returns the logarithm of a with respect to base b. -log(a,b) = log(a)/log(b). - -
cl_N expt (const cl_N& x, const cl_N& y) -
- -Exponentiation: Returns x^y = exp(y*log(x)). -
- -

-The constant e = exp(1) = 2.71828... is returned by the following functions: - - -

- -
cl_F exp1 (cl_float_format_t f) -
- -Returns e as a float of format f. - -
cl_F exp1 (const cl_F& y) -
-Returns e in the float format of y. - -
cl_F exp1 (void) -
-Returns e as a float of format default_float_format. -
- - - -

4.8.2 Trigonometric functions

- -
- -
cl_R sin (const cl_R& x) -
- -Returns sin(x). The range of the result is the interval --1 <= sin(x) <= 1. - -
cl_N sin (const cl_N& z) -
-Returns sin(z). The range of the result is the entire complex plane. - -
cl_R cos (const cl_R& x) -
- -Returns cos(x). The range of the result is the interval --1 <= cos(x) <= 1. - -
cl_N cos (const cl_N& x) -
-Returns cos(z). The range of the result is the entire complex plane. - -
struct cos_sin_t { cl_R cos; cl_R sin; }; -
- -
cos_sin_t cos_sin (const cl_R& x) -
-Returns both sin(x) and cos(x). This is more efficient than - -computing them separately. The relation cos^2 + sin^2 = 1 will -hold only approximately. - -
cl_R tan (const cl_R& x) -
- -
cl_N tan (const cl_N& x) -
-Returns tan(x) = sin(x)/cos(x). - -
cl_N cis (const cl_R& x) -
- -
cl_N cis (const cl_N& x) -
-Returns exp(i*x). The name `cis' means "cos + i sin", because -e^(i*x) = cos(x) + i*sin(x). - - - -
cl_N asin (const cl_N& z) -
-Returns arcsin(z). This is defined as -arcsin(z) = log(iz+sqrt(1-z^2))/i and satisfies -arcsin(-z) = -arcsin(z). -The range of the result is the strip in the complex domain --pi/2 <= realpart(arcsin(z)) <= pi/2, excluding the numbers -with realpart = -pi/2 and imagpart < 0 and the numbers -with realpart = pi/2 and imagpart > 0. - -
cl_N acos (const cl_N& z) -
- -Returns arccos(z). This is defined as -arccos(z) = pi/2 - arcsin(z) = log(z+i*sqrt(1-z^2))/i -and satisfies arccos(-z) = pi - arccos(z). -The range of the result is the strip in the complex domain -0 <= realpart(arcsin(z)) <= pi, excluding the numbers -with realpart = 0 and imagpart < 0 and the numbers -with realpart = pi and imagpart > 0. - - - -
cl_R atan (const cl_R& x, const cl_R& y) -
-Returns the angle of the polar representation of the complex number -x+iy. This is atan(y/x) if x>0. The range of -the result is the interval -pi < atan(x,y) <= pi. The result will -be an exact number only if x > 0 and y is the exact 0. -WARNING: In Common Lisp, this function is called as (atan y x), -with reversed order of arguments. - -
cl_R atan (const cl_R& x) -
-Returns arctan(x). This is the same as atan(1,x). The range -of the result is the interval -pi/2 < atan(x) < pi/2. The result -will be an exact number only if x is the exact 0. - -
cl_N atan (const cl_N& z) -
-Returns arctan(z). This is defined as -arctan(z) = (log(1+iz)-log(1-iz)) / 2i and satisfies -arctan(-z) = -arctan(z). The range of the result is -the strip in the complex domain --pi/2 <= realpart(arctan(z)) <= pi/2, excluding the numbers -with realpart = -pi/2 and imagpart >= 0 and the numbers -with realpart = pi/2 and imagpart <= 0. - -
- -

- - -Archimedes' constant pi = 3.14... is returned by the following functions: - - -

- -
cl_F pi (cl_float_format_t f) -
- -Returns pi as a float of format f. - -
cl_F pi (const cl_F& y) -
-Returns pi in the float format of y. - -
cl_F pi (void) -
-Returns pi as a float of format default_float_format. -
- - - -

4.8.3 Hyperbolic functions

- -
- -
cl_R sinh (const cl_R& x) -
- -Returns sinh(x). - -
cl_N sinh (const cl_N& z) -
-Returns sinh(z). The range of the result is the entire complex plane. - -
cl_R cosh (const cl_R& x) -
- -Returns cosh(x). The range of the result is the interval -cosh(x) >= 1. - -
cl_N cosh (const cl_N& z) -
-Returns cosh(z). The range of the result is the entire complex plane. - -
struct cosh_sinh_t { cl_R cosh; cl_R sinh; }; -
- -
cosh_sinh_t cosh_sinh (const cl_R& x) -
- -Returns both sinh(x) and cosh(x). This is more efficient than -computing them separately. The relation cosh^2 - sinh^2 = 1 will -hold only approximately. - -
cl_R tanh (const cl_R& x) -
- -
cl_N tanh (const cl_N& x) -
-Returns tanh(x) = sinh(x)/cosh(x). - -
cl_N asinh (const cl_N& z) -
- -Returns arsinh(z). This is defined as -arsinh(z) = log(z+sqrt(1+z^2)) and satisfies -arsinh(-z) = -arsinh(z). -The range of the result is the strip in the complex domain --pi/2 <= imagpart(arsinh(z)) <= pi/2, excluding the numbers -with imagpart = -pi/2 and realpart > 0 and the numbers -with imagpart = pi/2 and realpart < 0. - -
cl_N acosh (const cl_N& z) -
- -Returns arcosh(z). This is defined as -arcosh(z) = 2*log(sqrt((z+1)/2)+sqrt((z-1)/2)). -The range of the result is the half-strip in the complex domain --pi < imagpart(arcosh(z)) <= pi, realpart(arcosh(z)) >= 0, -excluding the numbers with realpart = 0 and -pi < imagpart < 0. - -
cl_N atanh (const cl_N& z) -
- -Returns artanh(z). This is defined as -artanh(z) = (log(1+z)-log(1-z)) / 2 and satisfies -artanh(-z) = -artanh(z). The range of the result is -the strip in the complex domain --pi/2 <= imagpart(artanh(z)) <= pi/2, excluding the numbers -with imagpart = -pi/2 and realpart <= 0 and the numbers -with imagpart = pi/2 and realpart >= 0. -
- - - -

4.8.4 Euler gamma

-

- - - -

-Euler's constant C = 0.577... is returned by the following functions: - - -

- -
cl_F eulerconst (cl_float_format_t f) -
- -Returns Euler's constant as a float of format f. - -
cl_F eulerconst (const cl_F& y) -
-Returns Euler's constant in the float format of y. - -
cl_F eulerconst (void) -
-Returns Euler's constant as a float of format default_float_format. -
- -

-Catalan's constant G = 0.915... is returned by the following functions: - - - -

- -
cl_F catalanconst (cl_float_format_t f) -
- -Returns Catalan's constant as a float of format f. - -
cl_F catalanconst (const cl_F& y) -
-Returns Catalan's constant in the float format of y. - -
cl_F catalanconst (void) -
-Returns Catalan's constant as a float of format default_float_format. -
- - - -

4.8.5 Riemann zeta

-

- - - -

-Riemann's zeta function at an integral point s>1 is returned by the -following functions: - - -

- -
cl_F zeta (int s, cl_float_format_t f) -
- -Returns Riemann's zeta function at s as a float of format f. - -
cl_F zeta (int s, const cl_F& y) -
-Returns Riemann's zeta function at s in the float format of y. - -
cl_F zeta (int s) -
-Returns Riemann's zeta function at s as a float of format -default_float_format. -
- - - -

4.9 Functions on integers

- - - -

4.9.1 Logical functions

- -

-Integers, when viewed as in two's complement notation, can be thought as -infinite bit strings where the bits' values eventually are constant. -For example, - -

-    17 = ......00010001
-    -6 = ......11111010
-
- -

-The logical operations view integers as such bit strings and operate -on each of the bit positions in parallel. - - -

- -
cl_I lognot (const cl_I& x) -
- -
cl_I operator ~ (const cl_I& x) -
- -Logical not, like ~x in C. This is the same as -1-x. - -
cl_I logand (const cl_I& x, const cl_I& y) -
- -
cl_I operator & (const cl_I& x, const cl_I& y) -
- -Logical and, like x & y in C. - -
cl_I logior (const cl_I& x, const cl_I& y) -
- -
cl_I operator | (const cl_I& x, const cl_I& y) -
- -Logical (inclusive) or, like x | y in C. - -
cl_I logxor (const cl_I& x, const cl_I& y) -
- -
cl_I operator ^ (const cl_I& x, const cl_I& y) -
- -Exclusive or, like x ^ y in C. - -
cl_I logeqv (const cl_I& x, const cl_I& y) -
- -Bitwise equivalence, like ~(x ^ y) in C. - -
cl_I lognand (const cl_I& x, const cl_I& y) -
- -Bitwise not and, like ~(x & y) in C. - -
cl_I lognor (const cl_I& x, const cl_I& y) -
- -Bitwise not or, like ~(x | y) in C. - -
cl_I logandc1 (const cl_I& x, const cl_I& y) -
- -Logical and, complementing the first argument, like ~x & y in C. - -
cl_I logandc2 (const cl_I& x, const cl_I& y) -
- -Logical and, complementing the second argument, like x & ~y in C. - -
cl_I logorc1 (const cl_I& x, const cl_I& y) -
- -Logical or, complementing the first argument, like ~x | y in C. - -
cl_I logorc2 (const cl_I& x, const cl_I& y) -
- -Logical or, complementing the second argument, like x | ~y in C. -
- -

-These operations are all available though the function -

- -
cl_I boole (cl_boole op, const cl_I& x, const cl_I& y) -
- -
-

-where op must have one of the 16 values (each one stands for a function -which combines two bits into one bit): boole_clr, boole_set, -boole_1, boole_2, boole_c1, boole_c2, -boole_and, boole_ior, boole_xor, boole_eqv, -boole_nand, boole_nor, boole_andc1, boole_andc2, -boole_orc1, boole_orc2. - - - - - - - - - - - - - - - - - -

-Other functions that view integers as bit strings: - - -

- -
cl_boolean logtest (const cl_I& x, const cl_I& y) -
- -Returns true if some bit is set in both x and y, i.e. if -logand(x,y) != 0. - -
cl_boolean logbitp (const cl_I& n, const cl_I& x) -
- -Returns true if the nth bit (from the right) of x is set. -Bit 0 is the least significant bit. - -
uintL logcount (const cl_I& x) -
- -Returns the number of one bits in x, if x >= 0, or -the number of zero bits in x, if x < 0. -
- -

-The following functions operate on intervals of bits in integers. -The type - -

-struct cl_byte { uintL size; uintL position; };
-
- -

- -represents the bit interval containing the bits -position...position+size-1 of an integer. -The constructor cl_byte(size,position) constructs a cl_byte. - - -

- -
cl_I ldb (const cl_I& n, const cl_byte& b) -
- -extracts the bits of n described by the bit interval b -and returns them as a nonnegative integer with b.size bits. - -
cl_boolean ldb_test (const cl_I& n, const cl_byte& b) -
- -Returns true if some bit described by the bit interval b is set in -n. - -
cl_I dpb (const cl_I& newbyte, const cl_I& n, const cl_byte& b) -
- -Returns n, with the bits described by the bit interval b -replaced by newbyte. Only the lowest b.size bits of -newbyte are relevant. -
- -

-The functions ldb and dpb implicitly shift. The following -functions are their counterparts without shifting: - - -

- -
cl_I mask_field (const cl_I& n, const cl_byte& b) -
- -returns an integer with the bits described by the bit interval b -copied from the corresponding bits in n, the other bits zero. - -
cl_I deposit_field (const cl_I& newbyte, const cl_I& n, const cl_byte& b) -
- -returns an integer where the bits described by the bit interval b -come from newbyte and the other bits come from n. -
- -

-The following relations hold: - - - -

- -

-The following operations on integers as bit strings are efficient shortcuts -for common arithmetic operations: - - -

- -
cl_boolean oddp (const cl_I& x) -
- -Returns true if the least significant bit of x is 1. Equivalent to -mod(x,2) != 0. - -
cl_boolean evenp (const cl_I& x) -
- -Returns true if the least significant bit of x is 0. Equivalent to -mod(x,2) == 0. - -
cl_I operator << (const cl_I& x, const cl_I& n) -
- -Shifts x by n bits to the left. n should be >=0. -Equivalent to x * expt(2,n). - -
cl_I operator >> (const cl_I& x, const cl_I& n) -
- -Shifts x by n bits to the right. n should be >=0. -Bits shifted out to the right are thrown away. -Equivalent to floor(x / expt(2,n)). - -
cl_I ash (const cl_I& x, const cl_I& y) -
- -Shifts x by y bits to the left (if y>=0) or -by -y bits to the right (if y<=0). In other words, this -returns floor(x * expt(2,y)). - -
uintL integer_length (const cl_I& x) -
- -Returns the number of bits (excluding the sign bit) needed to represent x -in two's complement notation. This is the smallest n >= 0 such that --2^n <= x < 2^n. If x > 0, this is the unique n > 0 such that -2^(n-1) <= x < 2^n. - -
uintL ord2 (const cl_I& x) -
- -x must be non-zero. This function returns the number of 0 bits at the -right of x in two's complement notation. This is the largest n >= 0 -such that 2^n divides x. - -
uintL power2p (const cl_I& x) -
- -x must be > 0. This function checks whether x is a power of 2. -If x = 2^(n-1), it returns n. Else it returns 0. -(See also the function logp.) -
- - - -

4.9.2 Number theoretic functions

- -
- -
uint32 gcd (uint32 a, uint32 b) -
- -
cl_I gcd (const cl_I& a, const cl_I& b) -
-This function returns the greatest common divisor of a and b, -normalized to be >= 0. - -
cl_I xgcd (const cl_I& a, const cl_I& b, cl_I* u, cl_I* v) -
- -This function ("extended gcd") returns the greatest common divisor g of -a and b and at the same time the representation of g -as an integral linear combination of a and b: -u and v with u*a+v*b = g, g >= 0. -u and v will be normalized to be of smallest possible absolute -value, in the following sense: If a and b are non-zero, and -abs(a) != abs(b), u and v will satisfy the inequalities -abs(u) <= abs(b)/(2*g), abs(v) <= abs(a)/(2*g). - -
cl_I lcm (const cl_I& a, const cl_I& b) -
- -This function returns the least common multiple of a and b, -normalized to be >= 0. - -
cl_boolean logp (const cl_I& a, const cl_I& b, cl_RA* l) -
- -
cl_boolean logp (const cl_RA& a, const cl_RA& b, cl_RA* l) -
-a must be > 0. b must be >0 and != 1. If log(a,b) is -rational number, this function returns true and sets *l = log(a,b), else -it returns false. -
- - - -

4.9.3 Combinatorial functions

- -
- -
cl_I factorial (uintL n) -
- -n must be a small integer >= 0. This function returns the factorial -n! = 1*2*...*n. - -
cl_I doublefactorial (uintL n) -
- -n must be a small integer >= 0. This function returns the -doublefactorial n!! = 1*3*...*n or -n!! = 2*4*...*n, respectively. - -
cl_I binomial (uintL n, uintL k) -
- -n and k must be small integers >= 0. This function returns the -binomial coefficient -(n choose k) = n! / k! (n-k)! -for 0 <= k <= n, 0 else. -
- - - -

4.10 Functions on floating-point numbers

- -

-Recall that a floating-point number consists of a sign s, an -exponent e and a mantissa m. The value of the number is -(-1)^s * 2^e * m. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations. - - -

- -
type scale_float (const type& x, sintL delta) -
- -
type scale_float (const type& x, const cl_I& delta) -
-Returns x*2^delta. This is more efficient than an explicit multiplication -because it copies x and modifies the exponent. -
- -

-The following functions provide an abstract interface to the underlying -representation of floating-point numbers. - - -

- -
sintL float_exponent (const type& x) -
- -Returns the exponent e of x. -For x = 0.0, this is 0. For x non-zero, this is the unique -integer with 2^(e-1) <= abs(x) < 2^e. - -
sintL float_radix (const type& x) -
- -Returns the base of the floating-point representation. This is always 2. - -
type float_sign (const type& x) -
- -Returns the sign s of x as a float. The value is 1 for -x >= 0, -1 for x < 0. - -
uintL float_digits (const type& x) -
- -Returns the number of mantissa bits in the floating-point representation -of x, including the hidden bit. The value only depends on the type -of x, not on its value. - -
uintL float_precision (const type& x) -
- -Returns the number of significant mantissa bits in the floating-point -representation of x. Since denormalized numbers are not supported, -this is the same as float_digits(x) if x is non-zero, and -0 if x = 0. -
- -

-The complete internal representation of a float is encoded in the type - - - - - -decoded_float (or decoded_sfloat, decoded_ffloat, -decoded_dfloat, decoded_lfloat, respectively), defined by - -

-struct decoded_typefloat {
-        type mantissa; cl_I exponent; type sign;
-};
-
- -

-and returned by the function - - -

- -
decoded_typefloat decode_float (const type& x) -
- -For x non-zero, this returns (-1)^s, e, m with -x = (-1)^s * 2^e * m and 0.5 <= m < 1.0. For x = 0, -it returns (-1)^s=1, e=0, m=0. -e is the same as returned by the function float_exponent. -
- -

-A complete decoding in terms of integers is provided as type - - -

-struct cl_idecoded_float {
-        cl_I mantissa; cl_I exponent; cl_I sign;
-};
-
- -

-by the following function: - - -

- -
cl_idecoded_float integer_decode_float (const type& x) -
- -For x non-zero, this returns (-1)^s, e, m with -x = (-1)^s * 2^e * m and m an integer with float_digits(x) -bits. For x = 0, it returns (-1)^s=1, e=0, m=0. -WARNING: The exponent e is not the same as the one returned by -the functions decode_float and float_exponent. -
- -

-Some other function, implemented only for class cl_F: - - -

- -
cl_F float_sign (const cl_F& x, const cl_F& y) -
- -This returns a floating point number whose precision and absolute value -is that of y and whose sign is that of x. If x is -zero, it is treated as positive. Same for y. -
- - - -

4.11 Conversion functions

-

- - - - - -

4.11.1 Conversion to floating-point numbers

- -

-The type cl_float_format_t describes a floating-point format. - - - -

- -
cl_float_format_t cl_float_format (uintL n) -
- -Returns the smallest float format which guarantees at least n -decimal digits in the mantissa (after the decimal point). - -
cl_float_format_t cl_float_format (const cl_F& x) -
-Returns the floating point format of x. - -
cl_float_format_t default_float_format -
- -Global variable: the default float format used when converting rational numbers -to floats. -
- -

-To convert a real number to a float, each of the types -cl_R, cl_F, cl_I, cl_RA, -int, unsigned int, float, double -defines the following operations: - - -

- -
cl_F cl_float (const type&x, cl_float_format_t f) -
- -Returns x as a float of format f. -
cl_F cl_float (const type&x, const cl_F& y) -
-Returns x in the float format of y. -
cl_F cl_float (const type&x) -
-Returns x as a float of format default_float_format if -it is an exact number, or x itself if it is already a float. -
- -

-Of course, converting a number to a float can lose precision. - - -

-Every floating-point format has some characteristic numbers: - - -

- -
cl_F most_positive_float (cl_float_format_t f) -
- -Returns the largest (most positive) floating point number in float format f. - -
cl_F most_negative_float (cl_float_format_t f) -
- -Returns the smallest (most negative) floating point number in float format f. - -
cl_F least_positive_float (cl_float_format_t f) -
- -Returns the least positive floating point number (i.e. > 0 but closest to 0) -in float format f. - -
cl_F least_negative_float (cl_float_format_t f) -
- -Returns the least negative floating point number (i.e. < 0 but closest to 0) -in float format f. - -
cl_F float_epsilon (cl_float_format_t f) -
- -Returns the smallest floating point number e > 0 such that 1+e != 1. - -
cl_F float_negative_epsilon (cl_float_format_t f) -
- -Returns the smallest floating point number e > 0 such that 1-e != 1. -
- - - -

4.11.2 Conversion to rational numbers

- -

-Each of the classes cl_R, cl_RA, cl_F -defines the following operation: - - -

- -
cl_RA rational (const type& x) -
- -Returns the value of x as an exact number. If x is already -an exact number, this is x. If x is a floating-point number, -the value is a rational number whose denominator is a power of 2. -
- -

-In order to convert back, say, (cl_F)(cl_R)"1/3" to 1/3, there is -the function - - -

- -
cl_RA rationalize (const cl_R& x) -
- -If x is a floating-point number, it actually represents an interval -of real numbers, and this function returns the rational number with -smallest denominator (and smallest numerator, in magnitude) -which lies in this interval. -If x is already an exact number, this function returns x. -
- -

-If x is any float, one has - - - -

- - - -

4.12 Random number generators

- -

-A random generator is a machine which produces (pseudo-)random numbers. -The include file <cln/random.h> defines a class random_state -which contains the state of a random generator. If you make a copy -of the random number generator, the original one and the copy will produce -the same sequence of random numbers. - - -

-The following functions return (pseudo-)random numbers in different formats. -Calling one of these modifies the state of the random number generator in -a complicated but deterministic way. - - -

-The global variable - - - -

-random_state default_random_state
-
- -

-contains a default random number generator. It is used when the functions -below are called without random_state argument. - - -

- -
uint32 random32 (random_state& randomstate) -
-
uint32 random32 () -
- -Returns a random unsigned 32-bit number. All bits are equally random. - -
cl_I random_I (random_state& randomstate, const cl_I& n) -
-
cl_I random_I (const cl_I& n) -
- -n must be an integer > 0. This function returns a random integer x -in the range 0 <= x < n. - -
cl_F random_F (random_state& randomstate, const cl_F& n) -
-
cl_F random_F (const cl_F& n) -
- -n must be a float > 0. This function returns a random floating-point -number of the same format as n in the range 0 <= x < n. - -
cl_R random_R (random_state& randomstate, const cl_R& n) -
-
cl_R random_R (const cl_R& n) -
- -Behaves like random_I if n is an integer and like random_F -if n is a float. -
- - - -

4.13 Obfuscating operators

-

- - - -

-The modifying C/C++ operators +=, -=, *=, /=, -&=, |=, ^=, <<=, >>= -are not available by default because their -use tends to make programs unreadable. It is trivial to get away without -them. However, if you feel that you absolutely need these operators -to get happy, then add - -

-#define WANT_OBFUSCATING_OPERATORS
-
- -

- -to the beginning of your source files, before the inclusion of any CLN -include files. This flag will enable the following operators: - - -

-For the classes cl_N, cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF: - - -

- -
type& operator += (type&, const type&) -
- -
type& operator -= (type&, const type&) -
- -
type& operator *= (type&, const type&) -
- -
type& operator /= (type&, const type&) -
- -
- -

-For the class cl_I: - - -

- -
type& operator += (type&, const type&) -
-
type& operator -= (type&, const type&) -
-
type& operator *= (type&, const type&) -
-
type& operator &= (type&, const type&) -
- -
type& operator |= (type&, const type&) -
- -
type& operator ^= (type&, const type&) -
- -
type& operator <<= (type&, const type&) -
- -
type& operator >>= (type&, const type&) -
- -
- -

-For the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF: - - -

- -
type& operator ++ (type& x) -
- -The prefix operator ++x. - -
void operator ++ (type& x, int) -
-The postfix operator x++. - -
type& operator -- (type& x) -
- -The prefix operator --x. - -
void operator -- (type& x, int) -
-The postfix operator x--. -
- -

-Note that by using these obfuscating operators, you wouldn't gain efficiency: -In CLN `x += y;' is exactly the same as `x = x+y;', not more -efficient. - - - - -

5. Input/Output

-

- - - - - -

5.1 Internal and printed representation

-

- - - -

-All computations deal with the internal representations of the numbers. - - -

-Every number has an external representation as a sequence of ASCII characters. -Several external representations may denote the same number, for example, -"20.0" and "20.000". - - -

-Converting an internal to an external representation is called "printing", - -converting an external to an internal representation is called "reading". - -In CLN, it is always true that conversion of an internal to an external -representation and then back to an internal representation will yield the -same internal representation. Symbolically: read(print(x)) == x. -This is called "print-read consistency". - - -

-Different types of numbers have different external representations (case -is insignificant): - - -

- -
Integers -
-External representation: sign{digit}+. The reader also accepts the -Common Lisp syntaxes sign{digit}+. with a trailing dot -for decimal integers -and the #nR, #b, #o, #x prefixes. - -
Rational numbers -
-External representation: sign{digit}+/{digit}+. -The #nR, #b, #o, #x prefixes are allowed -here as well. - -
Floating-point numbers -
-External representation: sign{digit}*exponent or -sign{digit}*.{digit}*exponent or -sign{digit}*.{digit}+. A precision specifier -of the form _prec may be appended. There must be at least -one digit in the non-exponent part. The exponent has the syntax -expmarker expsign {digit}+. -The exponent marker is - - -
    -
  • - -`s' for short-floats, -
  • - -`f' for single-floats, -
  • - -`d' for double-floats, -
  • - -`L' for long-floats, -
- -or `e', which denotes a default float format. The precision specifying -suffix has the syntax _prec where prec denotes the number of -valid mantissa digits (in decimal, excluding leading zeroes), cf. also -function `cl_float_format'. - -
Complex numbers -
-External representation: - -
    -
  • - -In algebraic notation: realpart+imagparti. Of course, -if imagpart is negative, its printed representation begins with -a `-', and the `+' between realpart and imagpart -may be omitted. Note that this notation cannot be used when the imagpart -is rational and the rational number's base is >18, because the `i' -is then read as a digit. -
  • - -In Common Lisp notation: #C(realpart imagpart). -
- -
- - - -

5.2 Input functions

- -

-Including <cln/io.h> defines a type cl_istream, which is -the type of the first argument to all input functions. cl_istream -is the same as std::istream&. - - -

-The variable - -

- -

-contains the standard input stream. - - -

-These are the simple input functions: - - -

- -
int freadchar (cl_istream stream) -
-Reads a character from stream. Returns cl_EOF (not a `char'!) -if the end of stream was encountered or an error occurred. - -
int funreadchar (cl_istream stream, int c) -
-Puts back c onto stream. c must be the result of the -last freadchar operation on stream. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines, in <cln/type_io.h>, the following input function: - - -

- -
cl_istream operator>> (cl_istream stream, type& result) -
-Reads a number from stream and stores it in the result. -
- -

-The most flexible input functions, defined in <cln/type_io.h>, -are the following: - - -

- -
cl_N read_complex (cl_istream stream, const cl_read_flags& flags) -
-
cl_R read_real (cl_istream stream, const cl_read_flags& flags) -
-
cl_F read_float (cl_istream stream, const cl_read_flags& flags) -
-
cl_RA read_rational (cl_istream stream, const cl_read_flags& flags) -
-
cl_I read_integer (cl_istream stream, const cl_read_flags& flags) -
-Reads a number from stream. The flags are parameters which -affect the input syntax. Whitespace before the number is silently skipped. - -
cl_N read_complex (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_R read_real (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_F read_float (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_RA read_rational (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_I read_integer (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-Reads a number from a string in memory. The flags are parameters which -affect the input syntax. The string starts at string and ends at -string_limit (exclusive limit). string_limit may also be -NULL, denoting the entire string, i.e. equivalent to -string_limit = string + strlen(string). If end_of_parse is -NULL, the string in memory must contain exactly one number and nothing -more, else a fatal error will be signalled. If end_of_parse -is not NULL, *end_of_parse will be assigned a pointer past -the last parsed character (i.e. string_limit if nothing came after -the number). Whitespace is not allowed. -
- -

-The structure cl_read_flags contains the following fields: - - -

- -
cl_read_syntax_t syntax -
-The possible results of the read operation. Possible values are -syntax_number, syntax_real, syntax_rational, -syntax_integer, syntax_float, syntax_sfloat, -syntax_ffloat, syntax_dfloat, syntax_lfloat. - -
cl_read_lsyntax_t lsyntax -
-Specifies the language-dependent syntax variant for the read operation. -Possible values are - -
- -
lsyntax_standard -
-accept standard algebraic notation only, no complex numbers, -
lsyntax_algebraic -
-accept the algebraic notation x+yi for complex numbers, -
lsyntax_commonlisp -
-accept the #b, #o, #x syntaxes for binary, octal, -hexadecimal numbers, -#baseR for rational numbers in a given base, -#c(realpart imagpart) for complex numbers, -
lsyntax_all -
-accept all of these extensions. -
- -
unsigned int rational_base -
-The base in which rational numbers are read. - -
cl_float_format_t float_flags.default_float_format -
-The float format used when reading floats with exponent marker `e'. - -
cl_float_format_t float_flags.default_lfloat_format -
-The float format used when reading floats with exponent marker `l'. - -
cl_boolean float_flags.mantissa_dependent_float_format -
-When this flag is true, floats specified with more digits than corresponding -to the exponent marker they contain, but without _nnn suffix, will get a -precision corresponding to their number of significant digits. -
- - - -

5.3 Output functions

- -

-Including <cln/io.h> defines a type cl_ostream, which is -the type of the first argument to all output functions. cl_ostream -is the same as std::ostream&. - - -

-The variable - -

- -

-contains the standard output stream. - - -

-The variable - -

- -

-contains the standard error output stream. - - -

-These are the simple output functions: - - -

- -
void fprintchar (cl_ostream stream, char c) -
-Prints the character x literally on the stream. - -
void fprint (cl_ostream stream, const char * string) -
-Prints the string literally on the stream. - -
void fprintdecimal (cl_ostream stream, int x) -
-
void fprintdecimal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in decimal on the stream. - -
void fprintbinary (cl_ostream stream, const cl_I& x) -
-Prints the integer x in binary (base 2, without prefix) -on the stream. - -
void fprintoctal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in octal (base 8, without prefix) -on the stream. - -
void fprinthexadecimal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in hexadecimal (base 16, without prefix) -on the stream. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines, in <cln/type_io.h>, the following output functions: - - -

- -
void fprint (cl_ostream stream, const type& x) -
-
cl_ostream operator<< (cl_ostream stream, const type& x) -
-Prints the number x on the stream. The output may depend -on the global printer settings in the variable default_print_flags. -The ostream flags and settings (flags, width and locale) are -ignored. -
- -

-The most flexible output function, defined in <cln/type_io.h>, -are the following: - -

-void print_complex  (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_N& z);
-void print_real     (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_R& z);
-void print_float    (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_F& z);
-void print_rational (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_RA& z);
-void print_integer  (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_I& z);
-
- -

-Prints the number x on the stream. The flags are -parameters which affect the output. - - -

-The structure type cl_print_flags contains the following fields: - - -

- -
unsigned int rational_base -
-The base in which rational numbers are printed. Default is 10. - -
cl_boolean rational_readably -
-If this flag is true, rational numbers are printed with radix specifiers in -Common Lisp syntax (#nR or #b or #o or #x -prefixes, trailing dot). Default is false. - -
cl_boolean float_readably -
-If this flag is true, type specific exponent markers have precedence over 'E'. -Default is false. - -
cl_float_format_t default_float_format -
-Floating point numbers of this format will be printed using the 'E' exponent -marker. Default is cl_float_format_ffloat. - -
cl_boolean complex_readably -
-If this flag is true, complex numbers will be printed using the Common Lisp -syntax #C(realpart imagpart). Default is false. - -
cl_string univpoly_varname -
-Univariate polynomials with no explicit indeterminate name will be printed -using this variable name. Default is "x". -
- -

-The global variable default_print_flags contains the default values, -used by the function fprint. - - - - -

6. Rings

- -

-CLN has a class of abstract rings. - - - -

-                         Ring
-                       cl_ring
-                     <cln/ring.h>
-
- -

-Rings can be compared for equality: - - -

- -
bool operator== (const cl_ring&, const cl_ring&) -
-
bool operator!= (const cl_ring&, const cl_ring&) -
-These compare two rings for equality. -
- -

-Given a ring R, the following members can be used. - - -

- -
void R->fprint (cl_ostream stream, const cl_ring_element& x) -
- -
cl_boolean R->equal (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->zero () -
- -
cl_boolean R->zerop (const cl_ring_element& x) -
- -
cl_ring_element R->plus (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->minus (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->uminus (const cl_ring_element& x) -
- -
cl_ring_element R->one () -
- -
cl_ring_element R->canonhom (const cl_I& x) -
- -
cl_ring_element R->mul (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->square (const cl_ring_element& x) -
- -
cl_ring_element R->expt_pos (const cl_ring_element& x, const cl_I& y) -
- -
- -

-The following rings are built-in. - - -

- -
cl_null_ring cl_0_ring -
-The null ring, containing only zero. - -
cl_complex_ring cl_C_ring -
-The ring of complex numbers. This corresponds to the type cl_N. - -
cl_real_ring cl_R_ring -
-The ring of real numbers. This corresponds to the type cl_R. - -
cl_rational_ring cl_RA_ring -
-The ring of rational numbers. This corresponds to the type cl_RA. - -
cl_integer_ring cl_I_ring -
-The ring of integers. This corresponds to the type cl_I. -
- -

-Type tests can be performed for any of cl_C_ring, cl_R_ring, -cl_RA_ring, cl_I_ring: - - -

- -
cl_boolean instanceof (const cl_number& x, const cl_number_ring& R) -
- -Tests whether the given number is an element of the number ring R. -
- - - -

7. Modular integers

-

- - - - - -

7.1 Modular integer rings

-

- - - -

-CLN implements modular integers, i.e. integers modulo a fixed integer N. -The modulus is explicitly part of every modular integer. CLN doesn't -allow you to (accidentally) mix elements of different modular rings, -e.g. (3 mod 4) + (2 mod 5) will result in a runtime error. -(Ideally one would imagine a generic data type cl_MI(N), but C++ -doesn't have generic types. So one has to live with runtime checks.) - - -

-The class of modular integer rings is - - - -

-                         Ring
-                       cl_ring
-                     <cln/ring.h>
-                          |
-                          |
-                 Modular integer ring
-                    cl_modint_ring
-                  <cln/modinteger.h>
-
- -

- - - -

-and the class of all modular integers (elements of modular integer rings) is - - - -

-                    Modular integer
-                         cl_MI
-                   <cln/modinteger.h>
-
- -

-Modular integer rings are constructed using the function - - -

- -
cl_modint_ring find_modint_ring (const cl_I& N) -
- -This function returns the modular ring `Z/NZ'. It takes care -of finding out about special cases of N, like powers of two -and odd numbers for which Montgomery multiplication will be a win, - -and precomputes any necessary auxiliary data for computing modulo N. -There is a cache table of rings, indexed by N (or, more precisely, -by abs(N)). This ensures that the precomputation costs are reduced -to a minimum. -
- -

-Modular integer rings can be compared for equality: - - -

- -
bool operator== (const cl_modint_ring&, const cl_modint_ring&) -
- -
bool operator!= (const cl_modint_ring&, const cl_modint_ring&) -
- -These compare two modular integer rings for equality. Two different calls -to find_modint_ring with the same argument necessarily return the -same ring because it is memoized in the cache table. -
- - - -

7.2 Functions on modular integers

- -

-Given a modular integer ring R, the following members can be used. - - -

- -
cl_I R->modulus -
- -This is the ring's modulus, normalized to be nonnegative: abs(N). - -
cl_MI R->zero() -
- -This returns 0 mod N. - -
cl_MI R->one() -
- -This returns 1 mod N. - -
cl_MI R->canonhom (const cl_I& x) -
- -This returns x mod N. - -
cl_I R->retract (const cl_MI& x) -
- -This is a partial inverse function to R->canonhom. It returns the -standard representative (>=0, <N) of x. - -
cl_MI R->random(random_state& randomstate) -
-
cl_MI R->random() -
- -This returns a random integer modulo N. -
- -

-The following operations are defined on modular integers. - - -

- -
cl_modint_ring x.ring () -
- -Returns the ring to which the modular integer x belongs. - -
cl_MI operator+ (const cl_MI&, const cl_MI&) -
- -Returns the sum of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI operator- (const cl_MI&, const cl_MI&) -
- -Returns the difference of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI operator- (const cl_MI&) -
-Returns the negative of a modular integer. - -
cl_MI operator* (const cl_MI&, const cl_MI&) -
- -Returns the product of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI square (const cl_MI&) -
- -Returns the square of a modular integer. - -
cl_MI recip (const cl_MI& x) -
- -Returns the reciprocal x^-1 of a modular integer x. x -must be coprime to the modulus, otherwise an error message is issued. - -
cl_MI div (const cl_MI& x, const cl_MI& y) -
- -Returns the quotient x*y^-1 of two modular integers x, y. -y must be coprime to the modulus, otherwise an error message is issued. - -
cl_MI expt_pos (const cl_MI& x, const cl_I& y) -
- -y must be > 0. Returns x^y. - -
cl_MI expt (const cl_MI& x, const cl_I& y) -
- -Returns x^y. If y is negative, x must be coprime to the -modulus, else an error message is issued. - -
cl_MI operator<< (const cl_MI& x, const cl_I& y) -
- -Returns x*2^y. - -
cl_MI operator>> (const cl_MI& x, const cl_I& y) -
- -Returns x*2^-y. When y is positive, the modulus must be odd, -or an error message is issued. - -
bool operator== (const cl_MI&, const cl_MI&) -
- -
bool operator!= (const cl_MI&, const cl_MI&) -
- -Compares two modular integers, belonging to the same modular integer ring, -for equality. - -
cl_boolean zerop (const cl_MI& x) -
- -Returns true if x is 0 mod N. -
- -

-The following output functions are defined (see also the chapter on -input/output). - - -

- -
void fprint (cl_ostream stream, const cl_MI& x) -
- -
cl_ostream operator<< (cl_ostream stream, const cl_MI& x) -
- -Prints the modular integer x on the stream. The output may depend -on the global printer settings in the variable default_print_flags. -
- - - -

8. Symbolic data types

-

- - - -

-CLN implements two symbolic (non-numeric) data types: strings and symbols. - - - - -

8.1 Strings

-

- - - - -

-The class - - - -

-                      String
-                     cl_string
-                   <cln/string.h>
-
- -

-implements immutable strings. - - -

-Strings are constructed through the following constructors: - - -

- -
cl_string (const char * s) -
-Returns an immutable copy of the (zero-terminated) C string s. - -
cl_string (const char * ptr, unsigned long len) -
-Returns an immutable copy of the len characters at -ptr[0], ..., ptr[len-1]. NUL characters are allowed. -
- -

-The following functions are available on strings: - - -

- -
operator = -
-Assignment from cl_string and const char *. - -
s.length() -
- -
strlen(s) -
- -Returns the length of the string s. - -
s[i] -
- -Returns the ith character of the string s. -i must be in the range 0 <= i < s.length(). - -
bool equal (const cl_string& s1, const cl_string& s2) -
- -Compares two strings for equality. One of the arguments may also be a -plain const char *. -
- - - -

8.2 Symbols

-

- - - - -

-Symbols are uniquified strings: all symbols with the same name are shared. -This means that comparison of two symbols is fast (effectively just a pointer -comparison), whereas comparison of two strings must in the worst case walk -both strings until their end. -Symbols are used, for example, as tags for properties, as names of variables -in polynomial rings, etc. - - -

-Symbols are constructed through the following constructor: - - -

- -
cl_symbol (const cl_string& s) -
-Looks up or creates a new symbol with a given name. -
- -

-The following operations are available on symbols: - - -

- -
cl_string (const cl_symbol& sym) -
-Conversion to cl_string: Returns the string which names the symbol -sym. - -
bool equal (const cl_symbol& sym1, const cl_symbol& sym2) -
- -Compares two symbols for equality. This is very fast. -
- - - -

9. Univariate polynomials

-

- - - - - - -

9.1 Univariate polynomial rings

- -

-CLN implements univariate polynomials (polynomials in one variable) over an -arbitrary ring. The indeterminate variable may be either unnamed (and will be -printed according to default_print_flags.univpoly_varname, which -defaults to `x') or carry a given name. The base ring and the -indeterminate are explicitly part of every polynomial. CLN doesn't allow you to -(accidentally) mix elements of different polynomial rings, e.g. -(a^2+1) * (b^3-1) will result in a runtime error. (Ideally this should -return a multivariate polynomial, but they are not yet implemented in CLN.) - - -

-The classes of univariate polynomial rings are - - - -

-                           Ring
-                         cl_ring
-                       <cln/ring.h>
-                            |
-                            |
-                 Univariate polynomial ring
-                      cl_univpoly_ring
-                      <cln/univpoly.h>
-                            |
-           +----------------+-------------------+
-           |                |                   |
- Complex polynomial ring    |    Modular integer polynomial ring
- cl_univpoly_complex_ring   |        cl_univpoly_modint_ring
- <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
-                            |
-           +----------------+
-           |                |
-   Real polynomial ring     |
-   cl_univpoly_real_ring    |
-   <cln/univpoly_real.h>    |
-                            |
-           +----------------+
-           |                |
- Rational polynomial ring   |
- cl_univpoly_rational_ring  |
- <cln/univpoly_rational.h>  |
-                            |
-           +----------------+
-           |
- Integer polynomial ring
- cl_univpoly_integer_ring
- <cln/univpoly_integer.h>
-
- -

-and the corresponding classes of univariate polynomials are - - - -

-                   Univariate polynomial
-                          cl_UP
-                      <cln/univpoly.h>
-                            |
-           +----------------+-------------------+
-           |                |                   |
-   Complex polynomial       |      Modular integer polynomial
-        cl_UP_N             |                cl_UP_MI
- <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
-                            |
-           +----------------+
-           |                |
-     Real polynomial        |
-        cl_UP_R             |
-  <cln/univpoly_real.h>     |
-                            |
-           +----------------+
-           |                |
-   Rational polynomial      |
-        cl_UP_RA            |
- <cln/univpoly_rational.h>  |
-                            |
-           +----------------+
-           |
-   Integer polynomial
-        cl_UP_I
- <cln/univpoly_integer.h>
-
- -

-Univariate polynomial rings are constructed using the functions - - -

- -
cl_univpoly_ring find_univpoly_ring (const cl_ring& R) -
-
cl_univpoly_ring find_univpoly_ring (const cl_ring& R, const cl_symbol& varname) -
-This function returns the polynomial ring `R[X]', unnamed or named. -R may be an arbitrary ring. This function takes care of finding out -about special cases of R, such as the rings of complex numbers, -real numbers, rational numbers, integers, or modular integer rings. -There is a cache table of rings, indexed by R and varname. -This ensures that two calls of this function with the same arguments will -return the same polynomial ring. - -
cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R) -
- -
cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R, const cl_symbol& varname) -
-
cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R) -
-
cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R, const cl_symbol& varname) -
-
cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R) -
-
cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R, const cl_symbol& varname) -
-
cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R) -
-
cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R, const cl_symbol& varname) -
-
cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R) -
-
cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R, const cl_symbol& varname) -
-These functions are equivalent to the general find_univpoly_ring, -only the return type is more specific, according to the base ring's type. -
- - - -

9.2 Functions on univariate polynomials

- -

-Given a univariate polynomial ring R, the following members can be used. - - -

- -
cl_ring R->basering() -
- -This returns the base ring, as passed to `find_univpoly_ring'. - -
cl_UP R->zero() -
- -This returns 0 in R, a polynomial of degree -1. - -
cl_UP R->one() -
- -This returns 1 in R, a polynomial of degree <= 0. - -
cl_UP R->canonhom (const cl_I& x) -
- -This returns x in R, a polynomial of degree <= 0. - -
cl_UP R->monomial (const cl_ring_element& x, uintL e) -
- -This returns a sparse polynomial: x * X^e, where X is the -indeterminate. - -
cl_UP R->create (sintL degree) -
- -Creates a new polynomial with a given degree. The zero polynomial has degree --1. After creating the polynomial, you should put in the coefficients, -using the set_coeff member function, and then call the finalize -member function. -
- -

-The following are the only destructive operations on univariate polynomials. - - -

- -
void set_coeff (cl_UP& x, uintL index, const cl_ring_element& y) -
- -This changes the coefficient of X^index in x to be y. -After changing a polynomial and before applying any "normal" operation on it, -you should call its finalize member function. - -
void finalize (cl_UP& x) -
- -This function marks the endpoint of destructive modifications of a polynomial. -It normalizes the internal representation so that subsequent computations have -less overhead. Doing normal computations on unnormalized polynomials may -produce wrong results or crash the program. -
- -

-The following operations are defined on univariate polynomials. - - -

- -
cl_univpoly_ring x.ring () -
- -Returns the ring to which the univariate polynomial x belongs. - -
cl_UP operator+ (const cl_UP&, const cl_UP&) -
- -Returns the sum of two univariate polynomials. - -
cl_UP operator- (const cl_UP&, const cl_UP&) -
- -Returns the difference of two univariate polynomials. - -
cl_UP operator- (const cl_UP&) -
-Returns the negative of a univariate polynomial. - -
cl_UP operator* (const cl_UP&, const cl_UP&) -
- -Returns the product of two univariate polynomials. One of the arguments may -also be a plain integer or an element of the base ring. - -
cl_UP square (const cl_UP&) -
- -Returns the square of a univariate polynomial. - -
cl_UP expt_pos (const cl_UP& x, const cl_I& y) -
- -y must be > 0. Returns x^y. - -
bool operator== (const cl_UP&, const cl_UP&) -
- -
bool operator!= (const cl_UP&, const cl_UP&) -
- -Compares two univariate polynomials, belonging to the same univariate -polynomial ring, for equality. - -
cl_boolean zerop (const cl_UP& x) -
- -Returns true if x is 0 in R. - -
sintL degree (const cl_UP& x) -
- -Returns the degree of the polynomial. The zero polynomial has degree -1. - -
cl_ring_element coeff (const cl_UP& x, uintL index) -
- -Returns the coefficient of X^index in the polynomial x. - -
cl_ring_element x (const cl_ring_element& y) -
- -Evaluation: If x is a polynomial and y belongs to the base ring, -then `x(y)' returns the value of the substitution of y into -x. - -
cl_UP deriv (const cl_UP& x) -
- -Returns the derivative of the polynomial x with respect to the -indeterminate X. -
- -

-The following output functions are defined (see also the chapter on -input/output). - - -

- -
void fprint (cl_ostream stream, const cl_UP& x) -
- -
cl_ostream operator<< (cl_ostream stream, const cl_UP& x) -
- -Prints the univariate polynomial x on the stream. The output may -depend on the global printer settings in the variable -default_print_flags. -
- - - -

9.3 Special polynomials

- -

-The following functions return special polynomials. - - -

- -
cl_UP_I tschebychev (sintL n) -
- - -Returns the n-th Chebyshev polynomial (n >= 0). - -
cl_UP_I hermite (sintL n) -
- - -Returns the n-th Hermite polynomial (n >= 0). - -
cl_UP_RA legendre (sintL n) -
- - -Returns the n-th Legendre polynomial (n >= 0). - -
cl_UP_I laguerre (sintL n) -
- - -Returns the n-th Laguerre polynomial (n >= 0). -
- -

-Information how to derive the differential equation satisfied by each -of these polynomials from their definition can be found in the -doc/polynomial/ directory. - - - - -

10. Internals

- - - -

10.1 Why C++ ?

-

- - - -

-Using C++ as an implementation language provides - - - -

- -

-With these language features, there is no need for two separate languages, -one for the implementation of the library and one in which the library's users -can program. This means that a prototype implementation of an algorithm -can be integrated into the library immediately after it has been tested and -debugged. No need to rewrite it in a low-level language after having prototyped -in a high-level language. - - - - -

10.2 Memory efficiency

- -

-In order to save memory allocations, CLN implements: - - - -

- - - -

10.3 Speed efficiency

- -

-Speed efficiency is obtained by the combination of the following tricks -and algorithms: - - - -

- - - -

10.4 Garbage collection

-

- - - -

-All the number classes are reference count classes: They only contain a pointer -to an object in the heap. Upon construction, assignment and destruction of -number objects, only the objects' reference count are manipulated. - - -

-Memory occupied by number objects are automatically reclaimed as soon as -their reference count drops to zero. - - -

-For number rings, another strategy is implemented: There is a cache of, -for example, the modular integer rings. A modular integer ring is destroyed -only if its reference count dropped to zero and the cache is about to be -resized. The effect of this strategy is that recently used rings remain -cached, whereas undue memory consumption through cached rings is avoided. - - - - -

11. Using the library

- -

-For the following discussion, we will assume that you have installed -the CLN source in $CLN_DIR and built it in $CLN_TARGETDIR. -For example, for me it's CLN_DIR="$HOME/cln" and -CLN_TARGETDIR="$HOME/cln/linuxelf". You might define these as -environment variables, or directly substitute the appropriate values. - - - - -

11.1 Compiler options

-

- - - -

-Until you have installed CLN in a public place, the following options are -needed: - - -

-When you compile CLN application code, add the flags - -

-   -I$CLN_DIR/include -I$CLN_TARGETDIR/include
-
- -

-to the C++ compiler's command line (make variable CFLAGS or CXXFLAGS). -When you link CLN application code to form an executable, add the flags - -

-   $CLN_TARGETDIR/src/libcln.a
-
- -

-to the C/C++ compiler's command line (make variable LIBS). - - -

-If you did a make install, the include files are installed in a -public directory (normally /usr/local/include), hence you don't -need special flags for compiling. The library has been installed to a -public directory as well (normally /usr/local/lib), hence when -linking a CLN application it is sufficient to give the flag -lcln. - - - - -

11.2 Compatibility to old CLN versions

-

- - - - -

-As of CLN version 1.1 all non-macro identifiers were hidden in namespace -cln in order to avoid potential name clashes with other C++ -libraries. If you have an old application, you will have to manually -port it to the new scheme. The following principles will help during -the transition: - -

- -

-When developing other libraries, please keep in mind not to import the -namespace cln in one of your public header files by saying -using namespace cln;. This would propagate to other applications -and can cause name clashes there. - - - - -

11.3 Include files

-

- - - - -

-Here is a summary of the include files and their contents. - - -

- -
<cln/object.h> -
-General definitions, reference counting, garbage collection. -
<cln/number.h> -
-The class cl_number. -
<cln/complex.h> -
-Functions for class cl_N, the complex numbers. -
<cln/real.h> -
-Functions for class cl_R, the real numbers. -
<cln/float.h> -
-Functions for class cl_F, the floats. -
<cln/sfloat.h> -
-Functions for class cl_SF, the short-floats. -
<cln/ffloat.h> -
-Functions for class cl_FF, the single-floats. -
<cln/dfloat.h> -
-Functions for class cl_DF, the double-floats. -
<cln/lfloat.h> -
-Functions for class cl_LF, the long-floats. -
<cln/rational.h> -
-Functions for class cl_RA, the rational numbers. -
<cln/integer.h> -
-Functions for class cl_I, the integers. -
<cln/io.h> -
-Input/Output. -
<cln/complex_io.h> -
-Input/Output for class cl_N, the complex numbers. -
<cln/real_io.h> -
-Input/Output for class cl_R, the real numbers. -
<cln/float_io.h> -
-Input/Output for class cl_F, the floats. -
<cln/sfloat_io.h> -
-Input/Output for class cl_SF, the short-floats. -
<cln/ffloat_io.h> -
-Input/Output for class cl_FF, the single-floats. -
<cln/dfloat_io.h> -
-Input/Output for class cl_DF, the double-floats. -
<cln/lfloat_io.h> -
-Input/Output for class cl_LF, the long-floats. -
<cln/rational_io.h> -
-Input/Output for class cl_RA, the rational numbers. -
<cln/integer_io.h> -
-Input/Output for class cl_I, the integers. -
<cln/input.h> -
-Flags for customizing input operations. -
<cln/output.h> -
-Flags for customizing output operations. -
<cln/malloc.h> -
-malloc_hook, free_hook. -
<cln/abort.h> -
-cl_abort. -
<cln/condition.h> -
-Conditions/exceptions. -
<cln/string.h> -
-Strings. -
<cln/symbol.h> -
-Symbols. -
<cln/proplist.h> -
-Property lists. -
<cln/ring.h> -
-General rings. -
<cln/null_ring.h> -
-The null ring. -
<cln/complex_ring.h> -
-The ring of complex numbers. -
<cln/real_ring.h> -
-The ring of real numbers. -
<cln/rational_ring.h> -
-The ring of rational numbers. -
<cln/integer_ring.h> -
-The ring of integers. -
<cln/numtheory.h> -
-Number threory functions. -
<cln/modinteger.h> -
-Modular integers. -
<cln/V.h> -
-Vectors. -
<cln/GV.h> -
-General vectors. -
<cln/GV_number.h> -
-General vectors over cl_number. -
<cln/GV_complex.h> -
-General vectors over cl_N. -
<cln/GV_real.h> -
-General vectors over cl_R. -
<cln/GV_rational.h> -
-General vectors over cl_RA. -
<cln/GV_integer.h> -
-General vectors over cl_I. -
<cln/GV_modinteger.h> -
-General vectors of modular integers. -
<cln/SV.h> -
-Simple vectors. -
<cln/SV_number.h> -
-Simple vectors over cl_number. -
<cln/SV_complex.h> -
-Simple vectors over cl_N. -
<cln/SV_real.h> -
-Simple vectors over cl_R. -
<cln/SV_rational.h> -
-Simple vectors over cl_RA. -
<cln/SV_integer.h> -
-Simple vectors over cl_I. -
<cln/SV_ringelt.h> -
-Simple vectors of general ring elements. -
<cln/univpoly.h> -
-Univariate polynomials. -
<cln/univpoly_integer.h> -
-Univariate polynomials over the integers. -
<cln/univpoly_rational.h> -
-Univariate polynomials over the rational numbers. -
<cln/univpoly_real.h> -
-Univariate polynomials over the real numbers. -
<cln/univpoly_complex.h> -
-Univariate polynomials over the complex numbers. -
<cln/univpoly_modint.h> -
-Univariate polynomials over modular integer rings. -
<cln/timing.h> -
-Timing facilities. -
<cln/cln.h> -
-Includes all of the above. -
- - - -

11.4 An Example

- -

-A function which computes the nth Fibonacci number can be written as follows. - - - - -

-#include <cln/integer.h>
-#include <cln/real.h>
-using namespace cln;
-
-// Returns F_n, computed as the nearest integer to
-// ((1+sqrt(5))/2)^n/sqrt(5). Assume n>=0.
-const cl_I fibonacci (int n)
-{
-        // Need a precision of ((1+sqrt(5))/2)^-n.
-        cl_float_format_t prec = cl_float_format((int)(0.208987641*n+5));
-        cl_R sqrt5 = sqrt(cl_float(5,prec));
-        cl_R phi = (1+sqrt5)/2;
-        return round1( expt(phi,n)/sqrt5 );
-}
-
- -

-Let's explain what is going on in detail. - - -

-The include file <cln/integer.h> is necessary because the type -cl_I is used in the function, and the include file <cln/real.h> -is needed for the type cl_R and the floating point number functions. -The order of the include files does not matter. In order not to write out -cln::foo we can safely import the whole namespace cln. - - -

-Then comes the function declaration. The argument is an int, the -result an integer. The return type is defined as `const cl_I', not -simply `cl_I', because that allows the compiler to detect typos like -`fibonacci(n) = 100'. It would be possible to declare the return -type as const cl_R (real number) or even const cl_N (complex -number). We use the most specialized possible return type because functions -which call `fibonacci' will be able to profit from the compiler's type -analysis: Adding two integers is slightly more efficient than adding the -same objects declared as complex numbers, because it needs less type -dispatch. Also, when linking to CLN as a non-shared library, this minimizes -the size of the resulting executable program. - - -

-The result will be computed as expt(phi,n)/sqrt(5), rounded to the nearest -integer. In order to get a correct result, the absolute error should be less -than 1/2, i.e. the relative error should be less than sqrt(5)/(2*expt(phi,n)). -To this end, the first line computes a floating point precision for sqrt(5) -and phi. - - -

-Then sqrt(5) is computed by first converting the integer 5 to a floating point -number and than taking the square root. The converse, first taking the square -root of 5, and then converting to the desired precision, would not work in -CLN: The square root would be computed to a default precision (normally -single-float precision), and the following conversion could not help about -the lacking accuracy. This is because CLN is not a symbolic computer algebra -system and does not represent sqrt(5) in a non-numeric way. - - -

-The type cl_R for sqrt5 and, in the following line, phi is the only -possible choice. You cannot write cl_F because the C++ compiler can -only infer that cl_float(5,prec) is a real number. You cannot write -cl_N because a `round1' does not exist for general complex -numbers. - - -

-When the function returns, all the local variables in the function are -automatically reclaimed (garbage collected). Only the result survives and -gets passed to the caller. - - -

-The file fibonacci.cc in the subdirectory examples -contains this implementation together with an even faster algorithm. - - - - -

11.5 Debugging support

-

- - - -

-When debugging a CLN application with GNU gdb, two facilities are -available from the library: - - - -

- - - -

12. Customizing

-

- - - - - -

12.1 Error handling

- -

-When a fatal error occurs, an error message is output to the standard error -output stream, and the function cl_abort is called. The default -version of this function (provided in the library) terminates the application. -To catch such a fatal error, you need to define the function cl_abort -yourself, with the prototype - -

-#include <cln/abort.h>
-void cl_abort (void);
-
- -

- -This function must not return control to its caller. - - - - -

12.2 Floating-point underflow

-

- - - -

-Floating point underflow denotes the situation when a floating-point number -is to be created which is so close to 0 that its exponent is too -low to be represented internally. By default, this causes a fatal error. -If you set the global variable - -

-cl_boolean cl_inhibit_floating_point_underflow
-
- -

-to cl_true, the error will be inhibited, and a floating-point zero -will be generated instead. The default value of -cl_inhibit_floating_point_underflow is cl_false. - - - - -

12.3 Customizing I/O

- -

-The output of the function fprint may be customized by changing the -value of the global variable default_print_flags. - - - - - -

12.4 Customizing the memory allocator

- -

-Every memory allocation of CLN is done through the function pointer -malloc_hook. Freeing of this memory is done through the function -pointer free_hook. The default versions of these functions, -provided in the library, call malloc and free and check -the malloc result against NULL. -If you want to provide another memory allocator, you need to define -the variables malloc_hook and free_hook yourself, -like this: - -

-#include <cln/malloc.h>
-namespace cln {
-        void* (*malloc_hook) (size_t size) = ...;
-        void (*free_hook) (void* ptr)      = ...;
-}
-
- -

- - -The cl_malloc_hook function must not return a NULL pointer. - - -

-It is not possible to change the memory allocator at runtime, because -it is already called at program startup by the constructors of some -global variables. - - - - -

Index

- -

-Jump to: -

- - -


-This document was generated on 28 August 2000 using -texi2html 1.56k. - - diff --git a/doc/cln.ps b/doc/cln.ps deleted file mode 100644 index 47e22a0..0000000 --- a/doc/cln.ps +++ /dev/null @@ -1,5902 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: cln.dvi -%%Pages: 60 -%%PageOrder: Ascend -%%BoundingBox: 0 0 596 842 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: /usr/local/teTeX/bin/ix86-linux-libc6/dvips -D600 -o -%+ cln.ps cln.dvi -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2000.08.28:2345 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 39158280 55380996 1000 600 600 (cln.dvi) -@start -%DVIPSBitmapFont: Fa cmbxti10 14.4 1 -/Fa 1 47 df<13FCEA03FF481380121F4813C0A25AA2B5FCA31480A26C13005B6C5AEA1F -F0EA07C0121271912B>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmr9 9 54 -/Fb 54 128 df12 DI<123C127EB4FCA21380A2127F123D1201A4EA0300A31206A35A5A5A127012200917 -7AB315>39 D<123C127EB4FCA21380A2127F123D1201A4EA0300A31206A35A5A5A127012 -2009177A8715>44 DI<15301578A215F815F0A2140115E0A214 -0315C014071580A2140F1500A25C141EA2143E143CA2147C1478A214F85C13015CA21303 -5CA213075CA2130F91C7FCA25B131EA2133E133CA2137C137813F85BA212015BA212035B -A212075BA2120F90C8FCA25A121E123E123CA2127C1278A212F85AA212601D4B7CB726> -47 DI<13075B5B137FEA07FFEAFFBFEAF83F1200B3B3A4EBFFC0007FEBFF80A219327A -B126>IIII<000C14C0380FC00F90B5128015005C5C14F014C0D80C18C7FC90C8FCA9EB0FC0EB7F -F8EBF07C380D801E380F000F000E1480000CEB07C0A2000814E0C7EA03F0A415F8A31218 -127C12FEA315F05A00D81307006014E0A26C14C0EC0F806CEB1F006C131E6C5B3803C0F8 -3801FFE038003F801D347CB126>I<14FE903807FF8090380F81C090383C006049137090 -38F001F83801E0031203EA07C0A2390F8001F0001F90C7FC90C8FC5AA35A127EEB07F0EB -1FFC38FE381F903860078001C013C0EC03E039FF8001F0A2010013F8140015FC5A15FEA4 -127EA5123E003F14FCA26C14F81401D80F8013F015E03807C0030003EB07C03901E00F80 -3900F81E00EB3FFCEB0FE01F347DB126>I<1230123C003FB6FCA215FE4814FCA215F800 -70C7123000601460A215C048EB0180A2EC0300C71206A25C5C143814305CA214E0495AA2 -1303A2495AA3130FA349C7FCA35BA55BA8133E131C20347CB126>III<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA3 -4A6C7EA202707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D7EA201 -0E80010C1300010FB5FC49800118C77EA24981163FA2496E7EA3496E7EA2000182160712 -03486C81D81FF0EC1FFCD8FFFE49B512E0A233367DB53A>65 D67 -D69 -DIIII76 -DI79 DI82 D<90381FE003EB7FFC3901F01F -07390380038F48C712CF000E147F4880003C80A24880A200F880A3817EA27E007E91C7FC -127F13C0EA3FF013FF6C13F06C13FF6C14C06C80C614F8013F7F01037FEB003FEC03FF14 -00ED3F80151F16C0150F124000C01407A47E1680A27EED0F007E6C141E6C141C00F35CD8 -F1E013F039E0FC03E039C01FFF80D903FEC7FC22377CB42B>I97 DII<153FEC0FFFA2EC007F -81AFEB07F0EB3FFCEBFC0F3901E003BF4848C6B4FC48487F48C7FC4880123EA2127E127C -A212FCA8127CA2127E123EA27E6C5C6C6C5B3903C001BF3A01E0033F802600F81E13FCEB -3FFCD90FE0130026357DB32B>III<151F90 -391FC07F8090397FF1E3C09038F07B833903C01E039039800E01800007010FC7FC000F80 -EB00074880A66C5CEB800F000791C7FC0003130E6D5AEBF07838067FF0380E1FC090C9FC -A5EA0F80EBFFFE6CEBFFC06C14F06C80000780390F0001FE001EEB007F48141F007C1580 -48140FA5007CEC1F00A26C143E6C5C390FC001F83903F007E0C6B51280D91FFCC7FC2233 -7EA126>III107 DI<2703F01FE013FF00FF90267FF80313C0913AE07C0703E03C07F3803E -1C01F02803F7003F387F01F690381F300001FC02E07F495CA3495CB3A2486C496C487EB5 -3BC7FFFE3FFFF0A23C217EA041>I<3903F01FC000FFEB7FF09038F1E0F83907F3807C39 -03F6007E01FC133E153F5BA35BB3A2486CEB7F80B538C7FFFCA226217EA02B>II<3903F03F8000FFEBFFE09038F3C0F839 -07F7003CD803FC7F497F168049EB07C016E0150316F0A2150116F8A816F01503A216E015 -0716C06DEB0F80ED1F006D131E01F6137C9038F381F89038F1FFE0D9F07FC7FC91C8FCAB -487EB512C0A225307EA02B>I<3803E07C00FF13FF9038E18F803907E31FC0EA03E613EC -EC0F809038F8070091C7FCA35BB3487EB512E0A21A217FA01E>114 -DI<1330A51370A313F0A212 -0112031207121FB512FEA23803F000B01403A81201EBF8061200140CEB7E1CEB1FF8EB07 -E0182F7FAD1E>IIIII<3A7F -FF807FF8A23A07F8001FE00003EC0F80ED070000011406A26C6C5BA26D131C017E1318A2 -6D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3010390C7FC14FBEB01FEA2 -6D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA21306130EEA701CEA7838EA -1FF0EA0FC025307F9F29>I<003FB512F0A290380007E0003CEB0FC00038131F0030EB3F -8000701400147E006013FE5C495A1303C6485A5C495A131F495A91C7FC017E133013FE48 -5A5B485A000714705B48481360001F14E0485AEB0003007E130FB6FCA21C207E9F22>I< -001C1370003E13F8387F01FC00FF13FEA2007F13FC383E00F8001C1370170879B226> -127 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmti9 9 1 -/Fc 1 47 df<121C123E127F12FFA212FE127C12380808778718>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt9 9 63 -/Fd 63 127 df<123C127E12FFAF127EAE123C1200A7123C127E12FFA4127E123C082F71 -AE27>33 D<131FEB7FC0497E5A80EA03F1EBE1F8EA07E013C0A513C15C9039C3F1FF80D9 -E3E113C03803E7E3EBEFC1D9FF811380EDF800EC01F0EA01FEEBFC0301F85B00031307D8 -07FC5B120F381FFE0FD83FBE5BEB3F1FD87E1F90C7FC149F38FC0FBF14FE1307ECFC0201 -031307903901F80F80A238FE03FC387E07FE397F1FFF9F6CB61200149F6CEB0FFE390FFC -03FC3903F000F822307EAE27>38 D40 -D<127012F812FE7E6C7E6C7EEA0FE06C7E12036C7E7F1200137EA27FA2EB1F80A3EB0FC0 -A4EB07E0ACEB0FC0A4EB1F80A3EB3F00A2137EA25B12015B485A1207485AEA3FC0485A48 -C7FC5A12F81270133A7AB327>I<130F497EA60078EB81E000FEEB87F000FF138FEBDFBF -6CB512E06C14C0000F1400000313FCC613F0A2000313FC000F13FF003F14C04814E039FF -DFBFF0EB1F8F00FE13870078EB81E00000EB8000A66DC7FC1C207BA627>II<007FB512F8B612FCA4 -6C14F81E067C9927>45 D<1538157C15FCA2140115F8140315F0140715E0140F15C0141F -1580143F1500A25C147E14FE5C13015C13035C13075C130F5CA2131F5C133F91C7FC5B13 -7E13FE5B12015B12035BA212075B120F5B121F5B123F90C8FC5A127E12FE5AA25A12781E -3A7CB327>47 D<130E131FA25BA25B5B5A5A123F5AB5FC13BFEA7C3F1200B3AA003FB512 -805A15C01580A21A2F79AE27>49 DII< -153815FC14011407140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A3801FF80 -4890C7FCEA0FFC485AEA7FF0EAFFC05BA27FEA7FF0EA1FF86C7EEA03FF6C7F38007FE06D -7E6D7EEB07FE6D7E010013C0EC7FE0EC3FF8EC0FFC14071401140015381E287CAA27>60 -D<007FB512FEB7FCA4003F14FEC9FCA6003FB512FEB7FCA46C14FE20127D9F27>I<1270 -12FC7E6C7E7FEA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7EEB07FE6D7E010013C0 -EC7FE0EC3FF8EC0FFC1407A2140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A -3801FF804890C7FCEA0FFC485AEA7FF0EAFFC05B48C8FC5A12701E287CAA27>I65 D<007FB5FCB612C08115F87E3907E003FCEC00FE157E157F81A6157EA25D14 -03EC0FF890B55A15C015F081819038E000FE157FED3F80151FA2ED0FC0A6151F1680153F -ED7F004A5A007FB55AB65A5D15E06C1480222E7FAD27>I<903803F80E90381FFE1F9038 -3FFFBF90B6FC5A3803FE0FEBF80348487E48487E5B4848137FA248C7123FA25A127E151E -150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6C6C137E6D13FE3907F001FC3803 -F8039038FE0FF86CB512F06C14E0013F13C06D1300EB03F820307DAE27>I<387FFFFC14 -FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F811680151FA316C0150FABED -1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C91C7FC14FC222E7FAD27 ->I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5FCA5EB -E00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7FCA36C15C0232E7FAD27>I<007FB6 -1280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5FCA5EBE00FA36E5A -91C8FCAC387FFF80B5FC805C7E222E7EAD27>I<903807E03890381FFC7C90387FFFFC90 -B5FC5A3803FC1F3807F00FEBE007380FC003001F13011380123F90C7FCA2127EA2157892 -C7FC5AA8EC1FFF4A1380A3007E6D1300EC00FCA36C1301A21380121FEBC003120F3807E0 -07EBF00F3803FC1F6CB5FC7EEB7FFE90381FFC78D907E0C7FC21307DAE27>I<007FB512 -E0B612F0A36C14E039001F8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>73 -D<387FFFC080B5FC7E5CD803F0C8FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680222E -7FAD27>76 D<3A7FF003FFE013F800FF4913F06C6C6C13E0A200079038003E0013DEA313 -CFA3148013C714C0A213C314E0A213C114F0A3EBC0F8A31478147CA2143C143EA2141E14 -1F140FA3EC07BEA3EC03FEEA7FFCA238FFFE01EA7FFC6E5A242E7FAD27>78 -DI<007FB5FCB612E081816C803907E003FEEC00FF81ED3F80151F16C0 -150FA6151F1680153FED7F005DEC03FE90B55A5D5D5D92C7FC01E0C8FCADEA7FFEB5FCA3 -6C5A222E7FAD27>I<387FFFF014FEB67E6C80813907E01FF014076E7E1401811400A514 -015D14034A5A141F90B55A5D5DA281EBE01F6E7E14076E7EA816F0EDF1F8A4397FFE01FB -EDFFF0B57E6C4814E0ED7FC0C8EA0F00252F7FAD27>82 D<90383F80E03901FFF1F00007 -13FF5A5A383FC07FEB801F387F000F007E130712FE5A1403A3EC01E06C90C7FC127E127F -EA3FC013F86CB47E6C13F86C13FE6CEBFF80C66C13C0010713E0EB007FEC0FF0EC07F814 -03140115FC1400127812FCA46CEB01F8A26C130390388007F09038F01FE090B5FC15C015 -0000F85B38701FF01E307CAE27>I<007FB61280B712C0A439FC03F00FA60078EC078000 -0091C7FCB3AB90B512C0A248806C5CA2222E7EAD27>I<3A7FFE01FFF8B54813FCA36C48 -6C13F83A07E0001F80B3AB6D133F00031500A26D5B0001147E6D13FE6C6C485A90387F87 -F814FF6D5B010F13C06D5BD900FCC7FC262F80AD27>I87 D<387FFFF0B512F8A314F000FCC7FCB3B3ACB512F014F8A36C13F015 -3A71B327>91 D<387FFFF0B512F8A37EEA0001B3B3ACEA7FFFB5FCA36C13F0153A7EB327 ->93 D<131C137E3801FF80000713E0001F13F84813FC38FFE7FF13C3130000FC133F0078 -131E180B79AD27>I<007FB512F8B612FCA46C14F81E067C7E27>I<48B47E000F13F04813 -FC4813FF81EB807FEC1FC0381F000F00046D7EC7FCA2EB07FF137F0003B5FC120F5A383F -F807EA7FC0130012FE5AA46C130F007F131F383F807F90B612806C15C07E000313F13A00 -7F807F8022207C9F27>97 DIIIII<153F90391FC0FF80D97FF313C048 -B612E05A4814EF390FF07F873A1FC01FC3C09039800FC000A248486C7EA66C6C485AA2EB -C01F390FF07F8090B5C7FC5C485BEB7FF0EB1FC090C9FCA27F6CB5FC6C14E04814F84814 -FE5A90388000FF007EC7EA3F80007C140F00FC15C0481407A46C140F007C1580007F143F -6C6CEB7F00391FF003FE90B5FC000714F86C5CC66C1380D90FFCC7FC23337EA027>II<130F497E497EA46D5A6DC7 -FC90C8FCA7383FFF80487FA37EEA000FB3A4007FB512F0A2B612F86C14F0A21D2F7BAE27 ->I<143C147E14FFA4147E143C1400A73801FFFE4813FFA37EC7123FB3B0147E1238007C -13FE38FE01FCEB03F8B5FC6C13F014E06C13803807FE0018407CAE27>II<387FFF80B57EA37EEA000F -B3B2007FB512F8B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC09039FFF9 -FFE091B57E7E3A0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0FFC3FF -486C01E3138001F913E701F813E36C4801C313002920819F27>I<387FE03F39FFF1FFC0 -01F77F90B57E6C80000313C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C -018313E024207F9F27>II< -387FE07E39FFF3FFC090B512F0816C800003EB81FE49C67E49EB3F8049131F16C049130F -A216E01507A6150F16C07F151F6DEB3F80ED7F006D5B9038FF83FEECFFFC5D5D01F313C0 -D9F0FEC7FC91C8FCAC387FFF80B57EA36C5B23317F9F27>I<903807F03C90383FFE7E90 -B5FC000314FE5A380FF80F381FE007EBC003383F800148C7FC127EA200FE147E5AA67E00 -7E14FEA2127F383F8001381FC003EBE007380FF81F6CB5FC7E6C147E38007FFCEB0FE090 -C7FCAC91381FFFF8A24A13FC6E13F8A226317E9F27>I<397FFC01FC39FFFE0FFF023F13 -804A13C0007F90B5FC39007FFE1F14F89138F00F809138E002004AC7FC5CA291C8FCA213 -7EAD007FB57EB67EA36C5C22207E9F27>I<90387FF3800007B512C0121F5AA2387F801F -38FC000F5AA2EC07806C90C7FCEA7F8013FC383FFFE06C13FC000713FFC61480010F13C0 -9038003FE014070078EB03F000FC1301A27E14036CEB07E0EBC01F90B512C01580150000 -FB13FC38707FE01C207B9F27>I<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FC -AE1518153C157EA315FE6D13FC148390381FFFF815F06D13E0010313C0903800FE001F29 -7EA827>I<397FE01FF8486C487EA3007F131F00031300B21401A21403EBF80F6CB612E0 -6C15F0A2EB3FFE90390FF07FE024207F9F27>I<3A7FFC0FFF80486C4813C0A36C486C13 -803A07C000F800EBE00100035CA2EBF00300015CA2EBF80700005CA390387C0F80A36D48 -C7FCA3EB3F3FEB1F3EA3EB0FFCA36D5AA26D5A22207E9F27>I<3A7FFE07FFE0A2B54813 -F06C486C13E0A23A0F80001F00A36D5B0007143EA414F0EBC1F83903E3FC7CA4EBE79EA2 -00011478A301F713F8A2EBFF0F6C5CA3EBFE0790387C03E024207F9F27>I<393FFC1FFF -486C5A168016006C487E3901F807E06C6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A1307 -6D5A5C80497E130F497E143EEB3E3FEB7E1F90387C0F8001F87F00016D7E3803F0033A7F -FE1FFF80A2B54813C06C486C1380A222207E9F27>I<3A7FFC0FFF80486C4813C0A36C48 -6C13803A07E000F800000313015D13F012016D485A1200A26D485A137CA290387E0F8013 -3EA2011F90C7FC5CA2130F149E14BE130714FC1303A25C1301A25CA213035CA213075C12 -08EA3E0F007F5B131FD87E7FC8FCEA7FFE6C5A5B6C5AEA07C022317E9F27>I<001FB512 -FE4814FFA490380001FEEC03FCEC07F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00495A -495A495AEB1FE0495A495A49C7FC485A4848131E4848133F485A485A485A485AB7FCA46C -14FE20207E9F27>I<127812FCB3B3B3A21278063A70B327>124 D<9038F003803903FC07 -C0000F130F381FFE1F393FFF7F80397FBFFF0038FE1FFE486C5A00F813F0387003C01A0A -7AAD27>126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmti10 10.95 9 -/Fe 9 118 df<120FEA1F80EA3FC0127F12FFA3EA7F801300123C0A0A77891C>46 -D99 D<167C4BB4FC923803C38092380781C0ED0F03ED1F0FA2ED3E1FA292387E0F -80EE070093C7FC5DA54A5AA54A5AA30103B512F0825E90260007E0C7FCA44A5AA54A5AA5 -4AC8FCA5147EA55CA5495AA5495AA45C1307A25CA2130F001C5B127E91C9FCEAFE1F131E -12FC485AEA70386C5AEA1FE0EA0F802A5383BF1C>102 D<14E0EB01F0EB03F8A214F014 -E0EB01C090C7FCAE13F8EA03FCEA070EEA0E0F001C138012181238EA301F1270A2126038 -E03F00A2137E12C012005BA3485AA3485AA2485AA21430380FC070A3381F80E0A214C013 -01A2EB03801400EA0F06130EEA07F8EA01F0153E78BC1C>105 D -110 DI115 -DI<13F8D803FC1438D8070E14 -7CD80E0F14FC001C7F121800384A5AEA301F1270A200604A5A38E03F00A2137E00C04A5A -12005BA24B5A485AA34848495AA4484890383F01801603A392387E0700A315FE0003150E -EC01BE00019038033E1C9038F0061E2600F81C5B90393FF80FF090390FE003E0292978A7 -31>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmmi10 10.95 2 -/Ff 2 80 df<49B592B512F082A290C76D913807FE00DA01BFED01F0705D039F6F5AA291 -26031FF04A5A150F82150702066D4AC7FC1503A26F7E020C16068281834A017F5CA2707E -A24A6E5B161F83160F4A6E5B1607A2834A01035C8316018349486D5CA21880177F49C8EB -C180173F18E1171F010604E3C8FCEF0FF3A218FB49ED07FEA21703A2496F5AA301381500 -6001FC1678EA03FE267FFFF01538B56C15304A15104C3E7DBD49>78 -DI E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmtt12 14.4 1 -/Fg 1 44 df<157815FC4A7EB3A2003FB812E04817F0B912F8A46C17F06C17E0C7D801FE -C8FCB3A26E5A157835347CBE3E>43 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmsy7 7 1 -/Fh 1 1 df0 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmr7 7 5 -/Fi 5 55 df<1238127C12FEA6127CAA1238AA12101200A51238127C12FEA3127C123807 -297BA813>33 D<1306130C13181330136013E0EA01C0EA0380A2EA07005A120E121EA212 -1C123CA35AA512F85AAB7E1278A57EA3121C121EA2120E120F7EEA0380A2EA01C0EA00E0 -136013301318130C13060F3B7AAB1A>40 D<12C012607E7E7E120E7EEA0380A2EA01C013 -E0120013F0A213701378A3133CA5133E131EAB133E133CA51378A3137013F0A213E01201 -13C0EA0380A2EA0700120E120C5A5A5A5A0F3B7DAB1A>I<13381378EA01F8121F12FE12 -E01200B3AB487EB512F8A215267BA521>49 D54 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmmi7 7 3 -/Fj 3 111 df<1238127C12FEA3127C123807077A8614>58 D<1378EA07FC5BEA0078A3 -5BA4485AA43903C00780EC1FC0EC3860EC60E0380780C1EB8103138290388401C0D80F18 -C7FC5B13E07FEA1FFE381E3F80EB07C06D7EEA3C011560A30078EBC0C01303903801C180 -A200F0EBE300EB00FE0060133C1B297CA723>107 D<3907C01FC0390FE07FE03918F0E0 -F03930718078EB7B00D8607E1338017C133C01781338D8C0F813785B1200A248485BA34A -5AEA03C01660EC03C0A23A07800780C0A2ED8180ED8300390F000386EC01FC00066D5A23 -1B7D9929>110 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmex10 10 2 -/Fk 2 2 df<1430147014E0EB01C0EB0380A2EB0700130E131E131C133C5BA25BA2485A -A212035B1207A2485AA348C7FCA45A123EA3127EA5127CA212FCB3A2127CA2127EA5123E -A3123F7EA46C7EA36C7EA212037F1201A26C7EA21378A27F131C131E130E7FEB0380A2EB -01C0EB00E0147014301462738226>0 D<124012E012707E7EA27E7E7F12037F6C7EA26C -7EA21378A2137C133C133EA27FA3EB0F80A414C01307A314E0A51303A214F0B3A214E0A2 -1307A514C0A3130F1480A4EB1F00A3133EA2133C137C1378A25BA2485AA2485A5B120790 -C7FC120E5AA25A5A5A124014627C8226>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmsl10 10.95 22 -/Fl 22 122 df97 D<133FEA1FFFA3C6FC7F137EA65BA6485AA5EC0FF03903F03FFE9138F01F80 -9039F3C007C09039F70003E001FC6D7E498048486D7EA249147EA2167FA2485AA31780A2 -170048485CA54B5A48C7FC5EA24B5AA24B5A485D4B5A4B5AD87D8091C7FC0079147ED878 -C05B39F06003F039E0380FC026C01FFFC8FC380007F8294076BE33>IIIII<177C -913907F803FE91393FFE0F8F9139FC0F9C1F903901F007F0903A03E003E01ED907C0EBF0 -0C90260F80011300011F80133F14004980A301FE495AA3017E5C15075E013E5C013F495A -6D49C7FCEC803E903837C0FC903861FFF09038607F8001E0C9FC5B1201A47F7F6CB512F8 -EDFF806D14E06D8090B67E3A03E0000FFCD80F80EB00FE48C8127E003E81123C007C815A -A4163EA25E00785D007C4A5A6C4A5A6CEC0FC0D807C0013FC7FC3903F801FC39007FFFF0 -010F90C8FC303D7FA82D>I<147EEB3FFEA3130113005CA6495AA6495AA5ED0FF0903907 -E07FFCEDF03E9138E1801F9139E7000F8014EE02F814C0EB0FD814F05CA25CA2011FEC1F -805CA549C7EA3F00A6017E147EA6495CA400011401486C497EB500F0B512F0A32C3F7CBE -33>I<147814FCEB01FE130314FFEB07FE130314FCEB01F8EB00F01400ACEB07F03801FF -E0A3EA001F130FA214C0A6EB1F80A6EB3F00A6137EA65BA5EA03FE387FFFE0A2B5FC183E -7DBD19>I<147EEB3FFEA3130113005CA6495AA6495AA6494890B5FC17FE5D9238007FE0 -EE3F00163C49485B16E04B5A4BC7FC1506151C90381F80305DEC81C0EC83E0EC87F0149F -90383F31F81461ECC0FCEC807C90383E007E153E49133F8182150F826F7E5B6F7EA26F7E -00014A7E486C497EB539E01FFFF017E05D303F7EBE30>107 D<147EEB1FFE133FA21301 -130014FCA6EB01F8A6EB03F0A6EB07E0A6EB0FC0A6EB1F80A6EB3F00A6137EA65BA5EA03 -FE387FFFF0A2B5FC173F7DBE19>I<902707E00FF0EB07F82803FFC03FFEEB1FFFDBF01F -9038780F80913CC1C00F80E007C03E001FC30007C18003E0D90FC6ECC30002CC02E614F0 -4A14EC02B014F802E05CA24A5CA2011F020FEC07E04A5CA549C74848EB0FC0A6017E4AC7 -EA1F80A649027EEC3F00A4000103FE5C486C496CECFF80B5D8F07FD9F83F13FCA346287C -A74D>I<903907E00FF03A03FFC07FFCEDF03E9138C1801F3B001FC7000F80EB0FCE02D8 -14C0149814B014E0A25CA2011FEC1F805CA549C7EA3F00A6017E147EA6495CA400011401 -486C497EB500F0B512F0A32C287CA733>II<9138FE03FC903A -7FFC0FFF8092383C07E09238F001F0903A03FDC000F86DB4C77E4A147E4A147F834A1580 -A218C0171F495AA318E0A218C04948143FA5EF7F80495A18005F5F16015F011F4A5A4C5A -5F6E495A4C5A02B049C7FCD93F1813FC91380E03F0913807FFC0DA01FEC8FC91CAFCA213 -7EA65BA41201487EB512F0A3333A80A733>I<903907E01F803A03FFC07FE09138C1E1F0 -ECC3833A001FC607F8EB0FCC16F014989138B003E0ED018002E0C7FCA25C131FA25CA449 -C8FCA6137EA65BA41201487EB512FCA325287EA724>114 D<9138FF80800107EBE1C090 -391F0073800138131F49130F491307485A000314034914001207A37F150201F090C7FC13 -FC3803FFE06C13FE6C6D7E6D13E06D7F010F7F01007F140FEC01FE0010EB007E0038143E -A3151EA2151C0078143C127C15385D007E14F0007F495A39F38003C026E1E01FC7FC38C0 -7FFCEB1FE0222A7DA824>I<1303A45B1306A2130EA2131EA25BA2137C13FC1201120700 -1FB512C0B6FCA2D801F8C7FCA3485AA6485AA6485AA51403381F8006A65C1300A26D5AA2 -000F5B6C6C5A3803E1C06CB45AD8007EC7FC1A3978B723>III< -48B539803FFFC0A2150026000FFC90381FF800D903F8EB0FC094C7FC0101140E6D6C5B6E -5B027E5B027F5B6E485A91381F838003C3C8FCEC0FC615ECEC07F86E5A811401811403EC -067EEC0C7F4A7E02387FEC701F4A6C7ED901C07F9038038007D907007F010E1303496D7E -013C8013FCD807FE49B4FCB5010F13F85DA232277FA630>120 D<90B539C003FFF05E18 -E0902707FC000113006D48EB00FC4A14706D7E17605F16016E5C01004AC7FCA216068002 -7E5B161C1618027F5B805EA26F5AEC1F815E0383C8FC15C3EC0FC615CE15CC15F814075D -A25D14035D5DA292C9FCA21406140E140C5CA25C1218007E5B00FE5BA2495A4848CAFCEA -F806EA600CEA7838EA3FF0EA0FC0343A80A630>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmtt12 13.14 1 -/Fm 1 44 df43 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbx12 13.14 45 -/Fn 45 123 df<923803FFF0037FEBFE7C0203B612FC141F91397FFE001FDAFFE0133F01 -030180137F4990C7FC495A4A14FF4948147F495AA24A143F017F151FAFB9FCA526007FF0 -C7121FB3B3A2003FB5D8E00FB512F8A53D4D7ECC44>13 D45 -D -I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007FB712E0A52B47 -77C63D>49 DIII<000316E001C0140301FC141F9039FFC003FF91B612C0178017005E5E5E5E16C05E -4BC7FC15F001E7138001E0C9FCABEC1FFC91B512C001E314F001EF14FC9039FFE00FFE91 -390003FF8001FC6D13C001F06D13E04915F049147F17F8C9FC17FC163F17FEA317FFA3EA -0F80EA3FE0487E7F12FF7FA217FE5BA2EE7FFC6C5A01C015F86CC8FCEEFFF06C6C5B6D15 -E06C6C010713C0D807F84913806CB490387FFE006C90B55A6C6C14F0011F14C0010749C7 -FC010013E030487AC63D>I56 -DI67 D69 D71 -DI76 -DII80 D82 -DI<003FBB12C0A5DA80019038F8001FD9 -F800160148487113E001C0183F49181F90C7170FA2007E1907A3007C1903A500FC1AF048 -1901A5C894C7FCB3B3A749B812F8A54C4A7CC955>II97 DI<913807FF80027F13F80103B512FE010FECFF804948C613C0D97FF0EB1FE04948EB3F -F04849137F4849EBFFF84890C7FCA2485A121F49EC7FF0123FEE3FE0EE0F80484891C7FC -A312FFAB127FA27FA2123FA2001F163E7F120F6D157C6C6D14FC6C16F86C6DEB01F06C01 -F013076D6CEB0FE06DB4EB7F80010F90B51200010314FCD9007F13F0020790C7FC2F337C -B137>II -IIII<13FC487E3807FF80A2487F487FA66C5B6C5BA2D801FEC7FC6C -5A90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>I -107 DII<903A7FC001FF80B5010F13F0033F13FC4B13FF9126C1FE077F9138C3F003 -00039026C7C0017F6C1480DACF008002DE7F02DC8114F8A25CA35CB3AAB6D8C07FEBFFE0 -A53B317BB044>I<913807FF80027F13F80103B6FC010F15C090261FFE017F903A7FF000 -3FF8D9FFC0EB0FFC48496D7E4890C76C7E4817804980000F17C048486E13E0A2003F17F0 -49157FA2007F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3001F17E06D5C000F17C06C -6C4A13806C17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612C0010392 -C7FCD9007F13F80207138036337DB13D>I<90397FC007FEB590383FFFE002C1B512F802 -C714FE913ACFF80FFF809126FFC0037F000391C713F06C01FC6E7E4A143F4A814A6E7E17 -0F84198083A219C0A283A219E0AA19C05FA31980A24D1300A24D5A804D5A6E4A5A6E4A5A -6E495B6E6C485B9126EFF01F5B02E7B548C7FC02E114F8DAE07F13C0DB0FFCC8FC92CAFC -AFB612C0A53B467CB044>I<9039FF801FC0B5EB7FF8913881FFFE02837FDA87E11380EC -8F830003D99F0713C06C139E14BC14B814F84A6C1380A26F13009138E0007C93C7FCA35C -B3A8B612E0A52A317CB032>114 DI<14F8 -A61301A41303A21307A2130FA2131F133F137F13FF1203000F90B512F0B7FCA426007FF8 -C7FCB3A6167CAA013F14F880131FED01F090380FFE03903907FF07E06DEBFFC06D148090 -39007FFE00EC0FF826467EC430>III120 -D<007FB500C090387FFFE0A5C601F0C73803F8006E5D017F5E6E1407013F5E6E140F011F -5E6E141FA26D6D91C7FC5F6D153E6F137E6D157C6F13FC6D5DEDF0016D5DEDF803027F5C -15FC1607DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF6E13BE16FE6E5BA36E5BA26E5BA2 -6F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F8013FC486C5B387FE001D8FFF05B14 -035D14074A5A49485A007F49CAFCEBC07E383F81FC6CB45A6C5B6C13C0C648CBFC3B467E -AF41>I<001FB712FCA4DA000113F801F84913F001E04913E05B494913C04B138048C748 -1300A24B5A4B5A003E495B5E5C4A5B4A5BC75C5C4A90C7FC4A5A4A5AA2495B4949137C49 -5B5D5B495B4990C712F85C137F495A48491301485BA248491303484913074849130F161F -4890C7EA7FF04848EB03FFB8FCA42E307DAF37>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbx12 17.28 42 -/Fo 42 123 df<19F0F001F819FC1803A2180719F8180F19F0A2181F19E0183F19C0A218 -7F198018FF1900A25F60170360A2170760170F60A2171F60173F60A2177F60A217FF95C7 -FC5E5FA216035F16075FA2160F5F161F5FA2163F5F167F5FA216FF94C8FC5D5EA215035E -15075EA2150F5E151F5EA2153F5E157F5EA215FF93C9FC5C5DA214035D14075DA2140F5D -141F5DA2143F5D147F5DA214FF92CAFC5B5CA213035C13075CA2130F5CA2131F5C133F5C -A2137F5C13FF91CBFCA25A5B12035BA212075B120F5BA2121F5B123F5BA2127F5B12FF90 -CCFCA25A127E123C3E9077EB51>47 DI<16F04B7E1507151F153F -EC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3B3B3B3007FB91280A6395E74DD51 ->IIII<01C0EE01C0D801F0160701FE163FD9FFE0EC03FFDAFF8090B5 -FC92B71280190060606060606095C7FC5F17F817E017804CC8FC16F0D9FC3F90C9FC91CB -FCAEED3FFE0203B512E0020F14FC023F14FF91B712C001FDD9E00F13F09027FFFE00037F -02F801007F02E06EB4FC02808091C86C13804917C04917E049816C4817F090C914F8A371 -13FCA219FEA419FFA3EA03F0EA0FFC487E487E487FA2B57EA319FEA35C19FC6C90C85A49 -17F85BD83FF017F001805D001F18E07F6C6C4B13C06D4B13806C6C92B51200D803FE4A5B -6C6C6C495B6C01E0010F5BD97FFE017F13E0011FB75A6D93C7FC010315FC010015E0023F -91C8FC020313E0406078DD51>IIIII<942601FFFEED03C0057FD9FFF014070407B600FE140F043F6F -6C131F4BB800E0133F030705F8137F031F9127F0007FFE13FF037F49C73807FF014AB500 -E0020013C302070280ED3FE74A49C96CB5FC4A01F81607027F01E08291B54882494A8249 -49CB7E49498449498449864949845D49498490B5855D48874891CDFC1D7F485BA2481C3F -5CA25A1D1F5C5AA34899C7FCA25CA4B5FCAE7EA480A27EA2F50FC07E80A27EA2806CF41F -80A26C7F1D3F6C6E1A007E6F197E7F6D6D616F18016D6D616D1A036D6D4E5A6D6D4E5A6D -6D6C4D5A6D6E173F6E6D4D5A021F01F84C48C7FC6E01FEEE07FC6E6D6C4B5A020102F0ED -7FF06E6C01FE913803FFC0031FD9FFF0013F5B030791B648C8FC030117F8DB003F16E004 -0793C9FCDC007F14F8050149CAFC626677E375>67 D70 D73 D77 D<94381FFFE00407B67E043F15F04BB712FE030FEEFFC0033FD9FC0014F092B500 -C0010F13FC020349C7000113FF4A01F86E6C7F021F01E0031F13E04A496F7F4A90C90003 -7F4A48707F0103497013FF4949717FA24949717F4949717F4949717F49874B8390B58648 -91CB6C7FA24849727FA2481D804A84481DC0A348497313E0A3481DF0A448497313F8A5B5 -1CFCB06C1DF8A26E61A46C1DF0A36E96B5FC6C1DE0A36C6D4E14C0A26C1D806E606C1D00 -A26C6E4D5BA26C6E4D5BA26D6D4D5B6D6D4D5B6D636F5F6D6D94B55A6D6D4C5C6D6D4C91 -C7FC6D6E4B5B6D6E4B5B023F01F0033F13F06E6D4B5B6E01FE4AB55A0203D9FFC0010F91 -C8FC020002FC90B512FC033F90B712F0030F17C0030394C9FCDB007F15F804071580DC00 -1F01E0CAFC666677E379>79 D82 -DI<001FBEFCA64849C79126E0000F1480 -02E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181FA400 -7E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>II<913803FFF8027FEBFFC0 -0103B612F8010F15FE013F6F7E90277FFC003F13E0D9FFC001077F4801F06D7F486F7F6E -6D7F48707E6E6E7FA2717FA2856C5B836C4982A238007FC0011FC8FC90C9FCA7043FB5FC -031FB6FC0203B7FC143F91B5EAF00F0107EBFE00011F13F0017F13C090B5C7FC00035B48 -13F8485B5C5A485B5C5AA2B5C8FCA45FA36C6D143B177B17736C6D14F36C6DD901E37F6E -D907C313FF6C01FCD91F8114FE000301FFD9FF0114FF6C9138FFFE006C6C4A7F011F02F0 -131F010302C0010313FE9026001FFCCAFC48437BC14E>97 D<903807FF80B6FCA6C6FC7F -7FB3A8EFFFF0040FEBFF80043F14F00381B612FC038315FF92268FFE0080DBBFF0010F13 -E0DBFF8001037F93C76C7F03FC6E7F4B6F7E4B6F7E4B6F13805D7313C01BE0A27313F0A2 -1BF8A37313FCA51BFEAC1BFCA41BF861A21BF0A24F13E0A21BC0616F17804F13006F5D6F -4B5A6F4A5B4A6C4A5B9126FC7F804913E09126F81FE0011F5B9127F00FFC01B55A4A6CB6 -48C7FCDAC00115F84A6C6C14C091C7001F49C8FC90C8000113E04F657BE35A>I<92380F -FFE092B6FC020715E0023F15F891B712FE499039FE001FFF010701F0010113804901C001 -0713C0494915E0017F90C75A4A16F049485C485B485B5A5C487013E0A248496E13C0A248 -04011300EF007C95C7FC485BA5B5FCAC7EA3807EA36C7F19FC7E806CEF01F8806CEF03F0 -6C6D15076E16E06C6D150F6D6DEC1FC06D6DEC3F806D6DECFF00010701FCEB03FE6D9039 -FF801FFC010091B512F0023F15C0020F92C7FC020014F8030F13803E437BC148>II<92380FFFC04AB512FC -020FECFF80023F15E091B712F80103D9FE017F499039F0003FFE4901C0EB0FFF4990C76C -7F49486E7F49486E7F49486E7F48844849157F48844A153F48845A4A151F855AA3485B72 -1380A3B5FCA391B9FCA31A000280CBFCA67EA3807EA37E6E160F6CF01F80A26C6D163F6C -19006E5E6C6D16FE6C606D6C15016D6C6CEC07F86D6D4A5A6D01F0EC3FE0010301FC49B4 -5A6D9026FFC01F90C7FC6D6C90B55A021F15F8020715E0020092C8FC030713F041437CC1 -4A>III<903807FF80B6FCA6C6FC7F7FB3A8 -EF0FFF94B512F0040314FC040F14FF4C8193267FC03F7F9326FE001F7FDB81F86D7FDB83 -E07FDB87C06D7F5E038FC780159E039C8015BC03B88215F0A35DA35DB3B3B7D8F007B712 -80A651647BE35A>II<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>108 -D<902607FF80D90FFFEE7FF8B691B500F00207B57E040302FC021F14E0040F02FF027F14 -F84C6F90B67E93267FC03F9027C003FE017F9326FE001F9027E007F0007FC6DA81F86D90 -26F00FC06D7F6DD983E06D4AC77E6DD987C06DD9F83E6E7F4C163C038FC76E4882039E5F -039C6E4A8003BC16FD03B8DCFFC08203F05FA34B94C8FCA34B5EB3B3B7D8F007B7D8803F -B612FCA67E417BC087>I<902607FF80EB0FFFB691B512F0040314FC040F14FF4C819326 -7FC03F7F9326FE001F7FC6DA81F86D7F6DD983E07F6DD987C06D7F5E038FC780159E039C -8015BC03B88215F0A35DA35DB3B3B7D8F007B71280A651417BC05A>I<923807FFE092B6 -FC020715E0021F15F8027F15FE494848C66C6C7E010701F0010F13E04901C001037F4990 -C87F49486F7E49486F7E49486F7E48496F13804819C04A814819E04819F04A814819F8A3 -48496F13FCA34819FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C6D -4B13E06C19C06E5D6C19806C6D4B13006D6C4B5A6D6C4B5A6D01C001035B010701F0010F -13E06D01FE017F5B010090B7C7FC023F15FC020715E0020092C8FC030713E048437CC151 ->I<902607FF80EBFFF0B6010FEBFF80043F14F00381B612FC038315FF92268FFE0080DB -BFF0011F13E0C6DAFF806D7F6D91C700037F6D01FC6E7F4B6E7F4B824B6F13804B811BC0 -7313E0A27313F0A21BF885A21BFCA385A21BFEAC1BFC61A31BF8A2611BF0A24F13E0A21B -C0616F4B13801B006F92B5FC6F4A5B6F4A5B6F4A5B6F6C011F13E0DBDFE0495B9226CFFC -03B55A03C7B648C7FC03C115F8DBC07F14C0041F49C8FC040113E093CBFCB3A3B712F0A6 -4F5D7BC05A>I114 DII<902607FFC0ED3FFEB60207B5FCA6C6EE00076D -826D82B3B3A260A360A2606D160E181E606D6D147C4E7F6D6D4948806D6DD907E0ECFF80 -6D01FEEB3FC06D90B65A023F5D020F14FC020314F0DA001F018002F0C7FC51427BC05A> -II<007FB600C0017FB512F8A6D8001F01F8C70003EBE0006D040090C7FC6D -6D4A5A6D6D4A5A6D6D4A5A70495A6D4C5A6E7F6E6D495A6E6D495A7049C8FC6E4A5A6E6D -485A6E6D485A6E13FFEF8FF06EEC9FE06FEBFFC06F5C6F91C9FC5F6F5B816F7F6F7F8481 -707F8493B57E4B805D4B80DB0FF37FDB1FE17F04C080153F4B486C7F4B486C7F4A486D7F -4A486D7F4A5A4B6D7F020F6E7F4A486D7F4A486D804A5A4AC86C7F49486F7F4A6F7F0103 -707FEB3FFFB600F049B7FCA650407EBF55>120 DI<0007B912E019F0A4 -02FCC714E04801C016C091C7481480495C491700494A5B494A5B5E495E4C5B494A5B93B5 -FC604B5C001F4A91C7FC495B5F4B5B4B5B5DC85C4B5B92B55A5C5F4A91C8FC5C4A5B5E4A -5B5C4CEB03F04A5B91B55A5B5E4991C7FC494914074917E05D495B495B49160F5D90B55A -484A141F5A92C8123F4849157F484915FF485E4A14074849021F13C0484BB5FCBAFCA47E -3C407CBF48>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmtt10 10.95 86 -/Fp 86 127 df<121C127FA2EAFF80B2EA7F00B1123EC7FCA9121C127FA2EAFF80A3EA7F -00A2121C09396DB830>33 D<003C131E00FEEB3F80A26C137FA248133FB3007E1400007C -7F003C131E191B75B830>I<903903800380496C487E496C487EA8011F131F02C05BA400 -3FB612FE4881B81280A36C16006C5D3A003F803F80017F137F020090C7FCA9495B495B00 -3FB612FE4881B81280A36C16006C5D2701FC01FCC7FCA30003130301F85BA86C486C5A6C -486C5A29387DB730>I<147814FCA5EB03FF011F13E090B512FC4880000780481580261F -FCFC13C001F0EB3FE0D83FC0130FD87F80EB07F001001303007E15F812FE5A1507A3ED03 -F07E007E91C7FC127FEA3F8013E0EA1FF8EA0FFF7E6CEBFF80C614F0013F7F010F13FE01 -007F168002FC13C0153FED0FE0ED07F0A21503007E15F81501B4FCA35A1503A2007E15F0 -007F1407ED0FE0D83FC0131FD81FE0EB7FC09039FCFDFF806CB612006C5C6C5CC614F001 -3F13C0D903FEC7FCEB00FCA6147825477BBE30>I38 D<141E147F14FF5BEB03FEEB07F8EB0FF0EB1FE0EB3FC0EB7F80EBFF005B48 -5A485A5B12075B120F5B121F5B123F90C7FCA25A127EA412FE5AAB7E127EA4127F7EA27F -121F7F120F7F12077F12037F6C7E6C7E7FEB7F80EB3FC0EB1FE0EB0FF0EB07F8EB03FEEB -01FF7F147F141E184771BE30>40 D<127812FE7E7F6C7EEA1FE06C7E6C7E6C7E6C7E6C7E -7FEB3F80EB1FC0130F14E0130714F0130314F8130114FC1300A214FE147EA4147F143FAB -147F147EA414FE14FCA2130114F8130314F0130714E0130F14C0131FEB3F80EB7F005B48 -5A485A485A485A485AEA7FC0485A90C7FC5A1278184778BE30>I<14E0497EA70030EC01 -80007CEC07C000FFEC1FE00181133F01E113FF267FF9F313C0261FFDF713000007B512FC -000114F06C5C013F1380D90FFEC7FC90383FFF8090B512E04880000714FC391FFDF7FF26 -7FF9F313C026FFE1F013E00181133F0101131F007CEC07C00030EC0180000091C7FCA76D -5A23277AAE30>I<141C143E147FAF003FB612FE4881B81280A36C16006C5DC76CC8FCAF -143E141C29297DAF30>II<00 -3FB612E04815F0B712F8A36C15F06C15E025077B9E30>I<120EEA3F80EA7FC0EAFFE0A5 -EA7FC0EA3F80EA0E000B0B6E8A30>I<16E0ED01F0ED03F8A2150716F0150F16E0151F16 -C0153F1680A2157F16005D5D14015D14035D14075D140F5D141F5DA2143F5D147F92C7FC -5C5C13015C13035C13075C130F5C131F5CA2133F5C137F91C8FC5B5B12015B12035B1207 -5B120F5BA2121F5B123F5B127F90C9FC5A5AA2127C123825477BBE30>IIIIII<000FB612804815C0A416800180C8FCAEEB81FF018F13E001BF13F890B57E81 -81D9FE0113809039F0007FC049131F49EB0FE04913076CC713F0C81203A216F81501A412 -3C127EB4FC150316F015074815E0007E140F007FEC1FC06D137FD83FE0EBFF80261FF807 -13006CB55A6C5C6C5C6C14E0D8003F1380D907F8C7FC25397BB730>II<1278B712FC -16FEA416FC00FCC7EA03F8ED07F0ED0FE00078EC1FC0C8EA3F80ED7F00157E15FE4A5A5D -4A5A14075D140F5D4A5AA24AC7FCA2147EA214FE5C13015CA213035CA213075CA3130F5C -A5131F5CA96DC8FCA2273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003ECFF8048 -15C04848C613E0D81FF8EB3FF001E0130F4848EB07F849130348C7EA01FC007E1400A500 -7F14016C15F86D13036C6CEB07F06C6CEB0FE0D807F8EB3FC03A03FF01FF806C90B51200 -6C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF0EB1FE04848EB0FF0D83F80 -EB03F890C712014815FC007E140000FE15FE48157EA66C15FE007E15FC007F14016C6CEB -03F86D13076C6CEB0FF001F8133FD80FFEEBFFE06CB612C06C1580C6ECFE006D5B011F13 -F0010190C7FC273A7CB830>II<120EEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA0E00C7FCB1120EEA3F80 -EA7FC0EAFFE0A5EA7FC0EA3F80EA0E000B276EA630>II<16E0ED01F0ED -07F8150F153FEDFFF04A13E0020713C04A1300EC3FFEEC7FF8903801FFE0495B010F90C7 -FC495AEB7FF8495A000313C0485BD81FFEC8FC485AEA7FF0485A138013E06C7EEA3FFC6C -7E3807FF806C7FC613F06D7EEB1FFE6D7E010313C06D7F9038007FF8EC3FFEEC0FFF6E13 -C0020113E06E13F0ED3FF8150F1507ED01F0ED00E0252F7BB230>I<003FB612FE4881B8 -1280A36C16006C5DCBFCA7003FB612FE4881B81280A36C16006C5D29157DA530>I<1238 -127CB4FC7F13E0EA7FF86C7E6CB4FC00077F6C13E0C67FEB3FFC6D7E903807FF806D7F01 -0013F06E7EEC1FFE6E7E020313C06E13E09138007FF0ED3FF8150F153FED7FF0913801FF -E04A13C0020F13004A5AEC7FF84A5A010313C0495BD91FFEC7FC495AEBFFF000035B4813 -80001F90C8FCEA3FFC485AEAFFE0138090C9FC127C1238252F7BB230>I64 DI<007FB512F0B612FE6F7E82826C813A -03F0001FF815076F7E1501150082167EA516FE5E15015E15074B5AED7FE090B65A5E4BC7 -FC6F7E16E0829039F0000FF8ED03FCED00FE167E167F82A2EE1F80A6163F17005EA2ED01 -FE1503ED0FFC007FB65AB7FC16E05E93C7FC6C14FC29387EB730>I<91383F801C903901 -FFF03E0107EBFC7E011F13FE4913FF4914FE9038FFC07F48EB001F4848130F4913074848 -1303484813015B48481300A2485A167E90C8FC5A127E163C160012FEA25AAA7EA2127EA2 -163C007F157E7E7FA26C7E16FE6C6C14FC6D13016C6C14F86C6C13036DEB07F06C6C130F -6C9038C03FE06DB512C06D14806D1400010713FC010113F09038003F80273A7CB830>I< -007FB512E015FCB67E6F7E6C81823A03F0007FF0ED1FF815076F7E6F7E1500167FA2EE3F -80A2161F17C0A2160FA317E01607AB160F17C0A3161F1780163FA2EE7F00A216FE15014B -5A1507ED1FF8ED7FF0007FB65A5EB75A93C7FC6C14FC15E02B387FB730>I<007FB612FE -B8FCA47ED803F0C7123FA8161E93C7FCA4157815FCA490B5FCA6EBF000A4157892C8FCA5 -EE0780EE0FC0A9007FB7FCB8FCA46C16802A387DB730>I<007FB7128017C0B8FCA27EA2 -D801F8C7120FA8EE078093C7FCA5151E153FA490B6FCA69038F8003FA4151E92C8FCAE38 -7FFFF080B5FCA27E5C2A387EB730>I<027F1370903903FFC0F8010F13F1013F13FD4913 -FF90B6FC4813C0EC003FD803FC131F4848130F5B484813075B001F14035B123F90C71201 -A25A127E6F5A93C7FC12FE5AA992B5FC17805C7E007E7F1700ED01F8127F6C1403A27F12 -1F6D1307120F7F6C6C130F6D131F6C6C133F6CB4137FEC80FF6C90B5FC6D13FD6D13F901 -0F13F10103EBC0F0D9007EC8FC293A7DB830>I<3B7FFF803FFFC0B56C4813E0A46C496C -13C03B03F00001F800B290B6FCA69038F00001B3A23B7FFF803FFFC0B56C4813E0A46C49 -6C13C02B387EB730>I<007FB512FEB7FCA46C14FE390007E000B3B3A8007FB512FEB7FC -A46C14FE203878B730>I<387FFFF8B5FC80A25C7ED801F8C9FCB3B0160FEE1F80A9007F -B7FCB8FCA46C160029387DB730>76 DII<90383FFFE048B512FC000714FF4815804815C04815E09038F0007F01C0131F -4848EB0FF090C71207A2007E1403A300FE15F8481401B3A96C1403A2007E15F0A3007F14 -07A26D130F6C6CEB1FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E025 -3A7BB830>I<007FB512E0B612FC15FF16C016E06C15F03903F0003FED0FF8ED03FC1501 -ED00FEA2167E167F163FA6167F167E16FEA2ED01FC1503ED0FF8ED3FF090B6FC16E016C0 -160015FC15E001F0C8FCB0387FFF80B57EA46C5B28387DB730>I<007FB5FCB612E015F8 -15FE816C812603F0017F6E6C7E151F6F7E15071503821501A515035E1507150F4B5A157F -4A485A90B65A93C7FC5D5D8181D9F0017FEC007FED1FC0150F821507A917F0EEE1F8A316 -F13A7FFF8003F3B500C0EBFFF0A26F13E0816C49EB7FC0C9EA1F002D397EB730>82 -D<90390FF801C090397FFF03E048B512C34814F74814FF5A381FF007383FE00190388000 -7F48C7123F007E141F12FE48140FA21507A46CEC03C0007E91C7FC127F6C7E13E0EA1FF8 -6CB47E6C13F86CEBFF806C14F0D8003F13FC01077F9038007FFF020713809138007FC015 -3FED0FE0ED07F01503A216F80078140112FCA56C140316F06C14077F6DEB0FE001F0EB3F -C001FE13FF90B61280160000FD5CD8F87F13F8011F13E0D870011380253A7BB830>I<00 -7FB712C0B812E0A53AFC001F8007A80078ED03C0C791C7FCB3B1010FB5FC4980A46D91C7 -FC2B387EB730>I<3B7FFF800FFFF0B56C4813F8A46C496C13F0D803F0C7EA7E00B3B16D -14FE00015DA26D1301A26C6C495AA2017F495A90393FC01FE0ECF07F6DB55A6D5C6D91C7 -FC6D5B010013F8EC1FC02D397FB730>III<3A3FFF807F -FE92B5FC487FA26C5B6F5A3A00FC001FC06D5C017E133F017F91C7FC6D5BEC807E011F13 -FE6E5AEB0FE15DEB07F35DEB03FF5D7F6D5BA26E5AA26EC8FCA24A7EA24A7EA2497FA290 -3803FBF014F3903807F1F814E190380FE0FC14C0011F137EEC807F013F7F02007F49131F -017E8001FE130F49800001140749801503D87FFF90381FFFC05DB5008014E0A26C010014 -C0812B387EB730>I<003FB612FC4815FEA416FC007EC71201ED03F8ED07F0A2ED0FE0ED -1FC0A2ED3F80003CEC7F00C8FC15FE4A5A5D14034A5A4A5AA24A5A4A5AA24AC7FC14FEA2 -495A495AA2495A495AA2495A495A91C8FC5B13FE4848143C167E485A485AA2485A485AA2 -485A48C8FC90B612FEB7FCA46C15FC27387CB730>90 D<007FB5FCB61280A4150000FCC8 -FCB3B3B3A5B6FC1580A46C140019476DBE30>I<1238127C12FEA27E7E7F123F7F121F7F -120FA27F12077F12037F12017F12007F7F80133F80131FA280130F801307801303801301 -801300808081143F81141FA281140F81140781140381140181140081811680153FA216C0 -151F16E0150F16F0150716F81503A2ED01F0ED00E025477BBE30>I<007FB5FCB61280A4 -7EC7121FB3B3B3A5007FB5FCB6FCA46C140019477DBE30>I<1307EB1FC0497EEBFFF800 -0313FE000FEBFF80D81FFD13C0D87FF813F039FFE03FF8EB800FEB0007007CEB01F00070 -EB00701D0D77B730>I<003FB612E04815F0B712F8A36C15F06C15E025077B7D30>I97 DI<49B4 -7E010F13F0013F13FC497F48B6FC4815803907FE007F13F8485A485A49EB3F004848130C -90C9FC5A127EA212FE5AA87E127EA2127FED07806C6CEB0FC07F6C6C131F6C6C148001FC -133F6CB4EBFF006C90B5FC6C5C6C5C013F13F0010F13C0D901FEC7FC222A79A830>I<91 -3803FFC0825CA280A2EC0007AAEB01FC90380FFF87013F13E790B512F74814FF5A3807FE -03380FF80049137F4848133F4848131F49130F48C7FC1507127E12FEA25AA77E150F127E -A2007F141F7E6D133F6C6C137F6D13FF380FF8012607FE07EBFFC06CB7FC6C02F713E06C -14E76D01C713C0011F1303D903F8C8FC2B397DB730>II<157F913803FFE0020F13F0143F4A13F8A2ECFF07EB01FE -9138FC03F0903903F800C04A1300A8007FB612C0B712E0A46C15C0260003F0C7FCB3A900 -3FB6FCA2481580A26C1500A225397DB830>IIIIII<387FFFF0B57EA47EEA0001B3B3A8007FB612E0B712F0A46C15E024387AB730>I<9039 -01F001F03A7F8FFC0FFC3AFFDFFE1FFE90B5487E92B51280A23A7FFE1FFE1F3B07FC0FFC -0FC001F813F89039F007F00701E013E0A401C013C0B3A23B7FFC1FFC1FFC3BFFFE3FFE3F -FEA43B7FFC1FFC1FFC2F2880A730>IIII<903901FC01E090 -390FFF83F0013F13E390B512F34814FB4814FF481301380FF80049133F4848131F484813 -0F5B48C71207A2127E150312FE5AA77E1507127E127F150F6C7E151F6C6C133F6D137FD8 -0FF813FF3807FE036CB6FC6C14FB6C14F36D13C3011F1303EB03F890C7FCAD4AB512E04A -14F0A46E14E02C3C7CA730>II<90381FFC0E90B5129F000714FF5A5A5A387FE007EB800100 -FEC77E5A81A37E007F141E01C090C7FCEA3FF8381FFFE06C13FF000314C0C614F0010F13 -FC9038007FFEEC03FFEC007F0078EC3F8000FC141FED0FC0A27EA27E151F01C0EB3F806D -137F9039F803FF0090B6FC5D5D00F814F0013F13C0267007FEC7FC222A79A830>III<3B7FFF803FFFC0B56C48 -13E0A46C496C13C03B01F00001F000A26D130300005DA2017C495AA36D495AA36D49C7FC -A390380F803EA36D6C5AA2ECE0FC01035BA214F101015BA214FB01005BA214FF6E5AA302 -1FC8FC2B277EA630>I<3B7FFF800FFFF06E5AB515F8A26C16F04A7ED807C0C7EA1F00A2 -6D5C0003153EA56D147E0001157CEC0FC0EC1FE0EC3FF0A32600F87F5BEC7DF8147CA214 -FC01786D5AA290387CF87C137D157D14F0013DEB3DE0013F133FA2ECE01FA2011F5C6D48 -6C5A2D277FA630>I<263FFFC0B5FC48168014E1A214C06C16003A007E001F806D49C7FC -EB1F80157E6D6C5A6D6C5AEB03F1903801F3F0ECFFE06D5B147F6E5A92C8FCA2814A7E4A -7EEB01F3ECF1F0903803E0F849487E010F137C49487EEC003F496D7E017E6D7E4913073B -7FFF803FFF806E4813C0B5FCA27E4A6C13802A277EA630>I<3B7FFF803FFFC06E4813E0 -B5FCA27E4A6C13C03B01F80001F000120015036D5C137C4B5A7FA2013F495A7FA26E48C7 -FC130F14C00107133EA214E001035BA2EB01F05DA2EB00F85D1479147D5D143FA26E5AA3 -6E5AA2141F92C8FCA25C143EA2147E147C120F486C5AEA3FC113C3EB07F0495A13FF6C5B -5C6C90C9FCEA07FCEA01F02B3C7EA630>I<003FB612FC4815FEA416FC007EC7EA07F8ED -0FF0ED1FE0ED3FC0ED7F80003CECFF00C7485AEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC -495A495A495A495A495A495A49C7121E4848143F485A485A485A485A485A48B7FCB8FCA4 -6C15FE28277DA630>II<1238127C12FEB3B3B3AD -127C123807476CBE30>II<01781338 -D803FE137C3907FF80FE001F13C148EBE7FC4813FF01CF13F8D8FF0713F0486C13C0D87C -0013800038EB3C001F0B78B730>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmsy10 10.95 3 -/Fq 3 16 df<007FB812F8B912FCA26C17F83604789847>0 D13 -D15 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmr10 10.95 81 -/Fr 81 128 df11 -DIII<121E123FEA7F80EAFFC0A7EA -7F80AAEA3F00AA121EAB120CA5C7FCA9121E123FEA7F80EAFFC0A4EA7F80EA3F00121E0A -4179C019>33 D<001E130F003FEB1F80397F803FC039FFC07FE0A201E013F0A2007F133F -393F601FB0001EEB0F3000001300A5491360A3484813C0A23903000180A20006EB0300A2 -481306485B485B002013101C1C7DBE2D>I<121E123FEA7F80EAFFC0A213E0A2127FEA3F -60121E1200A513C0A3EA0180A2EA0300A21206A25A5A5A12200B1C79BE19>39 -D<1430147014E0EB01C0EB0380EB0700130EA25B5B1378137013F05B1201485AA2485AA3 -48C7FCA35A121EA2123EA2123CA2127CA5127812F8B21278127CA5123CA2123EA2121EA2 -121F7EA36C7EA36C7EA26C7E12007F1370137813387F7FA27FEB0380EB01C0EB00E01470 -1430145A77C323>I<7E7E7E12707E7E7EA27E6C7E7F12017F12007F1378A27FA37FA313 -1F7FA21480A21307A214C0A5130314E0B214C01307A51480A2130FA21400A25B131EA35B -A35BA25B5B12015B12035B48C7FC120EA25A5A5A5A5A5A135A7AC323>II<121E123FEA7F -80EAFFC0A213E0A2127FEA3F60121E1200A513C0A3EA0180A2EA0300A21206A25A5A5A12 -200B1C798919>44 DI<121E123FEA7F80EAFFC0A4EA7F80EA3F -00121E0A0A798919>III<14C013031307 -131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC2D>II< -EB07FC90383FFF809038F80FE03901C003F848C66C7E00066D7E48147F481580EA1F8048 -6C14C06D133FA46C5A6C48137F6CC71380C8FCA216005D5D5D4A5A5D4A5AEC0FC0023FC7 -FCEB1FFCECFF809038000FE0EC03F0EC01FC6E7E157F1680153F16C0A2ED1FE0A216F0A2 -120C123F487E487EA316E05B153F6CC713C012606CEC7F80003815006C14FE6C495A3907 -C003F83903F80FF0C6B55A013F1380D907FCC7FC243F7CBC2D>I<150EA2151E153EA215 -7E15FEA214011403157E1406140E140C141814381430146014E014C0EB01801303140013 -06130E130C5B133813305B13E05B485A120390C7FC1206120E120C5A123812305A12E0B8 -FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00021403D807C0130F01F813FE90B55A -5D5D5D158092C7FC38063FF890C9FCADEB01FE90380FFF8090383E03E090387001F09038 -C00078D80780137C90C77E153F0002EC1F80C8FC16C0A2ED0FE0A316F0A4123E127F5A7F -A290C713E0A248141F006015C0A2007015800030143F003815000018147E000E5C6C495A -3903C003F03901F00FE06CB55A013F90C7FCEB07F8243F7CBC2D>II<12301238123E003FB612FCA316F84815F0A2 -16E00070C812C00060EC0180A2ED030015065A5D5DA2C85A5D15E05D4A5A140392C7FC14 -06A2140E5CA2143C14381478A214F85CA21301A21303A3495AA4130FA6131FA96D5A6D5A -26407BBD2D>III<121E123FEA7F80EAFFC0A4EA7F80EA3F00121EC7FCB3121E123FEA7F80EAFF -C0A4EA7F80EA3F00121E0A2779A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912 -E0BA12F0A26C18E03C167BA147>61 D63 D<1507A34B7EA34B7EA24B7EA34B7E15 -6FA2EDEFF815C7A291380187FC1583A291380303FE1501A291380600FFA34A6D7EA34A6D -7EA34A6D7EA20270800260130FA202E0804A1307A201018191B6FCA2498191C71201A201 -068182A2496F7EA3496F7EA3496F7EA21370717E13F0486C82D80FFEED3FFCB500E0010F -B512F8A33D417DC044>65 DIIIIIIII75 DIIIII82 DI<003FB91280A3903AE0007FE000 -90C76C48131F007EEF0FC0007C17070078170300701701A300601700A5481860A5C81600 -B3B14B7E4B7E0107B612FEA33B3D7DBC42>IIII<007FB5D8C003B512E0A3C66C48C7 -387FFC00D93FF8EC1FE06D48EC0F806D6C92C7FC170E6D6C140C6D6C5C17386D6C14306D -6D5B17E06E6C5B023F495AEDE003DA1FF090C8FC020F1306EDF80E6E6C5A1618913803FE -386E6C5A16606E13E06F5AA26F7E6F7EA26F7E4B7EA2ED33FEED71FF156103C07F020113 -7F03807F4A486C7E5C02066D7E4A6D7E141C02186D7E4A6D7E147002606D7E4A6D7F1301 -4A6E7E49C86C7E5B01066F7E010E6F7E133F496C812607FFC0EC3FFFB500F80103B512FE -A33F3E7EBD44>II91 D<6D1340000114C039030001800006EB -0300481306A2485BA2485BA2485BA3485BA500CFEB678039DF806FC039FFC07FE001E013 -F0A2007F133FA2393FC01FE0391F800FC0390F0007801C1C73BE2D>II<13801201EA030012065AA25AA25AA25AA35AA512 -CFEADF80EAFFC013E0A2127FA2EA3FC0EA1F80EA0F000B1C7ABE19>96 -DII<49B4FC -010F13E090383F00F8017C131C4913064848131F48485B0007EC7F80485A121F5B003FEC -3F00151E007F91C7FC90C9FCA35AA97EA27F123F16C0121F6DEB0180120F6C6CEB0300A2 -6C6C13066C6C5BD8007C133890383F01F090380FFFC0D901FEC7FC222A7DA828>IIII<167C903903F801FF90391FFF0787903A7E0FCE0F809038F803F83901F001 -F03B03E000F8070000076EC7FCA24848137EA2001F147FA6000F147EA26C6C5BA200035C -6C6C485A6D485A39037E0FC0D91FFFC8FC380703F80006CAFCA2120EA2120F7E7F7F6CB5 -12F015FE6C6E7E6C15E00003813A07C0001FF848C7EA03FC001E140048157E007C153E00 -78153F00F881A50078151E007C153E6C5D001E15786C5DD807C0EB03E0D803F0EB0FC0D8 -00FE017FC7FC90383FFFFC010313C0293D7EA82D>III<14F0EB01F8EB03FCEB -07FEA4EB03FCEB01F8EB00F01400AC14FE137FA313011300147EB3B3A6123C007E137CB4 -13FC14F8A2EB01F0007E13E0383803C0381E0780380FFF00EA01FC175184BD1C>III<2703F003FCEB01FE00 -FF903B0FFF8007FFC0913B3C0FC01E07E0913B7003E03801F00007903BC001F06000F826 -03F1806D487F2601F300EBF98001F6D900FBC7127C04FF147E01FC5CA3495CB3A6486C49 -6C14FFB528F07FFFF83F13FCA346287CA74D>I<3903F003F800FFEB1FFF91383C0F8091 -386007C00007496C7E2603F1807F3801F30001F613018213FCA35BB3A6486C497EB500F0 -B512F0A32C287CA733>I<14FF010713E090381F81F890387E007E01F8131F4848EB0F80 -4848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15 -FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007E -EB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901F807F800FFEB3FFF91 -38781FC09138C007E03A07F98001F02603FB007FD801FE6D7E49147E49147FEE3F80A2EE -1FC0A217E0A2160F17F0A917E0161FA217C0A2EE3F80A26DEC7F00167E6D5C4B5A01FB49 -5A9039F9C007E09039F8F01F80DA3FFEC7FCEC0FF091C9FCAD487EB512F0A32C3A7DA733 ->I<02FF13180107EBC03890381F80E090397E0030784913184848130C4848EB06F8485A -000F1403485AA248481301A2127FA290C7FC5AA97E7FA2123FA26C7E15036C7E00071407 -6C7E6C6C130D00001419017E137190383F81E190380FFF81903801FE0190C7FCAD4B7E92 -B512F0A32C3A7DA730>I<3903F007E000FFEB1FF0EC7878ECE0FC3907F181FE12033801 -F3019038F600FCA2153001FC1300A35BB3A5487EB512FCA31F287EA724>I<90387FC060 -3901FFF8E03807C03D380E0007481303481301481300A212F01560A27EA27E007F140013 -C0EA3FFE381FFFE06C13FC6C7F6C7FC61480010F13C09038007FE0EC0FF00040130300C0 -EB01F814007E1578A37E15707E15E07E6CEB01C000F3EB038039E1E01F0038C0FFFCEB1F -E01D2A7DA824>I<1318A61338A41378A213F8A2120112031207001FB512C0B6FCA2D801 -F8C7FCB3A21560A9000014C07F137CEC0180133E90381F8700EB07FEEB01F81B397EB723 ->I -III<3B7FFFC00FFFE0A3000390390007FE00C648EB03F0017E6D5A6DEB03801480011F49 -C7FC90380FC00E903807E00C6E5A903803F83801015B6D6C5AEC7EC0EC7F80143F141F6E -7E81141FEC3BF0EC71F8ECE1FC14C0903801807E01037FD907007F01066D7E49130F496D -7E01386D7E017880EA01F8D80FFCEB07FEB590381FFFF8A32D277FA630>II<001FB6 -1280A29039E0003F0090C7127E001E14FE001C495A5D0018495A003813075D0030495A14 -1F4A5A92C7FC147EC712FE495A5C495A13075C495A011FEB0180EB3F801400137E13FE48 -5A491303485A000715005B48485B001F5C485A90C7123F007E49B4FCB7FCA221277EA628 ->I<001C130E007EEB1F80007F133F39FF807FC0A3397F003F80007E131F001CEB0E001A -0977BD2D>127 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmbx12 14.4 62 -/Fs 62 123 df12 DII45 DII<913803FFC0023F13FC91B6FC010315C0 -010F010013F0D91FFCEB3FF8D93FF0EB0FFC49486D7E49486D7E48496D13804817C091C8 -FC4817E04817F049157FA2001F17F8A2003F17FCA249153FA2007F17FEA600FF17FFB3A5 -007F17FEA6003F17FC6D157FA3001F17F8A3000F17F06D15FF6C17E0A26C6D4913C06C6D -491380A26C6D491300D97FF8EB1FFED91FFCEB3FF8903A0FFF81FFF06D90B55A01011580 -D9003F01FCC7FC020313C0384F7BCD43>I<157815FC14031407141F14FF130F0007B5FC -B6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>II<91380FFF8091B512FC010314FF010F15C090263FF00313F09026FF -800013FC4848C76C7ED803F86E7E4980D807FC168001FF16C0487F82486D15E0A3805CA2 -7E4A4913C07E6C90C7FCD800FC168090C85A18005F167F4C5A5F4B13E04B5B030F5BDB7F -FEC7FC91B512F816C016FCEEFF80DA000713E0030013F8707E70B4FC7013807013C018E0 -7013F0A218F88218FCA318FEEA01C0EA0FF8487E487E487EA2B57E18FCA44C13F86C90C7 -FC18F0495C6C4816E001F04A13C06C484A1380D80FF84A1300D807FE4A5A2703FFF0035B -C690B612F0013F15C0010F92C7FC010114F8D9001F1380374F7ACD43>I<177C17FEA216 -0116031607160FA2161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01 -F815F0EC03E01407EC0FC01580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC -133E5B13FC485A5B485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020F -B712C0A53A4F7CCE43>I<0003160ED807E0153E01FCEC03FED9FFE0137F91B65A5F5F5F -5F5F94C7FC5E16F85E16C04BC8FC15F801E090C9FC91CAFCABEC0FFF027F13F001E3B512 -FC01E714FF9026FFF80713C0DAC0017F49C713F8496E7E01F0143F496E7E49816C5AC914 -8018C082A218E0A318F0A3EA07C0EA1FF0487E487EA2487EA318E0A25B18C06C485C4916 -8013C0003EC81400003F5D6C6C5D6C6C4A5A6D4A5AD807F8495B6C6C01075B2701FFC03F -5B6C90B6C7FC013F14FC010F14F0010314809026007FF8C8FC344F79CD43>II<121F7F7FEBFF8091B81280A448180060A26060606060A2485F0180C86CC7 -FC007EC912FE5F007C15014C5A4C5A4C5A4C5A485E163F4CC8FC16FEC8485A5E15034B5A -150F5E4B5A153FA24B5AA24BC9FCA25C5C5D1407A34A5AA2141FA3143FA34A5AA414FFA6 -5BAB6D5B6E5A6E5A6E5A395279D043>I<913807FFC0027F13FC49B67E010715E090261F -FC007FD93FC0EB3FFC4948EB0FFE49C76C7E48488048486E138082484816C0A2000FEE7F -E0A3121F7FA27F7F6E15C002E014FF8002FC15806C01FF5BDBC00313006F485A6C02F85B -9238FE0FF86C9138FF3FF06CEDFFE017806C4BC7FC7F6D6E7E010F15E06D81010115FC49 -81010F81013F1680EB7FC32601FF8015C048496C14E04848131F4848010714F0497F001F -020014F84848143F160F48486E13FC1601824848157F173F171FA2170FA318F8A26C7E18 -F0171F6C6C16E0A26C6CED3FC06DED7F806C6C15FF6C6C6C4913006C01E0EB0FFE6C01FC -EB7FF86C6CB65A011F15C0010792C7FC010014F8020F1380364F7ACD43>I<913807FF80 -027F13F00103B512FC010F14FF90261FFE0113C0903A7FF8007FE0D9FFE06D7E48496D7E -48496D7E486F7E4890C77FA2486F1380A2484816C0A2007F17E0A28200FF17F0A418F8A6 -18FCA2127F5EA3123F5E6C7EA26C5DA26C6D5B6C153D6C6D13396C6D13F990397FF801F1 -011FB512E16D02C113F8010314019038007FFCEC00401500A218F05EA218E013F0EA03FC -486C16C0486C5C1880487F18005E5F91C7485A4C5A6C48147F495DD807F049485A4B5B6C -6C010F5B6CB4D93FFEC7FC6C90B55A6D14F0011F14C0010749C8FC010013E0364F7ACD43 ->I63 D<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C80 -83047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E031F -81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D844A -B87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A82 -010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65 -DI<932601FFF8EC01C0047F -D9FF8013030303B600F01307031F03FC131F92B8133F0203DAE001EBC07F020F01FCC738 -3FF0FF023F01E0EC07F94A01806EB5FC4A48C9FC010301F8824949824949824949824949 -824990CA7E4948835C48854849187FA24849183FA2485B1B1F5AA24849180FA45A4A95C7 -FCA3B5FCAE7EA3806CF207C0A46C7FA26C1A0F1C806C7FA26C6DF01F00A26C6D183E7E6E -606D6C18FC6D6D4C5A6D6D4C5A6D6D16076D6D4C5A6D6D4C5A010001FE4C5A6E6C6C03FF -C7FC6E01E0EC03FC020F01FCEC1FF80203903AFFE001FFE0020091B61280031F4BC8FC03 -0315F8DB007F14C0040101FCC9FC525479D261>IIII<932601FFF8EC -01C0047FD9FF8013030303B600F01307031F03FC131F92B8133F0203DAE001EBC07F020F -01FCC7383FF0FF023F01E0EC07F94A01806EB5FC4A48C9FC010301F88249498249498249 -49824949824990CA7E4948835C48854849187FA24849183FA2485B1B1F5AA24849180FA4 -5A4A95C8FCA3B5FCAE6C057FB712E0A280A27E95C7003FEBC000A36C7FA27E807EA26C7F -A26C7F7E806D7E6D7F6D7F6D7F6D6D5E6D13FC01006D93B5FC6E6C6C5C6E01E0EC07FB02 -0F01FCEC1FF10203D9FFE0EBFFE0020091B6EAC03F031FEE001F030303FC1307DB007F02 -E01301040101FCCAFC5B5479D26A>III76 DII<93380FFFC00303B6FC031F15E092B712FC0203D9FC -0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1F -FF49496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B80 -4A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A2 -6E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B -5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13 -F0020F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479 -D265>II82 D<91260FFF80130791B500 -F85B010302FF5B010FEDC03F013FEDF07F90267FF8006D5A2601FFC0EB07FD4890C70001 -B5FC48486E7E49814848150F48488183003F825B007F82A284A200FF83A27F84A27F7F7F -6D93C7FC6C13C014F014FF6C14F0EDFF806C15F8EEFF806C16F017FC6C16FF6C836C17E0 -6C836D82011F826D821303010082020F16801400030715C0ED007F1603DC007F13E08317 -0F7113F08383127800F882A3187FA27E19E0A37E19C06C17FF6D17807F6D4B13006D5D6D -5E01FE4B5AD9FFC0EC1FF802F84A5A903B1FFFC003FFE0D8FE0790B65AD8FC0193C7FC48 -6C6C14FC48010714E0489026003FFEC8FC3C5479D24B>I<003FBC1280A59126C0003F90 -38C0007F49C71607D87FF8060113C001E08449197F49193F90C8171FA2007E1A0FA3007C -1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A553517BD05E>II87 -D<003FB7D88003B7FCA5D8000749C8000701F8C7FC6D6D9238007F806D6E93C8FC7015FE -6D17016E6D5D704A5A6E16076E6D4A5A6E6D5D4F5A6E6D143F6E6D4A5A7191C9FC6E16FE -6EECC00171485A6F5D6F6D485A6FEBF80F71485A6F5D6F6D485AEFFF7F6F4ACAFC6F5C6F -5CA2705B705B8482707F707FA2707F7080855E4C80855E4C80DC3FCF7F058F7FEE7F074C -6C7FDB01FE814C7E4B486C8003076E7F4B48814C7F4B486D7F033F824C7F4BC76C7F4B6E -7F4A5A4B6E804A486E800207844A48814B6F7F4A4883023F824A486F7F92C96C7F02FE84 -0101834948708090263FFFC084B76C0103B712F8A55D527CD166>I<001FBA12C01AE0A4 -0380C714C002F8C8148002C05C91C8481400495F495D494B5B495F495D48484B5B61495D -94B55A6190C85A4C91C7FC605E003E4B5B605E4C5B60C95A93B55A605D4B91C8FC5F5D4B -5B5F5D4B5B5F5D92B55A5F5C4A91C9FC5E5C4A5B5E4AEE03E04A5B5E5C91B55A5E491707 -4991C8FC4B16C05B495B5D49170F495B5D49171F90B55A4B153F5A4891C9127F4A16FF48 -5F48495D4A5D485F4849033F13804A4AB5FC48163FBBFCA47E435279D152>90 -D -97 DI<913801FFF8021FEBFF8091B612E0010315F8010F9038800FFE4948C77ED93FF813 -03D9FFF0491380485B4A4913C0485B5A4890C7FCA2486F13805B003F6F1300EE00FC94C7 -FC485AA412FFAB127FA27FA2123FA2001FEE03E07F7E6EEC07C07E6EEC0F806C6D141F6C -EE3F006C6D147ED97FFC5CD91FFEEB03F8903A0FFFC01FF0010390B55A01001580021F01 -FCC7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4EDFFC0021F13FC -91B6FC010315C7010F9038C01FE7903A1FFE0003F7D93FF86DB5FCD9FFF06D7E48498048 -49805C48824890C8FCA2485AA2123FA2485AA412FFAB127FA46C7EA3121FA26C7E6C5E6E -5C6C7F6C5E6C6D49B5FCD97FF84914E06D6CD90FEFEBFF80903A0FFF807FCF010390B512 -0F010014FE023F13F00203018049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC01 -0715C04901817F903A3FFC003FF0D97FF06D7E4948EB07FC48498048496D7E5A91C76C13 -805A486F13C05B003F17E0A2177F485A18F0A312FFA390B8FCA318E001FCCAFCA5127FA3 -7F123FA2001F17E06DED01F07E17036C6D15E06C16076C6DEC0FC06C6DEC1F806D6CEC3F -006D6C14FED91FFEEB03FC903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F0 -34387CB63D>IIII<137F497E487F487F487F487FA76C5B6C5B6C5B6C5B6DC7FC90C8FCADEB3FF0B5FCA5 -12017EB3B3A6B612E0A51B547BD325>I108 DII<913801FFE0021F -13FE91B612C0010315F0010F9038807FFC903A1FFC000FFED97FF0903803FF8049486D7F -48496D7F48496E7EA24890C86C7E488349151F001F83A2003F834981A2007F1880A400FF -18C0AC007F1880A36C6C4B1300A3001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D4A5A6C6D49 -5B6D6C495BD93FFC010F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113 -E03A387CB643>III<90397FE001FCB590380F -FF80033F13E04B13F09238FE1FF89139E1F03FFC0003EBE3E0C69138C07FFEECE7801500 -14EF14EE02FEEB3FFC5CEE1FF8EE07E04A90C7FCA55CB3AAB612FCA52F367CB537>I<90 -3901FFE007011FEBFC1F017FEBFF7F48B7FC3907FE001FD80FF01307D81FC01301497F00 -3F8148C87EA34881A27FA27F01F091C7FC13FC387FFFC014FEECFFF06C14FEEDFFC06C81 -6C15F86C810001816C81013F1580010715C01300020714E0EC001F1503030013F0007815 -7F00F8153F161F7E160FA27E17E07EA26DEC1FC07F6DEC3F806DEC7F0001FCEB01FE9039 -FF800FFC013FB55AD8FC1F14E0D8F803148027E0007FF8C7FC2C387CB635>I<143EA614 -7EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FC -B3A9EE07C0AB011FEC0F80807FEE1F006D1380EDC03E6D6D5A0100EBFFF86E5B021F5B02 -0190C7FC2A4D7ECB34>IIII<00 -7FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC03F86D6D495A6D6D495A6D4B5A6F -495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF -806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E -4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E -49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>II<001FB8FC1880A3912680007F130001FCC75B01F014FF49495B49495B495D5D48C748 -5B4B5B5F5D003E4A90C7FC4B5A5E5C4A5B5EC75A4A5B4A5B5E5C4A90C8FC4A5A5D5B4949 -EB0F80495B5D5B495B4B131F4916004990C7FC495A4A5C5A485B48495C5C485E48495B48 -49130791C7485A4815FFB8FCA37E31357CB43C>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmbx12 20.736 16 -/Ft 16 122 df<13FF000313C04813F0487F487F487F5A801580B6FCA215C0A315E0A27E -A37E7E7E6C13F76C13E7C61387EB0007A2140F15C0A3141FA21580143FA215005C147E14 -FEA2495AA2495A495AA2495A495A133F495A49C7FC485A485A485A485A6C5A6C5A6C5A1B -3A729836>44 D<96267FFFE01670063FB616F80503B700E01401053F04FC14034CB91407 -040706C0130F043F06F0131F93B626FE000F01FC133F030303809026007FFE137F030F02 -FCC8390FFF80FF4B02E0030313C1037F91CA13E392B500FCEF3FF7020302F071B5FC4A4A -17074A0280834A91CB7E4A01FC844A498591B54885494A854988494A85495C93CD7E4988 -495B49885D90B51C7F5D481E3F485CA21F1F485CA2481E0F5D5AA21F075D5AA2F703F09C -C7FC5AA392D1FCA2B6FCB27EA281A37EA3F701F06CF603F881A37E816C1E0720F06C80A3 -6C6E1B0F6C1FE06F1B1F7F6F1CC06D1D3F6D6DF37F807F70F2FF006D6E626D6E19016D52 -5A6D6E4F5A6E6D190F6E01FE4F5A6E6D4F5A6E6E4E5A6E02E04D485A6E6E4D90C7FC0200 -02FCEF0FFE6F01FFEF3FFC031F02E0EEFFF06F02FC03075B0303DAFFC0023F1380030003 -FE0107B5C8FC043F91B712FC040718F0040118C0DC003F94C9FC050316F8DD003F1580DE -007F01F0CAFC757A75F78C>67 D76 D78 D<92383FFFF8020FB612E0027F15FC01 -03B87E010F17E04983499026E0007F13FCD97FFCC7000F7F496C02037F486D6E806F6D6C -7F86486E6E7F727F86848684866C5CA26C91C86C806D5A6D5A6D5AEB03C090CAFCA80507 -B6FC041FB7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800010F14C04991 -C7FC017F13FC90B512F04814C0485C4891C8FC485B485BA2485BA2485BA2B5FC5CA360A3 -60806C5FA26C6D153E6E5D6C05FC806C01FFDA03F8806C6ED90FF014FC6C02E090263FE0 -7FEBFFFC6C9128FC03FFC03F14FE6C91B61280013F4B487E010F4B1307010303F01301D9 -003F0280D9001F13FC020101F8CBFC57507ACE5E>97 D<903801FFFCB6FCA7C67E131F7F -B3AEF0FFFC050FEBFFE0057F14FE4CB77E040716E0041F16F84CD9007F13FEDCFFF00107 -7F03FD01C001018092B5C86C7F04FC6F7F04F06F7F4C6F7F4C6F7F4C6F7F93C9804B7014 -80A27414C0A21DE0A27513F0A21DF8A37513FCA51DFEAF1DFCA45113F8A31DF0A398B512 -E0A21DC0501480A26F4C1400705F62704B5B705F70033F5BDBF7F84B5BDBE3FE92B55A92 -26C1FF80010391C7FC038001E0011F5B9226007FFC90B55A4A011FB712F04A6D16C04A01 -0393C8FC4A010015F84A021F14C090C9000301F0C9FC5F797AF76C>I101 DI105 D<903801FFFCB6FCA7C67E131F7F -B3B3B3B3B3ADB812C0A72A7879F735>108 D<902601FFF891260FFFE093383FFF80B692 -B500FE0303B512F805036E6C020F14FE050F03E0023F6E7E053F03F891B712E04D6F4982 -9426FFF01F6D49D9C07F7F4CD900076D902707FC001F7FC66CDA07FC01019126801FF001 -077F011FDA0FF0EF3FC06DDA1FC06D6E48C76C7F4DDCE07E83043EC86C02F8804CEFE1F0 -04FC05F3844C60DBF9F06FD9F7C0804C6003FB06FF844C95C9FC15FF4C5FA393C95CA44B -60B3B3A7B8D8E003B8D8800FB712FEA7974E79CDA2>I<93381FFFE00303B6FC031F15E0 -92B712FC020316FF020F17C0023FD9FC0014F091B500C0010F13FC4991C700037F4901FC -02007F010F496F13C049496F7F49496F7F4B8149496F7F90B5C96C7F4886A24849707F48 -1B80A248497014C0A2481BE0A348497113F0A3481BF8A5B51AFCAE6C1BF8A46C1BF06E94 -B5FCA36C1BE0A26C6D4C14C0A26C1B806E5E6C1B006C6E4B5BA26C6E4B5B6D6D4B5B6D6D -4B5B6D6D4B5B6D6D92B55A6D01FF02035C6D02C0010F91C7FC010002FC90B512FC6E90B7 -5A021F17E00207178002014CC8FCDA003F15F0030392C9FCDB001F13E056507BCE61> -111 D<902601FFF8EB07FEB691383FFFC094B512F04C800407804C8093391FFC3FFF9326 -3FE07F1380C66C0380B512C0011F4A5A6DDAFC0114E0A2EDF9F816F015FB16E015FF4C6C -14C0A24C6D1380721300725A93C76C5AF001E095C8FCA25DA55DB3B3A4B812F8A7434E7A -CD4F>114 D<912603FFFCEB0780027F9039FFE00FC00103B6EAF83F010FEDFEFF013F92 -B5FC49EB00072601FFF01300480180141F4890C81207D80FFC8183484881123F49167F12 -7F183FA300FF171F7FA27F7F6DEE0F8002C092C7FC14F014FE6CEBFFF0EDFF8016FE6CED -FFE017FC6C16FF6C17C0846C17F86C836C836C6C826D17806D17C0010717E01301D9003F -16F0020716F8EC001F030015FC1607EE007F171F050713FE007C160100FE82187F7E183F -A2181F7FA26D17FCA27FA26DEE3FF87F19F06D167F6D17E06D6C15FF6E020313C002F04A -138002FC023F1300913AFFC003FFFE01E790B65A01C316F0010016C048013F92C7FC4801 -0714F80070D9007F90C8FC3F507ACE4C>I117 D121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%PaperSize: A4 - -%%EndSetup -%%Page: 1 1 -1 0 bop -30 1318 a Ft(CLN,)65 b(a)g(Class)h(Library)g(for)e(Num)-5 -b(b)5 b(ers)p -30 1418 3961 34 v -30 5068 a Fs(b)l(y)45 -b(Bruno)f(Haible)p -30 5141 3961 17 v eop -%%Page: 2 2 -2 1 bop -30 4017 a Fr(Cop)m(yrigh)m(t)422 4014 y(c)397 -4017 y Fq(\015)30 b Fr(Bruno)g(Haible)h(1995,)i(1996,)f(1997,)g(1998,)h -(1999,)f(2000.)-30 4371 y(Published)21 b(b)m(y)i(Bruno)f(Haible,)k -Fp()16 b Fr(and)23 b(Ric)m(hard)f(Krec)m(k)m -(el,)27 b Fp()p Fr(.)-30 4505 y(P)m(ermission)h(is)h -(gran)m(ted)h(to)g(mak)m(e)f(and)g(distribute)f(v)m(erbatim)h(copies)h -(of)f(this)g(man)m(ual)g(pro)m(vided)f(the)i(cop)m(yrigh)m(t)-30 -4615 y(notice)i(and)d(this)i(p)s(ermission)d(notice)k(are)e(preserv)m -(ed)g(on)h(all)g(copies.)-30 4749 y(P)m(ermission)g(is)i(gran)m(ted)g -(to)g(cop)m(y)g(and)e(distribute)h(mo)s(di\014ed)e(v)m(ersions)j(of)f -(this)h(man)m(ual)e(under)g(the)h(conditions)-30 4859 -y(for)d(v)m(erbatim)g(cop)m(ying,)i(pro)m(vided)e(that)h(the)f(en)m -(tire)i(resulting)e(deriv)m(ed)g(w)m(ork)h(is)f(distributed)g(under)e -(the)j(terms)-30 4969 y(of)h(a)f(p)s(ermission)f(notice)i(iden)m(tical) -h(to)g(this)e(one.)-30 5103 y(P)m(ermission)23 b(is)i(gran)m(ted)g(to)g -(cop)m(y)g(and)e(distribute)h(translations)h(of)g(this)f(man)m(ual)g -(in)m(to)h(another)f(language,)j(under)-30 5213 y(the)37 -b(ab)s(o)m(v)m(e)i(conditions)f(for)f(mo)s(di\014ed)e(v)m(ersions,)k -(except)f(that)g(this)f(p)s(ermission)f(notice)i(ma)m(y)f(b)s(e)g -(stated)h(in)f(a)-30 5322 y(translation)31 b(appro)m(v)m(ed)g(b)m(y)f -(the)h(author.)p eop -%%Page: 1 3 -1 2 bop -30 -116 a Fr(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2952 -b(1)-30 299 y Fo(1)80 b(In)l(tro)t(duction)-30 524 y -Fr(CLN)30 b(is)g(a)h(library)f(for)g(computations)g(with)g(all)i(kinds) -d(of)i(n)m(um)m(b)s(ers.)38 b(It)30 b(has)h(a)f(ric)m(h)h(set)g(of)f(n) -m(um)m(b)s(er)e(classes:)45 656 y Fq(\017)60 b Fr(In)m(tegers)31 -b(\(with)g(unlimited)e(precision\),)45 789 y Fq(\017)60 -b Fr(Rational)32 b(n)m(um)m(b)s(ers,)45 922 y Fq(\017)60 -b Fr(Floating-p)s(oin)m(t)33 b(n)m(um)m(b)s(ers:)199 -1054 y Fq(\000)60 b Fr(Short)30 b(\015oat,)199 1187 y -Fq(\000)60 b Fr(Single)31 b(\015oat,)199 1320 y Fq(\000)60 -b Fr(Double)31 b(\015oat,)199 1452 y Fq(\000)60 b Fr(Long)31 -b(\015oat)g(\(with)f(unlimited)f(precision\),)45 1585 -y Fq(\017)60 b Fr(Complex)29 b(n)m(um)m(b)s(ers,)45 1718 -y Fq(\017)60 b Fr(Mo)s(dular)30 b(in)m(tegers)i(\(in)m(tegers)g(mo)s -(dulo)c(a)j(\014xed)f(in)m(teger\),)45 1850 y Fq(\017)60 -b Fr(Univ)-5 b(ariate)32 b(p)s(olynomials.)-30 2006 y(The)g(subt)m(yp)s -(es)f(of)h(the)h(complex)f(n)m(um)m(b)s(ers)d(among)j(these)h(are)f -(exactly)i(the)f(t)m(yp)s(es)f(of)g(n)m(um)m(b)s(ers)e(kno)m(wn)i(to)h -(the)-30 2116 y(Common)26 b(Lisp)h(language.)42 b(Therefore)28 -b Fp(CLN)f Fr(can)i(b)s(e)e(used)h(for)g(Common)d(Lisp)j(implemen)m -(tations,)g(giving)h(`)p Fp(CLN)p Fr(')-30 2225 y(another)i(meaning:)40 -b(it)30 b(b)s(ecomes)g(an)g(abbreviation)h(of)g(\\Common)d(Lisp)i(Num)m -(b)s(ers".)-30 2358 y(The)g(CLN)g(pac)m(k)-5 b(age)32 -b(implemen)m(ts)45 2491 y Fq(\017)60 b Fr(Elemen)m(tary)30 -b(functions)g(\()p Fp(+)p Fr(,)h Fp(-)p Fr(,)f Fp(*)p -Fr(,)g Fp(/)p Fr(,)h Fp(sqrt)p Fr(,)e(comparisons,)35 -b(.)23 b(.)f(.)11 b(\),)45 2623 y Fq(\017)60 b Fr(Logical)32 -b(functions)e(\(logical)j Fp(and)p Fr(,)d Fp(or)p Fr(,)g -Fp(not)p Fr(,)35 b(.)23 b(.)f(.)11 b(\),)45 2756 y Fq(\017)60 -b Fr(T)-8 b(ranscenden)m(tal)48 b(functions)e(\(exp)s(onen)m(tial,)53 -b(logarithmic,)f(trigonometric,)g(h)m(yp)s(erb)s(olic)46 -b(functions)h(and)150 2866 y(their)30 b(in)m(v)m(erse)i(functions\).) --30 3021 y(CLN)e(is)g(a)h(C)p Fp(++)f Fr(library)-8 b(.)40 -b(Using)31 b(C)p Fp(++)e Fr(as)i(an)f(implemen)m(tation)g(language)i -(pro)m(vides)45 3154 y Fq(\017)60 b Fr(e\016ciency:)42 -b(it)31 b(compiles)f(to)h(mac)m(hine)f(co)s(de,)45 3287 -y Fq(\017)60 b Fr(t)m(yp)s(e)37 b(safet)m(y:)55 b(the)38 -b(C)p Fp(++)e Fr(compiler)g(kno)m(ws)h(ab)s(out)g(the)g(n)m(um)m(b)s -(er)e(t)m(yp)s(es)i(and)f(complains)g(if,)j(for)e(example,)150 -3396 y(y)m(ou)31 b(try)f(to)h(assign)g(a)g(\015oat)g(to)g(an)f(in)m -(teger)i(v)-5 b(ariable.)45 3529 y Fq(\017)60 b Fr(algebraic)32 -b(syn)m(tax:)41 b(Y)-8 b(ou)31 b(can)g(use)f(the)h Fp(+)p -Fr(,)f Fp(-)p Fr(,)g Fp(*)p Fr(,)g Fp(=)p Fr(,)h Fp(==)p -Fr(,)k(.)22 b(.)h(.)41 b(op)s(erators)31 b(as)f(in)h(C)e(or)i(C)p -Fp(++)p Fr(.)-30 3685 y(CLN)f(is)g(memory)f(e\016cien)m(t:)45 -3817 y Fq(\017)60 b Fr(Small)30 b(in)m(tegers)h(and)f(short)g(\015oats) -h(are)g(immediate,)e(not)i(heap)f(allo)s(cated.)45 3950 -y Fq(\017)60 b Fr(Heap-allo)s(cated)30 b(memory)25 b(is)i(reclaimed)g -(through)f(an)h(automatic,)h(non-in)m(terruptiv)m(e)g(garbage)g -(collection.)-30 4106 y(CLN)i(is)g(sp)s(eed)g(e\016cien)m(t:)45 -4238 y Fq(\017)60 b Fr(The)31 b(k)m(ernel)h(of)f(CLN)g(has)g(b)s(een)g -(written)g(in)g(assem)m(bly)g(language)i(for)e(some)g(CPUs)f(\()p -Fp(i386)p Fr(,)h Fp(m68k)p Fr(,)g Fp(sparc)p Fr(,)150 -4348 y Fp(mips)p Fr(,)e Fp(arm)p Fr(\).)45 4481 y Fq(\017)60 -b Fr(On)38 b(all)h(CPUs,)h(CLN)e(ma)m(y)g(b)s(e)g(con\014gured)g(to)h -(use)f(the)g(sup)s(ere\016cien)m(t)h(lo)m(w-lev)m(el)i(routines)d(from) -f(GNU)150 4590 y(GMP)31 b(v)m(ersion)g(3.)45 4723 y Fq(\017)60 -b Fr(It)21 b(uses)g(Karatsuba)g(m)m(ultiplication,)j(whic)m(h)c(is)i -(signi\014can)m(tly)g(faster)f(for)g(large)h(n)m(um)m(b)s(ers)d(than)i -(the)g(standard)150 4832 y(m)m(ultiplication)31 b(algorithm.)45 -4965 y Fq(\017)60 b Fr(F)-8 b(or)61 b(v)m(ery)f(large)h(n)m(um)m(b)s -(ers)d(\(more)h(than)h(12000)i(decimal)e(digits\),)69 -b(it)60 b(uses)g(Sc)m(h\177)-45 b(onhage-Strassen)150 -5075 y(m)m(ultiplication,)33 b(whic)m(h)e(is)g(an)g(asymptotically)i -(optimal)e(m)m(ultiplication)h(algorithm,)g(for)f(m)m(ultiplication,) -150 5184 y(division)f(and)g(radix)g(con)m(v)m(ersion.)-30 -5340 y(CLN)g(aims)g(at)h(b)s(eing)f(easily)h(in)m(tegrated)h(in)m(to)g -(larger)f(soft)m(w)m(are)g(pac)m(k)-5 b(ages:)p eop -%%Page: 2 4 -2 3 bop -30 -116 a Fr(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2952 -b(2)45 299 y Fq(\017)60 b Fr(The)30 b(garbage)i(collection)h(imp)s -(oses)28 b(no)j(burden)d(on)i(the)h(main)e(application.)45 -433 y Fq(\017)60 b Fr(The)30 b(library)g(pro)m(vides)g(ho)s(oks)g(for)g -(memory)f(allo)s(cation)j(and)e(exceptions.)45 568 y -Fq(\017)60 b Fr(All)31 b(non-macro)f(iden)m(ti\014ers)g(are)h(hidden)e -(in)h(namespace)g Fp(cln)g Fr(in)g(order)f(to)j(a)m(v)m(oid)f(name)f -(clashes.)p eop -%%Page: 3 5 -3 4 bop -30 -116 a Fr(Chapter)30 b(2:)41 b(Installation)2999 -b(3)-30 299 y Fo(2)80 b(Installation)-30 526 y Fr(This)30 -b(section)h(describ)s(es)f(ho)m(w)g(to)h(install)g(the)g(CLN)f(pac)m(k) --5 b(age)32 b(on)f(y)m(our)f(system.)-30 779 y Fs(2.1)68 -b(Prerequisites)-30 1057 y Fn(2.1.1)63 b(C)p Fm(++)40 -b Fn(compiler)-30 1248 y Fr(T)-8 b(o)36 b(build)e(CLN,)g(y)m(ou)i(need) -f(a)g(C)p Fp(++)f Fr(compiler.)54 b(Actually)-8 b(,)39 -b(y)m(ou)c(need)g(GNU)h Fp(g++)29 b(2.90)34 b Fr(or)h(new)m(er,)h(the)g -(EGCS)-30 1358 y(compilers)30 b(will)h(do.)40 b(I)30 -b(recommend)e(GNU)j Fp(g++)f(2.95)f Fr(or)h(new)m(er.)-30 -1491 y(The)h(follo)m(wing)j(C)p Fp(++)d Fr(features)h(are)g(used:)43 -b(classes,)33 b(mem)m(b)s(er)c(functions,)k(o)m(v)m(erloading)h(of)e -(functions)f(and)g(op)s(er-)-30 1600 y(ators,)g(constructors)g(and)f -(destructors,)g(inline,)h(const,)g(m)m(ultiple)f(inheritance,)h -(templates)g(and)f(namespaces.)-30 1733 y(The)g(follo)m(wing)i(C)p -Fp(++)d Fr(features)i(are)g(not)f(used:)40 b Fp(new)p -Fr(,)30 b Fp(delete)p Fr(,)f(virtual)h(inheritance,)i(exceptions.)-30 -1866 y(CLN)23 b(relies)h(on)g(semi-automatic)f(ordering)h(of)f -(initializations)j(of)e(static)h(and)e(global)i(v)-5 -b(ariables,)25 b(a)f(feature)g(whic)m(h)-30 1976 y(I)30 -b(could)h(implemen)m(t)e(for)h(GNU)h(g)p Fp(++)f Fr(only)-8 -b(.)-30 2196 y Fn(2.1.2)63 b(Mak)m(e)40 b(utilit)m(y)-30 -2387 y Fr(T)-8 b(o)31 b(build)e(CLN,)h(y)m(ou)h(also)g(need)g(to)g(ha)m -(v)m(e)g(GNU)g Fp(make)e Fr(installed.)-30 2607 y Fn(2.1.3)63 -b(Sed)41 b(utilit)m(y)-30 2798 y Fr(T)-8 b(o)39 b(build)e(CLN)h(on)g -(HP-UX,)h(y)m(ou)g(also)g(need)f(to)h(ha)m(v)m(e)g(GNU)g -Fp(sed)e Fr(installed.)66 b(This)37 b(is)h(b)s(ecause)h(the)f(libto)s -(ol)-30 2907 y(script,)29 b(whic)m(h)g(creates)h(the)e(CLN)h(library)-8 -b(,)29 b(relies)g(on)g Fp(sed)p Fr(,)f(and)g(the)h(v)m(endor's)g -Fp(sed)f Fr(utilit)m(y)i(on)e(these)h(systems)f(is)-30 -3017 y(to)s(o)j(limited.)-30 3270 y Fs(2.2)68 b(Building)45 -b(the)g(library)-30 3461 y Fr(As)30 b(with)g(an)m(y)h(auto)s -(con\014guring)f(GNU)h(soft)m(w)m(are,)h(installation)h(is)d(as)h(easy) -g(as)f(this:)210 3589 y Fp($)47 b(./configure)210 3692 -y($)g(make)210 3796 y($)g(make)g(check)-30 3929 y Fr(If)30 -b(on)g(y)m(our)g(system,)g(`)p Fp(make)p Fr(')g(is)g(not)h(GNU)g -Fp(make)p Fr(,)e(y)m(ou)i(ha)m(v)m(e)h(to)f(use)f(`)p -Fp(gmake)p Fr(')f(instead)i(of)g(`)p Fp(make)p Fr(')e(ab)s(o)m(v)m(e.) --30 4062 y(The)39 b Fp(configure)d Fr(command)h(c)m(hec)m(ks)k(out)e -(some)g(features)g(of)h(y)m(our)f(system)f(and)h(C)p -Fp(++)f Fr(compiler)h(and)f(builds)-30 4172 y(the)i Fp(Makefile)p -Fr(s.)66 b(The)39 b Fp(make)f Fr(command)g(builds)g(the)i(library)-8 -b(.)68 b(This)39 b(step)h(ma)m(y)f(tak)m(e)i(4)f(hours)e(on)i(an)f(a)m -(v)m(er-)-30 4281 y(age)d(w)m(orkstation.)57 b(The)35 -b Fp(make)29 b(check)34 b Fr(runs)f(some)i(test)h(to)g(c)m(hec)m(k)g -(that)g(no)f(imp)s(ortan)m(t)g(subroutine)f(has)h(b)s(een)-30 -4391 y(miscompiled.)-30 4524 y(The)30 b Fp(configure)e -Fr(command)g(accepts)k(options.)41 b(T)-8 b(o)30 b(get)i(a)f(summary)c -(of)j(them,)g(try)210 4651 y Fp($)47 b(./configure)e(--help)-30 -4784 y Fr(Some)29 b(of)i(the)g(options)f(are)h(explained)g(in)f(detail) -h(in)f(the)h(`)p Fp(INSTALL.generic)p Fr(')26 b(\014le.)-30 -4917 y(Y)-8 b(ou)21 b(can)g(sp)s(ecify)f(the)g(C)g(compiler,)i(the)f(C) -p Fp(++)e Fr(compiler)h(and)g(their)g(options)h(through)f(the)g(follo)m -(wing)i(en)m(vironmen)m(t)-30 5027 y(v)-5 b(ariables)31 -b(when)e(running)g Fp(configure)p Fr(:)-30 5183 y Fp(CC)384 -b Fr(Sp)s(eci\014es)30 b(the)g(C)g(compiler.)-30 5340 -y Fp(CFLAGS)192 b Fr(Flags)32 b(to)f(b)s(e)f(giv)m(en)h(to)g(the)g(C)f -(compiler)f(when)h(compiling)g(programs)f(\(not)i(when)e(linking\).)p -eop -%%Page: 4 6 -4 5 bop -30 -116 a Fr(Chapter)30 b(2:)41 b(Installation)2999 -b(4)-30 299 y Fp(CXX)336 b Fr(Sp)s(eci\014es)30 b(the)g(C)p -Fp(++)g Fr(compiler.)-30 452 y Fp(CXXFLAGS)96 b Fr(Flags)32 -b(to)f(b)s(e)f(giv)m(en)h(to)g(the)g(C)p Fp(++)e Fr(compiler)h(when)f -(compiling)h(programs)f(\(not)i(when)f(linking\).)-30 -604 y(Examples:)210 730 y Fp($)47 b(CC="gcc")f(CFLAGS="-O")f(CXX="g++") -g(CXXFLAGS="-O")f(./configure)210 834 y($)j(CC="gcc)f(-V)h -(egcs-2.91.60")e(CFLAGS="-O)g(-g")i(\\)305 937 y(CXX="g++)f(-V)h -(egcs-2.91.60")d(CXXFLAGS="-O)h(-g")i(./configure)210 -1041 y($)g(CC="gcc)f(-V)h(2.95.2")f(CFLAGS="-O2)f(-fno-exceptions")e -(\\)305 1145 y(CXX="g++)j(-V)h(2.95.2")f(CFLAGS="-O2)f -(-fno-exceptions")e(./configure)-30 1276 y Fr(Note)32 -b(that)g(for)e(these)i(en)m(vironmen)m(t)e(v)-5 b(ariables)32 -b(to)f(tak)m(e)i(e\013ect,)g(y)m(ou)e(ha)m(v)m(e)h(to)f(set)h(them)e -(\(assuming)g(a)h(Bourne-)-30 1386 y(compatible)i(shell\))g(on)g(the)g -(same)f(line)h(as)g(the)g Fp(configure)d Fr(command.)46 -b(If)32 b(y)m(ou)h(made)f(the)h(settings)h(in)e(earlier)-30 -1495 y(shell)g(commands,)e(y)m(ou)i(ha)m(v)m(e)h(to)g -Fp(export)d Fr(the)i(en)m(vironmen)m(t)f(v)-5 b(ariables)33 -b(b)s(efore)e(calling)i Fp(configure)p Fr(.)43 b(In)31 -b(a)h Fp(csh)-30 1605 y Fr(shell,)f(y)m(ou)g(ha)m(v)m(e)g(to)g(use)f -(the)h(`)p Fp(setenv)p Fr(')e(command)f(for)i(setting)i(eac)m(h)f(of)g -(the)f(en)m(vironmen)m(t)g(v)-5 b(ariables.)-30 1736 -y(Curren)m(tly)25 b(CLN)g(w)m(orks)h(only)g(with)f(the)h(GNU)g -Fp(g++)f Fr(compiler,)i(and)e(only)g(in)h(optimizing)g(mo)s(de.)37 -b(So)26 b(y)m(ou)g(should)-30 1846 y(sp)s(ecify)33 b(at)i(least)g -Fp(-O)e Fr(in)h(the)g(CXXFLA)m(GS,)g(or)g(no)g(CXXFLA)m(GS)g(at)h(all.) -52 b(\(If)34 b(CXXFLA)m(GS)g(is)g(not)g(set,)h(CLN)-30 -1955 y(will)c(use)f Fp(-O)p Fr(.\))-30 2086 y(If)44 b(y)m(ou)h(use)f -Fp(g++)g Fr(v)m(ersion)h(2.8.x)h(or)e(egcs-2.91.x)k(\(a.k.a.)85 -b(egcs-1.1\))47 b(or)e(gcc-2.95.x,)52 b(I)44 b(recommend)e(adding)-30 -2196 y(`)p Fp(-fno-exceptions)p Fr(')27 b(to)k(the)f(CXXFLA)m(GS.)i -(This)d(will)i(lik)m(ely)h(generate)g(b)s(etter)e(co)s(de.)-30 -2327 y(If)37 b(y)m(ou)g(use)g Fp(g++)g Fr(v)m(ersion)g(egcs-2.91.x)k -(\(egcs-1.1\))f(or)e(gcc-2.95.x)i(on)d(Sparc,)i(add)e(either)g(`)p -Fp(-O)p Fr(',)i(`)p Fp(-O1)p Fr(')e(or)h(`)p Fp(-O2)-30 -2437 y(-fno-schedule-insns)p Fr(')26 b(to)32 b(the)f(CXXFLA)m(GS.)h -(With)g(full)f(`)p Fp(-O2)p Fr(',)g Fp(g++)f Fr(miscompiles)g(the)i -(division)f(routines.)-30 2546 y(Also,)41 b(if)e(y)m(ou)g(ha)m(v)m(e)g -Fp(g++)f Fr(v)m(ersion)h(egcs-1.1.1)j(or)c(older)h(on)f(Sparc,)j(y)m -(ou)d(m)m(ust)g(sp)s(ecify)g(`)p Fp(--disable-shared)p -Fr(')-30 2656 y(b)s(ecause)30 b Fp(g++)g Fr(w)m(ould)g(miscompile)f -(parts)h(of)h(the)f(library)-8 b(.)-30 2787 y(By)32 b(default,)g(b)s -(oth)f(a)h(shared)e(and)h(a)h(static)h(library)e(are)h(built.)44 -b(Y)-8 b(ou)32 b(can)g(build)f(CLN)g(as)g(a)h(static)h(\(or)f(shared\)) --30 2897 y(library)k(only)-8 b(,)38 b(b)m(y)f(calling)g -Fp(configure)d Fr(with)i(the)h(option)f(`)p Fp(--disable-shared)p -Fr(')d(\(or)j(`)p Fp(--disable-static)p Fr('\).)-30 3006 -y(While)f(shared)e(libraries)g(are)i(usually)e(more)g(con)m(v)m(enien)m -(t)j(to)e(use,)h(they)f(ma)m(y)f(not)h(w)m(ork)g(on)g(all)g(arc)m -(hitectures.)-30 3116 y(T)-8 b(ry)32 b(disabling)g(them)g(if)g(y)m(ou)h -(run)d(in)m(to)k(link)m(er)e(problems.)45 b(Also,)34 -b(they)f(are)f(generally)i(somewhat)e(slo)m(w)m(er)h(than)-30 -3225 y(static)f(libraries)e(so)h(run)m(time-critical)h(applications)f -(should)e(b)s(e)h(link)m(ed)h(statically)-8 b(.)-30 3440 -y Fn(2.2.1)63 b(Using)42 b(the)f(GNU)g(MP)h(Library)-30 -3629 y Fr(Starting)32 b(with)f(v)m(ersion)g(1.1,)i(CLN)e(ma)m(y)g(b)s -(e)f(con\014gured)h(to)h(mak)m(e)f(use)g(of)g(a)h(preinstalled)f -Fp(gmp)g Fr(library)-8 b(.)43 b(Please)-30 3738 y(mak)m(e)d(sure)f -(that)h(y)m(ou)g(ha)m(v)m(e)h(at)f(least)h Fp(gmp)e Fr(v)m(ersion)h -(3.0)h(installed)f(since)g(earlier)h(v)m(ersions)f(are)g(unsupp)s -(orted)-30 3848 y(and)30 b(lik)m(ely)i(not)f(to)h(w)m(ork.)41 -b(Enabling)31 b(this)f(feature)h(b)m(y)g(calling)h Fp(configure)c -Fr(with)j(the)f(option)i(`)p Fp(--with-gmp)p Fr(')c(is)-30 -3958 y(kno)m(wn)i(to)h(b)s(e)f(quite)h(a)f(b)s(o)s(ost)g(for)g(CLN's)g -(p)s(erformance.)-30 4089 y(If)35 b(y)m(ou)g(ha)m(v)m(e)i(installed)f -(the)f Fp(gmp)f Fr(library)h(and)f(its)i(header)f(\014le)g(in)g(some)g -(place)h(where)e(y)m(our)i(compiler)e(cannot)-30 4198 -y(\014nd)27 b(it)j(b)m(y)f(default,)h(y)m(ou)f(m)m(ust)f(help)h -Fp(configure)d Fr(b)m(y)j(setting)h Fp(CPPFLAGS)d Fr(and)h -Fp(LDFLAGS)p Fr(.)38 b(Here)30 b(is)f(an)g(example:)210 -4324 y Fp($)47 b(CC="gcc")f(CFLAGS="-O2")e(CXX="g++")i(CXXFLAGS="-O2)e -(-fno-exceptions")f(\\)305 4428 y(CPPFLAGS="-I/opt/gmp/inclu)o(de")e -(LDFLAGS="-L/opt/gmp/lib")g(./configure)k(--with-gmp)-30 -4675 y Fs(2.3)68 b(Installing)47 b(the)e(library)-30 -4864 y Fr(As)30 b(with)g(an)m(y)h(auto)s(con\014guring)f(GNU)h(soft)m -(w)m(are,)h(installation)h(is)d(as)h(easy)g(as)f(this:)210 -4990 y Fp($)47 b(make)g(install)-30 5121 y Fr(The)66 -b(`)p Fp(make)30 b(install)p Fr(')65 b(command)f(installs)k(the)f -(library)f(and)h(the)g(include)f(\014les)h(in)m(to)h(public)e(places) --30 5230 y(\(`)p Fp(/usr/local/lib/)p Fr(')41 b(and)j(`)p -Fp(/usr/local/include/)p Fr(',)f(if)i(y)m(ou)g(ha)m(v)m(en't)g(sp)s -(eci\014ed)f(a)h Fp(--prefix)d Fr(option)j(to)-30 5340 -y Fp(configure)p Fr(\).)39 b(This)29 b(step)i(ma)m(y)f(require)g(sup)s -(eruser)e(privileges.)p eop -%%Page: 5 7 -5 6 bop -30 -116 a Fr(Chapter)30 b(2:)41 b(Installation)2999 -b(5)-30 299 y(If)42 b(y)m(ou)g(ha)m(v)m(e)i(already)f(built)f(the)g -(library)g(and)g(wish)f(to)i(install)g(it,)j(but)c(didn't)f(sp)s(ecify) -h Fp(--prefix=...)d Fr(at)-30 408 y(con\014gure)j(time,)k(just)c -(re-run)f Fp(configure)p Fr(,)i(giving)h(it)f(the)g(same)f(options)g -(as)h(the)g(\014rst)f(time,)j(plus)d(the)h Fp(--)-30 -518 y(prefix=...)28 b Fr(option.)-30 775 y Fs(2.4)68 -b(Cleaning)46 b(up)-30 968 y Fr(Y)-8 b(ou)31 b(can)g(remo)m(v)m(e)f -(system-dep)s(enden)m(t)f(\014les)i(generated)g(b)m(y)f -Fp(make)f Fr(through)210 1097 y Fp($)47 b(make)g(clean)-30 -1231 y Fr(Y)-8 b(ou)31 b(can)g(remo)m(v)m(e)f(all)i(\014les)e -(generated)h(b)m(y)g Fp(make)p Fr(,)e(th)m(us)h(rev)m(erting)h(to)h(a)e -(virgin)h(distribution)e(of)i(CLN,)f(through)210 1360 -y Fp($)47 b(make)g(distclean)p eop -%%Page: 6 8 -6 7 bop -30 -116 a Fr(Chapter)30 b(3:)41 b(Ordinary)29 -b(n)m(um)m(b)s(er)f(t)m(yp)s(es)2517 b(6)-30 299 y Fo(3)80 -b(Ordinary)55 b(n)l(um)l(b)t(er)c(t)l(yp)t(es)-30 539 -y Fr(CLN)30 b(implemen)m(ts)f(the)h(follo)m(wing)i(class)f(hierarc)m(h) -m(y:)1355 670 y Fp(Number)1260 773 y(cl_number)1165 877 -y()1451 981 y(|)1451 1085 y(|)1021 1189 -y(Real)47 b(or)g(complex)f(number)1355 1292 y(cl_N)1165 -1396 y()1451 1500 y(|)1451 1604 y(|)1212 -1707 y(Real)h(number)1355 1811 y(cl_R)1212 1915 y()1451 -2019 y(|)496 2123 y(+-------------------+-----)o(---)o(----)o(----)o -(---)o(+)496 2226 y(|)1861 b(|)210 2330 y(Rational)46 -b(number)1000 b(Floating-point)44 b(number)401 2434 y(cl_RA)1669 -b(cl_F)210 2538 y()1189 b()496 -2641 y(|)1861 b(|)496 2745 y(|)764 b(+--------------+-------)o(----)o -(---+)o(---)o(----)o(----)o(---)o(+)353 2849 y(Integer)619 -b(|)668 b(|)g(|)f(|)401 2953 y(cl_I)476 b(Short-Float)188 -b(Single-Float)140 b(Double-Float)188 b(Long-Float)210 -3057 y()282 b(cl_SF)476 b(cl_FF)g(cl_DF)g(cl_LF)1021 -3160 y()44 b()g()g -()-30 3297 y Fr(The)28 b(base)h(class)h -Fp(cl_number)c Fr(is)j(an)g(abstract)g(base)g(class.)41 -b(It)29 b(is)g(not)g(useful)f(to)i(declare)f(a)h(v)-5 -b(ariable)29 b(of)g(this)g(t)m(yp)s(e)-30 3406 y(except)g(if)f(y)m(ou)g -(w)m(an)m(t)h(to)g(completely)f(disable)g(compile-time)g(t)m(yp)s(e)h -(c)m(hec)m(king)g(and)f(use)f(run-time)g(t)m(yp)s(e)h(c)m(hec)m(king) --30 3516 y(instead.)-30 3653 y(The)h(class)i Fp(cl_N)d -Fr(comprises)h(real)h(and)f(complex)g(n)m(um)m(b)s(ers.)39 -b(There)29 b(is)g(no)h(sp)s(ecial)g(class)h(for)e(complex)g(n)m(um)m(b) -s(ers)-30 3762 y(since)i(complex)f(n)m(um)m(b)s(ers)e(with)i(imaginary) -g(part)g Fp(0)g Fr(are)h(automatically)h(con)m(v)m(erted)g(to)f(real)g -(n)m(um)m(b)s(ers.)-30 3899 y(The)f(class)h Fp(cl_R)e -Fr(comprises)h(real)h(n)m(um)m(b)s(ers)d(of)i(di\013eren)m(t)h(kinds.) -40 b(It)30 b(is)h(an)f(abstract)h(class.)-30 4035 y(The)37 -b(class)g Fp(cl_RA)f Fr(comprises)g(exact)j(real)f(n)m(um)m(b)s(ers:)51 -b(rational)39 b(n)m(um)m(b)s(ers,)d(including)h(in)m(tegers.)62 -b(There)37 b(is)g(no)-30 4145 y(sp)s(ecial)31 b(class)f(for)g(non-in)m -(tegral)i(rational)f(n)m(um)m(b)s(ers)d(since)i(rational)h(n)m(um)m(b)s -(ers)d(with)i(denominator)f Fp(1)h Fr(are)g(auto-)-30 -4254 y(matically)h(con)m(v)m(erted)h(to)f(in)m(tegers.)-30 -4391 y(The)f(class)h Fp(cl_F)e Fr(implemen)m(ts)g(\015oating-p)s(oin)m -(t)j(appro)m(ximations)e(to)h(real)g(n)m(um)m(b)s(ers.)38 -b(It)31 b(is)f(an)g(abstract)i(class.)-30 4653 y Fs(3.1)68 -b(Exact)46 b(n)l(um)l(b)t(ers)-30 4848 y Fr(Some)24 b(n)m(um)m(b)s(ers) -f(are)j(represen)m(ted)g(as)f(exact)i(n)m(um)m(b)s(ers:)36 -b(there)26 b(is)f(no)h(loss)f(of)h(information)f(when)f(suc)m(h)h(a)h -(n)m(um)m(b)s(er)-30 4957 y(is)43 b(con)m(v)m(erted)i(from)d(its)h -(mathematical)h(v)-5 b(alue)44 b(to)g(its)f(in)m(ternal)h(represen)m -(tation.)80 b(On)43 b(exact)i(n)m(um)m(b)s(ers,)f(the)-30 -5067 y(elemen)m(tary)31 b(op)s(erations)g(\()p Fp(+)p -Fr(,)f Fp(-)p Fr(,)g Fp(*)p Fr(,)h Fp(/)p Fr(,)f(comparisons,)35 -b(.)23 b(.)f(.)11 b(\))31 b(compute)e(the)i(completely)g(correct)h -(result.)-30 5203 y(In)e(CLN,)g(the)g(exact)i(n)m(um)m(b)s(ers)c(are:) -45 5340 y Fq(\017)60 b Fr(rational)32 b(n)m(um)m(b)s(ers)c(\(including) -i(in)m(tegers\),)p eop -%%Page: 7 9 -7 8 bop -30 -116 a Fr(Chapter)30 b(3:)41 b(Ordinary)29 -b(n)m(um)m(b)s(er)f(t)m(yp)s(es)2517 b(7)45 299 y Fq(\017)60 -b Fr(complex)30 b(n)m(um)m(b)s(ers)e(whose)i(real)h(and)f(imaginary)g -(parts)g(are)h(b)s(oth)e(rational)j(n)m(um)m(b)s(ers.)-30 -463 y(Rational)g(n)m(um)m(b)s(ers)27 b(are)k(alw)m(a)m(ys)h(normalized) -e(to)g(the)h(form)e Fl(n)m(umerator)7 b Fp(/)p Fl(denominator)34 -b Fr(where)29 b(the)i(n)m(umerator)-30 573 y(and)c(denominator)h(are)g -(coprime)f(in)m(tegers)j(and)d(the)h(denominator)g(is)g(p)s(ositiv)m -(e.)41 b(If)27 b(the)i(resulting)f(denominator)-30 682 -y(is)i Fp(1)p Fr(,)h(the)f(rational)i(n)m(um)m(b)s(er)c(is)i(con)m(v)m -(erted)i(to)f(an)g(in)m(teger.)-30 820 y(Small)g(in)m(tegers)i(\(t)m -(ypically)h(in)d(the)h(range)g Fp(-2^30)6 b Fr(.)20 b(.)j(.)11 -b Fp(2^30-1)p Fr(,)30 b(for)i(32-bit)h(mac)m(hines\))e(are)h(esp)s -(ecially)h(e\016cien)m(t,)-30 930 y(b)s(ecause)e(they)g(consume)f(no)h -(heap)g(allo)s(cation.)45 b(Otherwise)31 b(the)g(distinction)h(b)s(et)m -(w)m(een)g(these)g(immediate)e(in)m(te-)-30 1039 y(gers)h(\(called)h -(\\\014xn)m(ums"\))d(and)g(heap)i(allo)s(cated)h(in)m(tegers)g -(\(called)g(\\bign)m(ums"\))d(is)i(completely)g(transparen)m(t.)-30 -1305 y Fs(3.2)68 b(Floating-p)t(oin)l(t)46 b(n)l(um)l(b)t(ers)-30 -1501 y Fr(Not)41 b(all)f(real)h(n)m(um)m(b)s(ers)c(can)j(b)s(e)f -(represen)m(ted)h(exactly)-8 b(.)71 b(\(There)40 b(is)g(an)g(easy)g -(mathematical)g(pro)s(of)f(for)h(this:)-30 1611 y(Only)34 -b(a)i(coun)m(table)g(set)f(of)g(n)m(um)m(b)s(ers)e(can)i(b)s(e)f -(stored)h(exactly)i(in)d(a)i(computer,)f(ev)m(en)g(if)g(one)g(assumes)f -(that)h(it)-30 1720 y(has)f(unlimited)g(storage.)54 b(But)35 -b(there)g(are)g(uncoun)m(tably)f(man)m(y)g(real)h(n)m(um)m(b)s(ers.\)) -51 b(So)34 b(some)g(appro)m(ximation)h(is)-30 1830 y(needed.)40 -b(CLN)30 b(implemen)m(ts)f(ordinary)h(\015oating-p)s(oin)m(t)h(n)m(um)m -(b)s(ers,)e(with)h(man)m(tissa)g(and)g(exp)s(onen)m(t.)-30 -1968 y(The)e(elemen)m(tary)i(op)s(erations)f(\()p Fp(+)p -Fr(,)h Fp(-)p Fr(,)f Fp(*)p Fr(,)g Fp(/)p Fr(,)35 b(.)22 -b(.)h(.)11 b(\))29 b(only)g(return)f(appro)m(ximate)h(results.)40 -b(F)-8 b(or)30 b(example,)f(the)g(v)-5 b(alue)-30 2077 -y(of)36 b(the)g(expression)f Fp(\(cl_F\))29 b(0.3)g(+)i(\(cl_F\))d(0.4) -35 b Fr(prin)m(ts)g(as)h(`)p Fp(0.70000005)p Fr(',)f(not)h(as)g(`)p -Fp(0.7)p Fr('.)57 b(Rounding)34 b(errors)-30 2187 y(lik)m(e)e(this)e -(one)h(are)f(inevitable)i(when)d(computing)h(with)g(\015oating-p)s(oin) -m(t)i(n)m(um)m(b)s(ers.)-30 2325 y(Nev)m(ertheless,)46 -b(CLN)40 b(rounds)g(the)h(\015oating-p)s(oin)m(t)h(results)f(of)h(the)f -(op)s(erations)g Fp(+)p Fr(,)j Fp(-)p Fr(,)g Fp(*)p Fr(,)f -Fp(/)p Fr(,)h Fp(sqrt)c Fr(according)-30 2434 y(to)c(the)f -(\\round-to-ev)m(en")h(rule:)50 b(It)35 b(\014rst)f(computes)g(the)h -(exact)h(mathematical)f(result)g(and)g(then)f(returns)g(the)-30 -2544 y(\015oating-p)s(oin)m(t)26 b(n)m(um)m(b)s(er)c(whic)m(h)j(is)f -(nearest)h(to)h(this.)38 b(If)25 b(t)m(w)m(o)h(\015oating-p)s(oin)m(t)g -(n)m(um)m(b)s(ers)c(are)j(equally)g(distan)m(t)g(from)-30 -2653 y(the)31 b(ideal)g(result,)f(the)h(one)g(with)f(a)g -Fp(0)g Fr(in)g(its)h(least)h(signi\014can)m(t)f(man)m(tissa)f(bit)h(is) -f(c)m(hosen.)-30 2791 y(Similarly)-8 b(,)26 b(testing)h(\015oating)f(p) -s(oin)m(t)f(n)m(um)m(b)s(ers)e(for)i(equalit)m(y)i(`)p -Fp(x)j(==)g(y)p Fr(')25 b(is)g(gam)m(bling)h(with)f(random)e(errors.)38 -b(Better)-30 2901 y(c)m(hec)m(k)32 b(for)e(`)p Fp(abs\(x)f(-)h(y\))g(<) -g(epsilon)p Fr(')f(for)h(some)g(w)m(ell-c)m(hosen)i Fp(epsilon)p -Fr(.)-30 3039 y(Floating)g(p)s(oin)m(t)f(n)m(um)m(b)s(ers)d(come)i(in)g -(four)g(\015a)m(v)m(ors:)45 3176 y Fq(\017)60 b Fr(Short)28 -b(\015oats,)i(t)m(yp)s(e)g Fp(cl_SF)p Fr(.)38 b(They)29 -b(ha)m(v)m(e)h(1)f(sign)g(bit,)h(8)f(exp)s(onen)m(t)g(bits)g -(\(including)g(the)g(exp)s(onen)m(t's)g(sign\),)150 3286 -y(and)h(17)h(man)m(tissa)f(bits)h(\(including)f(the)g(\\hidden")g -(bit\).)41 b(They)30 b(don't)h(consume)e(heap)h(allo)s(cation.)45 -3422 y Fq(\017)60 b Fr(Single)43 b(\015oats,)k(t)m(yp)s(e)c -Fp(cl_FF)p Fr(.)78 b(They)42 b(ha)m(v)m(e)i(1)g(sign)f(bit,)j(8)e(exp)s -(onen)m(t)f(bits)g(\(including)g(the)g(exp)s(onen)m(t's)150 -3532 y(sign\),)29 b(and)e(24)i(man)m(tissa)e(bits)h(\(including)g(the)g -(\\hidden")f(bit\).)40 b(In)27 b(CLN,)h(they)g(are)g(represen)m(ted)g -(as)g(IEEE)150 3641 y(single-precision)k(\015oating)f(p)s(oin)m(t)f(n)m -(um)m(b)s(ers.)39 b(This)29 b(corresp)s(onds)g(closely)j(to)f(the)g -(C/C)p Fp(++)e Fr(t)m(yp)s(e)i(`)p Fp(float)p Fr('.)45 -3777 y Fq(\017)60 b Fr(Double)38 b(\015oats,)i(t)m(yp)s(e)e -Fp(cl_DF)p Fr(.)61 b(They)37 b(ha)m(v)m(e)i(1)f(sign)f(bit,)j(11)e(exp) -s(onen)m(t)g(bits)g(\(including)f(the)h(exp)s(onen)m(t's)150 -3887 y(sign\),)29 b(and)e(53)i(man)m(tissa)e(bits)h(\(including)g(the)g -(\\hidden")f(bit\).)40 b(In)27 b(CLN,)h(they)g(are)g(represen)m(ted)g -(as)g(IEEE)150 3997 y(double-precision)i(\015oating)i(p)s(oin)m(t)e(n)m -(um)m(b)s(ers.)38 b(This)30 b(corresp)s(onds)f(closely)j(to)f(the)g -(C/C)p Fp(++)e Fr(t)m(yp)s(e)i(`)p Fp(double)p Fr('.)45 -4133 y Fq(\017)60 b Fr(Long)27 b(\015oats,)i(t)m(yp)s(e)e -Fp(cl_LF)p Fr(.)38 b(They)27 b(ha)m(v)m(e)h(1)g(sign)f(bit,)h(32)g(exp) -s(onen)m(t)f(bits)g(\(including)g(the)g(exp)s(onen)m(t's)g(sign\),)150 -4242 y(and)k(n)g(man)m(tissa)g(bits)h(\(including)f(the)h(\\hidden")f -(bit\),)i(where)e(n)g Fp(>)p Fr(=)g(64.)45 b(The)31 b(precision)g(of)h -(a)g(long)g(\015oat)150 4352 y(is)e(unlimited,)g(but)f(once)i(created,) -h(a)f(long)g(\015oat)g(has)f(a)h(\014xed)f(precision.)40 -b(\(No)32 b(\\lazy)g(recomputation".\))-30 4516 y(Of)f(course,)i -(computations)e(with)h(long)g(\015oats)h(are)f(more)f(exp)s(ensiv)m(e)h -(than)f(those)i(with)e(smaller)h(\015oating-p)s(oin)m(t)-30 -4626 y(formats.)-30 4764 y(CLN)44 b(do)s(es)g(not)h(implemen)m(t)f -(features)g(lik)m(e)i(NaNs,)j(denormalized)44 b(n)m(um)m(b)s(ers)f(and) -h(gradual)g(under\015o)m(w.)82 b(If)-30 4873 y(the)36 -b(exp)s(onen)m(t)f(range)h(of)f(some)g(\015oating-p)s(oin)m(t)i(t)m(yp) -s(e)e(is)h(to)s(o)g(limited)f(for)g(y)m(our)g(application,)j(c)m(ho)s -(ose)f(another)-30 4983 y(\015oating-p)s(oin)m(t)32 b(t)m(yp)s(e)e -(with)g(larger)h(exp)s(onen)m(t)g(range.)-30 5121 y(As)37 -b(a)g(user)e(of)i(CLN,)g(y)m(ou)g(can)g(forget)g(ab)s(out)f(the)h -(di\013erences)g(b)s(et)m(w)m(een)g(the)g(four)f(\015oating-p)s(oin)m -(t)i(t)m(yp)s(es)f(and)-30 5230 y(just)i(declare)h(all)g(y)m(our)g -(\015oating-p)s(oin)m(t)g(v)-5 b(ariables)40 b(as)g(b)s(eing)f(of)g(t)m -(yp)s(e)h Fp(cl_F)p Fr(.)66 b(This)39 b(has)g(the)g(adv)-5 -b(an)m(tage)41 b(that)-30 5340 y(when)30 b(y)m(ou)i(c)m(hange)h(the)f -(precision)f(of)h(some)f(computation)g(\(sa)m(y)-8 b(,)34 -b(from)c Fp(cl_DF)g Fr(to)i Fp(cl_LF)p Fr(\),)f(y)m(ou)h(don't)f(ha)m -(v)m(e)i(to)p eop -%%Page: 8 10 -8 9 bop -30 -116 a Fr(Chapter)30 b(3:)41 b(Ordinary)29 -b(n)m(um)m(b)s(er)f(t)m(yp)s(es)2517 b(8)-30 299 y(c)m(hange)34 -b(the)g(co)s(de,)g(only)f(the)g(precision)h(of)f(the)g(initial)i(v)-5 -b(alues.)49 b(Also,)35 b(man)m(y)d(transcenden)m(tal)i(functions)f(ha)m -(v)m(e)-30 408 y(b)s(een)f(declared)i(as)f(returning)f(a)h -Fp(cl_F)f Fr(when)g(the)h(argumen)m(t)f(is)h(a)g Fp(cl_F)p -Fr(,)g(but)f(suc)m(h)g(declarations)j(are)e(missing)-30 -518 y(for)f(the)h(t)m(yp)s(es)g Fp(cl_SF)p Fr(,)f Fp(cl_FF)p -Fr(,)g Fp(cl_DF)p Fr(,)g Fp(cl_LF)p Fr(.)45 b(\(Suc)m(h)33 -b(declarations)h(w)m(ould)e(b)s(e)g(wrong)g(if)h(the)f(\015oating)i(p)s -(oin)m(t)-30 628 y(con)m(tagion)f(rule)d(happ)s(ened)e(to)j(c)m(hange)h -(in)e(the)h(future.\))-30 941 y Fs(3.3)68 b(Complex)46 -b(n)l(um)l(b)t(ers)-30 1156 y Fr(Complex)29 b(n)m(um)m(b)s(ers,)f(as)j -(implemen)m(ted)e(b)m(y)h(the)g(class)h Fp(cl_N)p Fr(,)e(ha)m(v)m(e)j -(a)f(real)f(part)h(and)e(an)h(imaginary)g(part,)h(b)s(oth)-30 -1266 y(real)42 b(n)m(um)m(b)s(ers.)70 b(A)41 b(complex)g(n)m(um)m(b)s -(er)e(whose)i(imaginary)f(part)h(is)h(the)f(exact)h(n)m(um)m(b)s(er)d -Fp(0)i Fr(is)g(automatically)-30 1375 y(con)m(v)m(erted)32 -b(to)f(a)g(real)g(n)m(um)m(b)s(er.)-30 1532 y(Complex)36 -b(n)m(um)m(b)s(ers)f(can)i(arise)h(from)d(real)j(n)m(um)m(b)s(ers)d -(alone,)40 b(for)d(example)g(through)f(application)j(of)e -Fp(sqrt)f Fr(or)-30 1642 y(transcenden)m(tal)31 b(functions.)-30 -1955 y Fs(3.4)68 b(Con)l(v)l(ersions)-30 2170 y Fr(Con)m(v)m(ersions)46 -b(from)e(an)m(y)h(class)i(to)f(an)m(y)f(its)h(sup)s(erclasses)f -(\(\\base)h(classes")h(in)e(C)p Fp(++)g Fr(terminology\))h(is)f(done) --30 2280 y(automatically)-8 b(.)-30 2437 y(Con)m(v)m(ersions)28 -b(from)f(the)h(C)f(built-in)h(t)m(yp)s(es)g(`)p Fp(long)p -Fr(')f(and)h(`)p Fp(unsigned)g(long)p Fr(')f(are)i(pro)m(vided)e(for)h -(the)g(classes)h Fp(cl_I)p Fr(,)-30 2546 y Fp(cl_RA)p -Fr(,)g Fp(cl_R)p Fr(,)h Fp(cl_N)f Fr(and)h Fp(cl_number)p -Fr(.)-30 2703 y(Con)m(v)m(ersions)35 b(from)e(the)i(C)g(built-in)f(t)m -(yp)s(es)h(`)p Fp(int)p Fr(')f(and)h(`)p Fp(unsigned)28 -b(int)p Fr(')34 b(are)h(pro)m(vided)g(for)f(the)h(classes)h -Fp(cl_I)p Fr(,)-30 2813 y Fp(cl_RA)p Fr(,)30 b Fp(cl_R)p -Fr(,)h Fp(cl_N)e Fr(and)i Fp(cl_number)p Fr(.)40 b(Ho)m(w)m(ev)m(er,)34 -b(these)e(con)m(v)m(ersions)g(emphasize)f(e\016ciency)-8 -b(.)44 b(Their)30 b(range)i(is)-30 2922 y(therefore)f(limited:)19 -3079 y Fq(\000)60 b Fr(The)30 b(con)m(v)m(ersion)i(from)c(`)p -Fp(int)p Fr(')i(w)m(orks)h(only)f(if)h(the)f(argumen)m(t)g(is)g -Fp(<)g Fr(2)p Fp(^)p Fr(29)i(and)e Fp(>)g Fr(-2)p Fp(^)p -Fr(29.)19 3225 y Fq(\000)60 b Fr(The)30 b(con)m(v)m(ersion)i(from)c(`)p -Fp(unsigned)h(int)p Fr(')h(w)m(orks)g(only)g(if)h(the)f(argumen)m(t)g -(is)h Fp(<)f Fr(2)p Fp(^)p Fr(29.)-30 3418 y(In)j(a)h(declaration)i -(lik)m(e)f(`)p Fp(cl_I)29 b(x)h(=)g(10;)p Fr(')j(the)h(C)p -Fp(++)f Fr(compiler)g(is)h(able)h(to)f(do)g(the)g(con)m(v)m(ersion)h -(of)f Fp(10)f Fr(from)f(`)p Fp(int)p Fr(')-30 3528 y(to)f(`)p -Fp(cl_I)p Fr(')f(at)i(compile)e(time)g(already)-8 b(.)43 -b(On)30 b(the)g(other)h(hand,)f(co)s(de)h(lik)m(e)h(`)p -Fp(cl_I)d(x)h(=)g(1000000000;)p Fr(')e(is)j(in)f(error.)-30 -3637 y(So,)f(if)f(y)m(ou)g(w)m(an)m(t)h(to)g(b)s(e)e(sure)g(that)i(an)f -(`)p Fp(int)p Fr(')f(whose)h(magnitude)f(is)h(not)h(guaran)m(teed)g(to) -f(b)s(e)g Fp(<)f Fr(2)p Fp(^)p Fr(29)i(is)g(correctly)-30 -3747 y(con)m(v)m(erted)45 b(to)f(a)g(`)p Fp(cl_I)p Fr(',)i(\014rst)c -(con)m(v)m(ert)j(it)f(to)g(a)g(`)p Fp(long)p Fr('.)79 -b(Similarly)-8 b(,)47 b(if)c(a)h(large)g(`)p Fp(unsigned)28 -b(int)p Fr(')43 b(is)g(to)i(b)s(e)-30 3856 y(con)m(v)m(erted)32 -b(to)f(a)g(`)p Fp(cl_I)p Fr(',)f(\014rst)f(con)m(v)m(ert)j(it)f(to)g -(an)g(`)p Fp(unsigned)d(long)p Fr('.)-30 4013 y(Con)m(v)m(ersions)34 -b(from)e(the)i(C)g(built-in)f(t)m(yp)s(e)h(`)p Fp(float)p -Fr(')f(are)h(pro)m(vided)f(for)h(the)g(classes)g Fp(cl_FF)p -Fr(,)g Fp(cl_F)p Fr(,)f Fp(cl_R)p Fr(,)h Fp(cl_N)-30 -4123 y Fr(and)c Fp(cl_number)p Fr(.)-30 4280 y(Con)m(v)m(ersions)h -(from)e(the)i(C)f(built-in)h(t)m(yp)s(e)g(`)p Fp(double)p -Fr(')e(are)i(pro)m(vided)g(for)f(the)h(classes)h Fp(cl_DF)p -Fr(,)d Fp(cl_F)p Fr(,)h Fp(cl_R)p Fr(,)g Fp(cl_N)-30 -4389 y Fr(and)g Fp(cl_number)p Fr(.)-30 4546 y(Con)m(v)m(ersions)40 -b(from)e(`)p Fp(const)29 b(char)g(*)p Fr(')40 b(are)g(pro)m(vided)f -(for)g(the)h(classes)g Fp(cl_I)p Fr(,)h Fp(cl_RA)p Fr(,)g -Fp(cl_SF)p Fr(,)f Fp(cl_FF)p Fr(,)h Fp(cl_DF)p Fr(,)-30 -4656 y Fp(cl_LF)p Fr(,)26 b Fp(cl_F)p Fr(,)h Fp(cl_R)p -Fr(,)g Fp(cl_N)p Fr(.)38 b(The)27 b(easiest)h(w)m(a)m(y)g(to)g(sp)s -(ecify)e(a)i(v)-5 b(alue)27 b(whic)m(h)g(is)g(outside)g(of)g(the)g -(range)h(of)f(the)g(C)p Fp(++)-30 4765 y Fr(built-in)j(t)m(yp)s(es)h -(is)f(therefore)h(to)g(sp)s(ecify)f(it)h(as)g(a)f(string,)h(lik)m(e)h -(this:)353 4917 y Fp(cl_I)47 b(order_of_rubiks_cube_gro)o(up)41 -b(=)48 b("43252003274489856000";)-30 5073 y Fr(Note)32 -b(that)f(this)f(con)m(v)m(ersion)i(is)e(done)g(at)h(run)m(time,)f(not)g -(at)h(compile-time.)-30 5230 y(Con)m(v)m(ersions)37 b(from)e -Fp(cl_I)h Fr(to)h(the)g(C)f(built-in)h(t)m(yp)s(es)f(`)p -Fp(int)p Fr(',)i(`)p Fp(unsigned)29 b(int)p Fr(',)38 -b(`)p Fp(long)p Fr(',)f(`)p Fp(unsigned)29 b(long)p Fr(')36 -b(are)-30 5340 y(pro)m(vided)30 b(through)g(the)g(functions)p -eop -%%Page: 9 11 -9 10 bop -30 -116 a Fr(Chapter)30 b(3:)41 b(Ordinary)29 -b(n)m(um)m(b)s(er)f(t)m(yp)s(es)2517 b(9)-30 299 y Fp(int)29 -b(cl_I_to_int)f(\(const)g(cl_I&)h(x\))-30 408 y(unsigned)f(int)i -(cl_I_to_uint)d(\(const)h(cl_I&)h(x\))-30 518 y(long)g(cl_I_to_long)e -(\(const)i(cl_I&)g(x\))-30 628 y(unsigned)f(long)h(cl_I_to_ulong)e -(\(const)i(cl_I&)g(x\))450 737 y Fr(Returns)d Fp(x)g -Fr(as)h(elemen)m(t)h(of)f(the)g(C)f(t)m(yp)s(e)h Fl(ct)m(yp)s(e)p -Fr(.)40 b(If)27 b Fp(x)f Fr(is)h(not)g(represen)m(table)g(in)g(the)g -(range)g(of)g Fl(ct)m(yp)s(e)p Fr(,)450 847 y(a)k(run)m(time)e(error)h -(o)s(ccurs.)-30 1006 y(Con)m(v)m(ersions)38 b(from)f(the)h(classes)h -Fp(cl_I)p Fr(,)g Fp(cl_RA)p Fr(,)g Fp(cl_SF)p Fr(,)f -Fp(cl_FF)p Fr(,)h Fp(cl_DF)p Fr(,)g Fp(cl_LF)p Fr(,)f -Fp(cl_F)f Fr(and)h Fp(cl_R)e Fr(to)j(the)f(C)-30 1116 -y(built-in)30 b(t)m(yp)s(es)h(`)p Fp(float)p Fr(')e(and)h(`)p -Fp(double)p Fr(')f(are)i(pro)m(vided)f(through)f(the)i(functions)-30 -1275 y Fp(float)e(float_approx)e(\(const)i Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))-30 1385 y(double)f(double_approx)d(\(const)j -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 1494 y Fr(Returns)f(an)h(appro)m -(ximation)f(of)h Fp(x)g Fr(of)g(C)f(t)m(yp)s(e)h Fl(ct)m(yp)s(e)p -Fr(.)41 b(If)29 b Fp(abs\(x\))f Fr(is)i(to)s(o)h(close)g(to)f(0)g -(\(under\015o)m(w\),)450 1604 y(0)h(is)f(returned.)40 -b(If)30 b Fp(abs\(x\))e Fr(is)j(to)s(o)g(large)g(\(o)m(v)m(er\015o)m -(w\),)i(an)d(IEEE)g(in\014nit)m(y)g(is)h(returned.)-30 -1763 y(Con)m(v)m(ersions)k(from)e(an)m(y)i(class)g(to)g(an)m(y)g(of)g -(its)g(sub)s(classes)f(\(\\deriv)m(ed)h(classes")h(in)e(C)p -Fp(++)g Fr(terminology\))h(are)g(not)-30 1873 y(pro)m(vided.)40 -b(Instead,)29 b(y)m(ou)f(can)h(assert)g(and)e(c)m(hec)m(k)j(that)f(a)g -(v)-5 b(alue)29 b(b)s(elongs)f(to)h(a)g(certain)g(sub)s(class,)f(and)g -(return)f(it)-30 1983 y(as)f(elemen)m(t)h(of)f(that)h(class,)h(using)d -(the)h(`)p Fp(As)p Fr(')g(and)g(`)p Fp(The)p Fr(')f(macros.)39 -b Fp(As\()p Fl(t)m(yp)s(e)5 b Fp(\)\()p Fl(v)-5 b(alue)5 -b Fp(\))25 b Fr(c)m(hec)m(ks)j(that)e Fl(v)-5 b(alue)32 -b Fr(b)s(elongs)-30 2092 y(to)d Fl(t)m(yp)s(e)k Fr(and)28 -b(returns)f(it)i(as)f(suc)m(h.)40 b Fp(The\()p Fl(t)m(yp)s(e)5 -b Fp(\)\()p Fl(v)-5 b(alue)5 b Fp(\))27 b Fr(assumes)g(that)i -Fl(v)-5 b(alue)33 b Fr(b)s(elongs)28 b(to)h Fl(t)m(yp)s(e)34 -b Fr(and)27 b(returns)g(it)-30 2202 y(as)k(suc)m(h.)40 -b(It)31 b(is)f(y)m(our)g(resp)s(onsibilit)m(y)h(to)g(ensure)e(that)i -(this)g(assumption)d(is)j(v)-5 b(alid.)41 b(Example:)353 -2330 y Fp(cl_I)47 b(x)g(=)h(...)o(;)353 2434 y(if)f(\(!\(x)g(>=)g -(0\)\))g(abort\(\);)353 2538 y(cl_I)g(ten_x)f(=)i -(The\(cl_I\)\(expt\(10,x\)\);)41 b(//)48 b(If)f(x)g(>=)g(0,)h(10^x)e -(is)h(an)h(integer.)974 2642 y(//)f(In)g(general,)f(it)h(would)f(be)h -(a)h(rational)d(number.)p eop -%%Page: 10 12 -10 11 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(10)-30 299 y Fo(4)80 b(F)-13 -b(unctions)53 b(on)g(n)l(um)l(b)t(ers)-30 600 y Fr(Eac)m(h)36 -b(of)g(the)g(n)m(um)m(b)s(er)d(classes)k(declares)f(its)g(mathematical) -g(op)s(erations)g(in)f(the)h(corresp)s(onding)e(include)i(\014le.)-30 -709 y(F)-8 b(or)27 b(example,)g(if)f(y)m(our)g(co)s(de)h(op)s(erates)g -(with)f(ob)5 b(jects)27 b(of)f(t)m(yp)s(e)g Fp(cl_I)p -Fr(,)h(it)f(should)g Fp(#include)i()p -Fr(.)-30 1022 y Fs(4.1)68 b(Constructing)45 b(n)l(um)l(b)t(ers)-30 -1237 y Fr(Here)31 b(is)f(ho)m(w)h(to)g(create)h(n)m(um)m(b)s(er)c(ob)5 -b(jects)31 b(\\from)e(nothing".)-30 1505 y Fn(4.1.1)63 -b(Constructing)41 b(in)m(tegers)-30 1720 y Fp(cl_I)28 -b Fr(ob)5 b(jects)30 b(are)f(most)g(easily)h(constructed)f(from)f(C)g -(in)m(tegers)i(and)f(from)f(strings.)40 b(See)29 b(Section)h(3.4)g -([Con)m(v)m(er-)-30 1830 y(sions],)h(page)g(8.)-30 2098 -y Fn(4.1.2)63 b(Constructing)41 b(rational)g(n)m(um)m(b)s(ers)-30 -2313 y Fp(cl_RA)e Fr(ob)5 b(jects)41 b(can)g(b)s(e)f(constructed)h -(from)e(strings.)71 b(The)40 b(syn)m(tax)h(for)f(rational)i(n)m(um)m(b) -s(ers)c(is)j(describ)s(ed)e(in)-30 2423 y(Section)44 -b(5.1)g([In)m(ternal)g(and)f(prin)m(ted)g(represen)m(tation],)48 -b(page)c(28.)80 b(Another)44 b(standard)e(w)m(a)m(y)i(to)g(pro)s(duce)f -(a)-30 2532 y(rational)32 b(n)m(um)m(b)s(er)c(is)i(through)g -(application)h(of)g(`)p Fp(operator)d(/)p Fr(')j(or)f(`)p -Fp(recip)p Fr(')f(on)i(in)m(tegers.)-30 2801 y Fn(4.1.3)63 -b(Constructing)41 b(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers)-30 -3016 y Fp(cl_F)h Fr(ob)5 b(jects)45 b(with)f(lo)m(w)h(precision)f(are)g -(most)g(easily)h(constructed)g(from)d(C)i(`)p Fp(float)p -Fr(')f(and)h(`)p Fp(double)p Fr('.)81 b(See)-30 3125 -y(Section)31 b(3.4)h([Con)m(v)m(ersions],)f(page)g(8.)-30 -3282 y(T)-8 b(o)34 b(construct)h(a)f Fp(cl_F)e Fr(with)i(high)g -(precision,)h(y)m(ou)f(can)g(use)g(the)g(con)m(v)m(ersion)h(from)d(`)p -Fp(const)d(char)h(*)p Fr(',)k(but)g(y)m(ou)-30 3392 y(ha)m(v)m(e)e(to)f -(sp)s(ecify)f(the)h(desired)f(precision)h(within)f(the)h(string.)41 -b(\(See)32 b(Section)f(5.1)h([In)m(ternal)f(and)f(prin)m(ted)g(repre-) --30 3501 y(sen)m(tation],)i(page)g(28.\))41 b(Example:)353 -3652 y Fp(cl_F)47 b(e)g(=)h("0.27182818284590452353)o(6028)o(7471)o -(352)o(6624)o(9775)o(724)o(7093)o(6999)o(6e+)o(1_40)o(";)-30 -3809 y Fr(will)31 b(set)g(`)p Fp(e)p Fr(')f(to)h(the)g(giv)m(en)g(v)-5 -b(alue,)31 b(with)f(a)h(precision)g(of)f(40)h(decimal)g(digits.)-30 -3966 y(The)e(programmatic)g(w)m(a)m(y)h(to)h(construct)f(a)g -Fp(cl_F)e Fr(with)i(high)f(precision)h(is)f(through)g(the)h -Fp(cl_float)e Fr(con)m(v)m(ersion)-30 4075 y(function,)c(see)e(Section) -h(4.11.1)h([Con)m(v)m(ersion)f(to)f(\015oating-p)s(oin)m(t)i(n)m(um)m -(b)s(ers],)d(page)i(25.)39 b(F)-8 b(or)22 b(example,)i(to)f(compute)-30 -4185 y Fp(e)43 b Fr(to)h(40)g(decimal)f(places,)k(\014rst)c(construct)g -(1.0)h(to)g(40)g(decimal)f(places)h(and)f(then)g(apply)g(the)g(exp)s -(onen)m(tial)-30 4294 y(function:)353 4445 y Fp(cl_float_format_t)g -(precision)j(=)h(cl_float_format\(40\);)353 4549 y(cl_F)g(e)g(=)h -(exp\(cl_float\(1,precisio)o(n\)\);)-30 4818 y Fn(4.1.4)63 -b(Constructing)41 b(complex)f(n)m(um)m(b)s(ers)-30 5032 -y Fr(Non-real)31 b Fp(cl_N)f Fr(ob)5 b(jects)31 b(are)g(normally)e -(constructed)i(through)e(the)i(function)353 5183 y Fp(cl_N)47 -b(complex)f(\(const)g(cl_R&)g(realpart,)f(const)i(cl_R&)f(imagpart\)) --30 5340 y Fr(See)31 b(Section)g(4.4)g([Elemen)m(tary)g(complex)f -(functions],)g(page)h(12.)p eop -%%Page: 11 13 -11 12 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(11)-30 299 y Fs(4.2)68 -b(Elemen)l(tary)47 b(functions)-30 491 y Fr(Eac)m(h)27 -b(of)f(the)h(classes)g Fp(cl_N)p Fr(,)f Fp(cl_R)p Fr(,)g -Fp(cl_RA)p Fr(,)g Fp(cl_I)p Fr(,)g Fp(cl_F)p Fr(,)g Fp(cl_SF)p -Fr(,)g Fp(cl_FF)p Fr(,)g Fp(cl_DF)p Fr(,)g Fp(cl_LF)f -Fr(de\014nes)g(the)h(follo)m(wing)-30 601 y(op)s(erations:)-30 -760 y Fl(t)m(yp)s(e)36 b Fp(operator)28 b(+)i(\(const)e -Fl(t)m(yp)s(e)5 b Fp(&,)31 b(const)d Fl(t)m(yp)s(e)5 -b Fp(&\))450 870 y Fr(Addition.)-30 1029 y Fl(t)m(yp)s(e)36 -b Fp(operator)28 b(-)i(\(const)e Fl(t)m(yp)s(e)5 b Fp(&,)31 -b(const)d Fl(t)m(yp)s(e)5 b Fp(&\))450 1139 y Fr(Subtraction.)-30 -1298 y Fl(t)m(yp)s(e)36 b Fp(operator)28 b(-)i(\(const)e -Fl(t)m(yp)s(e)5 b Fp(&\))450 1407 y Fr(Returns)29 b(the)i(negativ)m(e)i -(of)d(the)h(argumen)m(t.)-30 1567 y Fl(t)m(yp)s(e)36 -b Fp(plus1)29 b(\(const)f Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))450 -1676 y Fr(Returns)e Fp(x)h(+)h(1)p Fr(.)-30 1835 y Fl(t)m(yp)s(e)36 -b Fp(minus1)28 b(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 1945 y Fr(Returns)f Fp(x)h(-)h(1)p Fr(.)-30 -2104 y Fl(t)m(yp)s(e)36 b Fp(operator)28 b(*)i(\(const)e -Fl(t)m(yp)s(e)5 b Fp(&,)31 b(const)d Fl(t)m(yp)s(e)5 -b Fp(&\))450 2214 y Fr(Multiplication.)-30 2373 y Fl(t)m(yp)s(e)36 -b Fp(square)28 b(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 2483 y Fr(Returns)f Fp(x)h(*)h(x)p Fr(.)-30 -2642 y(Eac)m(h)43 b(of)g(the)f(classes)i Fp(cl_N)p Fr(,)h -Fp(cl_R)p Fr(,)f Fp(cl_RA)p Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p -Fr(,)g Fp(cl_FF)p Fr(,)h Fp(cl_DF)p Fr(,)f Fp(cl_LF)d -Fr(de\014nes)h(the)g(follo)m(wing)-30 2751 y(op)s(erations:)-30 -2911 y Fl(t)m(yp)s(e)36 b Fp(operator)28 b(/)i(\(const)e -Fl(t)m(yp)s(e)5 b Fp(&,)31 b(const)d Fl(t)m(yp)s(e)5 -b Fp(&\))450 3020 y Fr(Division.)-30 3179 y Fl(t)m(yp)s(e)36 -b Fp(recip)29 b(\(const)f Fl(t)m(yp)s(e)5 b Fp(&\))450 -3289 y Fr(Returns)29 b(the)i(recipro)s(cal)g(of)g(the)f(argumen)m(t.) --30 3448 y(The)h(class)h Fp(cl_I)d Fr(do)s(esn't)i(de\014ne)g(a)g(`)p -Fp(/)p Fr(')h(op)s(eration)f(b)s(ecause)g(in)g(the)g(C/C)p -Fp(++)g Fr(language)h(this)f(op)s(erator,)h(applied)-30 -3558 y(to)j(in)m(tegral)h(t)m(yp)s(es,)g(denotes)f(the)g(`)p -Fp(floor)p Fr(')e(or)h(`)p Fp(truncate)p Fr(')f(op)s(eration)i(\(whic)m -(h)g(one)f(of)h(these,)h(is)f(implemen)m(ta-)-30 3667 -y(tion)g(dep)s(enden)m(t\).)51 b(\(See)35 b(Section)g(4.6)g([Rounding)f -(functions],)h(page)g(13.\))53 b(Instead,)36 b Fp(cl_I)d -Fr(de\014nes)g(an)h(\\exact)-30 3777 y(quotien)m(t")e(function:)-30 -3936 y Fp(cl_I)d(exquo)g(\(const)g(cl_I&)g(x,)h(const)e(cl_I&)h(y\))450 -4046 y Fr(Chec)m(ks)i(that)g Fp(y)f Fr(divides)g Fp(x)p -Fr(,)g(and)g(returns)f(the)h(quotien)m(t)i Fp(x)p Fr(/)p -Fp(y)p Fr(.)-30 4205 y(The)e(follo)m(wing)i(exp)s(onen)m(tiation)f -(functions)f(are)h(de\014ned:)-30 4364 y Fp(cl_I)e(expt_pos)f(\(const)h -(cl_I&)g(x,)h(const)f(cl_I&)g(y\))-30 4474 y(cl_RA)g(expt_pos)f -(\(const)h(cl_RA&)f(x,)i(const)f(cl_I&)g(y\))450 4583 -y(y)h Fr(m)m(ust)f(b)s(e)h Fp(>)g Fr(0.)41 b(Returns)30 -b Fp(x^y)p Fr(.)-30 4742 y Fp(cl_RA)f(expt)g(\(const)g(cl_RA&)f(x,)i -(const)f(cl_I&)g(y\))-30 4852 y(cl_R)g(expt)g(\(const)g(cl_R&)g(x,)h -(const)f(cl_I&)g(y\))-30 4962 y(cl_N)g(expt)g(\(const)g(cl_N&)g(x,)h -(const)f(cl_I&)g(y\))450 5071 y Fr(Returns)g Fp(x^y)p -Fr(.)-30 5230 y(Eac)m(h)43 b(of)g(the)f(classes)i Fp(cl_R)p -Fr(,)h Fp(cl_RA)p Fr(,)f Fp(cl_I)p Fr(,)h Fp(cl_F)p Fr(,)f -Fp(cl_SF)p Fr(,)g Fp(cl_FF)p Fr(,)h Fp(cl_DF)p Fr(,)f -Fp(cl_LF)d Fr(de\014nes)h(the)g(follo)m(wing)-30 5340 -y(op)s(eration:)p eop -%%Page: 12 14 -12 13 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(12)-30 299 y Fl(t)m(yp)s(e)36 -b Fp(abs)29 b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 -408 y Fr(Returns)f(the)i(absolute)g(v)-5 b(alue)31 b(of)f -Fp(x)p Fr(.)41 b(This)29 b(is)i Fp(x)f Fr(if)g Fp(x)g(>=)g(0)p -Fr(,)g(and)g Fp(-x)g Fr(if)g Fp(x)g(<=)g(0)p Fr(.)-30 -588 y(The)g(class)h Fp(cl_N)e Fr(implemen)m(ts)g(this)h(as)h(follo)m -(ws:)-30 767 y Fp(cl_R)e(abs)h(\(const)e(cl_N)i(x\))450 -877 y Fr(Returns)f(the)i(absolute)g(v)-5 b(alue)31 b(of)f -Fp(x)p Fr(.)-30 1057 y(Eac)m(h)d(of)f(the)h(classes)g -Fp(cl_N)p Fr(,)f Fp(cl_R)p Fr(,)g Fp(cl_RA)p Fr(,)g Fp(cl_I)p -Fr(,)g Fp(cl_F)p Fr(,)g Fp(cl_SF)p Fr(,)g Fp(cl_FF)p -Fr(,)g Fp(cl_DF)p Fr(,)g Fp(cl_LF)f Fr(de\014nes)g(the)h(follo)m(wing) --30 1166 y(op)s(eration:)-30 1346 y Fl(t)m(yp)s(e)36 -b Fp(signum)28 b(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 1455 y Fr(Returns)f(the)h(sign)g(of)g Fp(x)p -Fr(,)g(in)f(the)i(same)e(n)m(um)m(b)s(er)e(format)j(as)g -Fp(x)p Fr(.)40 b(This)29 b(is)h(de\014ned)f(as)h Fp(x)g(/)g(abs\(x\))e -Fr(if)450 1565 y Fp(x)i Fr(is)g(non-zero,)i(and)d Fp(x)h -Fr(if)h Fp(x)f Fr(is)g(zero.)42 b(If)30 b Fp(x)g Fr(is)g(real,)h(the)g -(v)-5 b(alue)31 b(is)f(either)h(0)g(or)f(1)h(or)f(-1.)-30 -1856 y Fs(4.3)68 b(Elemen)l(tary)47 b(rational)f(functions)-30 -2062 y Fr(Eac)m(h)31 b(of)g(the)f(classes)i Fp(cl_RA)p -Fr(,)d Fp(cl_I)g Fr(de\014nes)g(the)i(follo)m(wing)h(op)s(erations:)-30 -2241 y Fp(cl_I)d(numerator)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 2351 y Fr(Returns)f(the)i(n)m(umerator)e(of)i -Fp(x)p Fr(.)-30 2524 y Fp(cl_I)e(denominator)f(\(const)g -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))450 2633 y Fr(Returns)e(the)i -(denominator)f(of)g Fp(x)p Fr(.)-30 2813 y(The)g(n)m(umerator)g(and)g -(denominator)g(of)h(a)g(rational)h(n)m(um)m(b)s(er)c(are)k(normalized)e -(in)g(suc)m(h)h(a)g(w)m(a)m(y)g(that)h(they)f(ha)m(v)m(e)-30 -2922 y(no)f(factor)i(in)e(common)e(and)i(the)h(denominator)e(is)i(p)s -(ositiv)m(e.)-30 3213 y Fs(4.4)68 b(Elemen)l(tary)47 -b(complex)e(functions)-30 3419 y Fr(The)30 b(class)h -Fp(cl_N)e Fr(de\014nes)h(the)g(follo)m(wing)i(op)s(eration:)-30 -3599 y Fp(cl_N)d(complex)g(\(const)f(cl_R&)h(a,)h(const)f(cl_R&)g(b\)) -450 3708 y Fr(Returns)35 b(the)h(complex)g(n)m(um)m(b)s(er)e -Fp(a+bi)p Fr(,)i(that)h(is,)g(the)f(complex)g(n)m(um)m(b)s(er)e(with)h -(real)i(part)f Fp(a)g Fr(and)450 3818 y(imaginary)30 -b(part)g Fp(b)p Fr(.)-30 3997 y(Eac)m(h)h(of)g(the)f(classes)i -Fp(cl_N)p Fr(,)d Fp(cl_R)g Fr(de\014nes)h(the)g(follo)m(wing)i(op)s -(erations:)-30 4177 y Fp(cl_R)d(realpart)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 4286 y Fr(Returns)f(the)i(real)g -(part)f(of)h Fp(x)p Fr(.)-30 4459 y Fp(cl_R)e(imagpart)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 4569 y Fr(Returns)f(the)i -(imaginary)f(part)g(of)h Fp(x)p Fr(.)-30 4742 y Fl(t)m(yp)s(e)36 -b Fp(conjugate)27 b(\(const)i Fl(t)m(yp)s(e)5 b Fp(&)31 -b(x\))450 4851 y Fr(Returns)e(the)i(complex)f(conjugate)i(of)e -Fp(x)p Fr(.)-30 5031 y(W)-8 b(e)32 b(ha)m(v)m(e)f(the)g(relations)150 -5179 y Fp(x)f(=)g(complex\(realpart\(x\),)25 b(imagpart\(x\)\))150 -5320 y(conjugate\(x\))i(=)j(complex\(realpart\(x\),)25 -b(-imagpart\(x\)\))p eop -%%Page: 13 15 -13 14 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(13)-30 299 y Fs(4.5)68 -b(Comparisons)-30 489 y Fr(Eac)m(h)27 b(of)f(the)h(classes)g -Fp(cl_N)p Fr(,)f Fp(cl_R)p Fr(,)g Fp(cl_RA)p Fr(,)g Fp(cl_I)p -Fr(,)g Fp(cl_F)p Fr(,)g Fp(cl_SF)p Fr(,)g Fp(cl_FF)p -Fr(,)g Fp(cl_DF)p Fr(,)g Fp(cl_LF)f Fr(de\014nes)g(the)h(follo)m(wing) --30 598 y(op)s(erations:)-30 752 y Fp(bool)j(operator)f(==)i(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 862 y(bool)29 b(operator)f(!=)i(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))450 971 y Fr(Comparison,)29 b(as)i(in)f(C)g(and)f(C)p -Fp(++)p Fr(.)-30 1125 y Fp(uint32)g(equal_hashcode)d(\(const)j -Fl(t)m(yp)s(e)5 b Fp(&\))450 1235 y Fr(Returns)35 b(a)h(32-bit)h(hash)e -(co)s(de)h(that)g(is)g(the)g(same)f(for)h(an)m(y)g(t)m(w)m(o)h(n)m(um)m -(b)s(ers)c(whic)m(h)i(are)i(the)f(same)450 1345 y(according)24 -b(to)h Fp(==)p Fr(.)38 b(This)22 b(hash)h(co)s(de)h(dep)s(ends)e(on)h -(the)h(n)m(um)m(b)s(er's)d(v)-5 b(alue,)26 b(not)d(its)h(t)m(yp)s(e)g -(or)g(precision.)-30 1499 y Fp(cl_boolean)k(zerop)h(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))450 1608 y Fr(Compare)e(against)j -(zero:)41 b Fp(x)30 b(==)g(0)-30 1762 y Fr(Eac)m(h)43 -b(of)g(the)f(classes)i Fp(cl_R)p Fr(,)h Fp(cl_RA)p Fr(,)f -Fp(cl_I)p Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p Fr(,)g Fp(cl_FF)p -Fr(,)h Fp(cl_DF)p Fr(,)f Fp(cl_LF)d Fr(de\014nes)h(the)g(follo)m(wing) --30 1872 y(op)s(erations:)-30 2026 y Fp(cl_signean)28 -b(compare)g(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))450 2135 y Fr(Compares)f -Fp(x)h Fr(and)g Fp(y)p Fr(.)40 b(Returns)30 b Fp(+)p -Fr(1)g(if)g Fp(x>y)p Fr(,)g(-1)h(if)g Fp(x=)i(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2618 y(bool)29 b(operator)f(>)i(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))450 2727 y Fr(Comparison,)29 b(as)i(in)f(C)g(and)f(C)p -Fp(++)p Fr(.)-30 2881 y Fp(cl_boolean)f(minusp)g(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 2991 y Fr(Compare)f(against)j -(zero:)41 b Fp(x)30 b(<)g(0)-30 3145 y(cl_boolean)e(plusp)h(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))450 3255 y Fr(Compare)e(against)j -(zero:)41 b Fp(x)30 b(>)g(0)-30 3408 y Fl(t)m(yp)s(e)36 -b Fp(max)29 b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))450 3518 y Fr(Return)g(the)g(maxim)m -(um)d(of)k Fp(x)f Fr(and)g Fp(y)p Fr(.)-30 3672 y Fl(t)m(yp)s(e)36 -b Fp(min)29 b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))450 3782 y Fr(Return)g(the)g(minim)m -(um)d(of)j Fp(x)g Fr(and)g Fp(y)p Fr(.)-30 3936 y(When)35 -b(a)g(\015oating)h(p)s(oin)m(t)f(n)m(um)m(b)s(er)d(and)i(a)i(rational)g -(n)m(um)m(b)s(er)c(are)k(compared,)f(the)g(\015oat)h(is)f(\014rst)f -(con)m(v)m(erted)i(to)-30 4045 y(a)f(rational)h(n)m(um)m(b)s(er)c -(using)i(the)h(function)f Fp(rational)p Fr(.)51 b(Since)35 -b(a)g(\015oating)g(p)s(oin)m(t)g(n)m(um)m(b)s(er)d(actually)k(represen) -m(ts)-30 4155 y(an)h(in)m(terv)-5 b(al)39 b(of)e(real)h(n)m(um)m(b)s -(ers,)f(the)h(result)f(migh)m(t)g(b)s(e)g(surprising.)60 -b(F)-8 b(or)38 b(example,)h Fp(\(cl_F\)\(cl_R\)"1/3")26 -b(==)-30 4264 y(\(cl_R\)"1/3")h Fr(returns)i(false)i(b)s(ecause)g -(there)f(is)h(no)f(\015oating)h(p)s(oin)m(t)g(n)m(um)m(b)s(er)d(whose)i -(v)-5 b(alue)31 b(is)f(exactly)i Fp(1/3)p Fr(.)-30 4513 -y Fs(4.6)68 b(Rounding)45 b(functions)-30 4703 y Fr(When)40 -b(a)g(real)h(n)m(um)m(b)s(er)d(is)i(to)h(b)s(e)f(con)m(v)m(erted)h(to)g -(an)f(in)m(teger,)45 b(there)40 b(is)g(no)g(\\b)s(est")h(rounding.)69 -b(The)39 b(desired)-30 4813 y(rounding)27 b(function)g(dep)s(ends)f(on) -i(the)g(application.)41 b(The)28 b(Common)d(Lisp)i(and)g(ISO)g(Lisp)g -(standards)g(o\013er)i(four)-30 4923 y(rounding)g(functions:)-30 -5076 y Fp(floor\(x\))96 b Fr(This)30 b(is)g(the)h(largest)g(in)m(teger) -h Fp(<)p Fr(=)p Fp(x)p Fr(.)-30 5230 y Fp(ceiling\(x\))450 -5340 y Fr(This)e(is)g(the)h(smallest)f(in)m(teger)i Fp(>)p -Fr(=)p Fp(x)p Fr(.)p eop -%%Page: 14 16 -14 15 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(14)-30 299 y Fp(truncate\(x\))450 -408 y Fr(Among)30 b(the)g(in)m(tegers)i(b)s(et)m(w)m(een)f(0)g(and)e -Fp(x)h Fr(\(inclusiv)m(e\))i(the)f(one)g(nearest)f(to)i -Fp(x)p Fr(.)-30 566 y Fp(round\(x\))96 b Fr(The)32 b(in)m(teger)i -(nearest)g(to)f Fp(x)p Fr(.)48 b(If)32 b Fp(x)g Fr(is)h(exactly)i -(halfw)m(a)m(y)e(b)s(et)m(w)m(een)h(t)m(w)m(o)g(in)m(tegers,)h(c)m(ho)s -(ose)e(the)g(ev)m(en)450 676 y(one.)-30 833 y(These)d(functions)g(ha)m -(v)m(e)i(di\013eren)m(t)e(adv)-5 b(an)m(tages:)-30 967 -y Fp(floor)44 b Fr(and)i Fp(ceiling)e Fr(are)i(translation)h(in)m(v)-5 -b(arian)m(t:)73 b Fp(floor\(x+n\))27 b(=)j(floor\(x\))e(+)i(n)46 -b Fr(and)f Fp(ceiling\(x+n\))27 b(=)-30 1076 y(ceiling\(x\))h(+)i(n)g -Fr(for)g(ev)m(ery)h Fp(x)f Fr(and)g(ev)m(ery)h(in)m(teger)h -Fp(n)p Fr(.)-30 1210 y(On)51 b(the)h(other)h(hand,)j -Fp(truncate)50 b Fr(and)h Fp(round)g Fr(are)h(symmetric:)83 -b Fp(truncate\(-x\))27 b(=)j(-truncate\(x\))49 b Fr(and)-30 -1319 y Fp(round\(-x\))28 b(=)i(-round\(x\))p Fr(,)44 -b(and)f(furthermore)e Fp(round)g Fr(is)j(un)m(biased:)65 -b(on)44 b(the)f(\\a)m(v)m(erage",)50 b(it)44 b(rounds)d(do)m(wn)-30 -1429 y(exactly)32 b(as)f(often)g(as)f(it)h(rounds)e(up.)-30 -1563 y(The)h(functions)g(are)h(related)g(lik)m(e)h(this:)150 -1696 y Fp(ceiling\(m/n\))27 b(=)j(floor\(\(m+n-1\)/n\))c(=)k -(floor\(\(m-1\)/n\)+1)f Fr(for)j(rational)j(n)m(um)m(b)s(ers)30 -b Fp(m/n)i Fr(\()p Fp(m)p Fr(,)i Fp(n)f Fr(in)m(te-)150 -1806 y(gers,)e Fp(n>)p Fr(0\),)g(and)150 1939 y Fp(truncate\(x\))c(=)j -(sign\(x\))f(*)h(floor\(abs\(x\)\))-30 2097 y Fr(Eac)m(h)f(of)f(the)g -(classes)h Fp(cl_R)p Fr(,)e Fp(cl_RA)p Fr(,)h Fp(cl_F)p -Fr(,)f Fp(cl_SF)p Fr(,)h Fp(cl_FF)p Fr(,)f Fp(cl_DF)p -Fr(,)g Fp(cl_LF)g Fr(de\014nes)g(the)h(follo)m(wing)h(op)s(erations:) --30 2254 y Fp(cl_I)g(floor1)g(\(const)g Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 2364 y Fr(Returns)f Fp(floor\(x\))p -Fr(.)-30 2521 y Fp(cl_I)g(ceiling1)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 2631 y Fr(Returns)f Fp(ceiling\(x\))p -Fr(.)-30 2789 y Fp(cl_I)g(truncate1)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 2898 y Fr(Returns)f Fp(truncate\(x\))p -Fr(.)-30 3056 y Fp(cl_I)g(round1)g(\(const)g Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 3165 y Fr(Returns)f Fp(round\(x\))p -Fr(.)-30 3323 y(Eac)m(h)43 b(of)g(the)f(classes)i Fp(cl_R)p -Fr(,)h Fp(cl_RA)p Fr(,)f Fp(cl_I)p Fr(,)h Fp(cl_F)p Fr(,)f -Fp(cl_SF)p Fr(,)g Fp(cl_FF)p Fr(,)h Fp(cl_DF)p Fr(,)f -Fp(cl_LF)d Fr(de\014nes)h(the)g(follo)m(wing)-30 3432 -y(op)s(erations:)-30 3590 y Fp(cl_I)29 b(floor1)g(\(const)g -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 -b Fp(&)30 b(y\))450 3700 y Fr(Returns)f Fp(floor\(x/y\))p -Fr(.)-30 3857 y Fp(cl_I)g(ceiling1)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))450 -3967 y Fr(Returns)f Fp(ceiling\(x/y\))p Fr(.)-30 4124 -y Fp(cl_I)g(truncate1)f(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))450 4234 -y Fr(Returns)f Fp(truncate\(x/y\))p Fr(.)-30 4391 y Fp(cl_I)g(round1)g -(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 -b Fp(&)30 b(y\))450 4501 y Fr(Returns)f Fp(round\(x/y\))p -Fr(.)-30 4658 y(These)41 b(functions)g(are)h(called)h(`)p -Fp(floor1)p Fr(',)48 b(.)23 b(.)f(.)52 b(here)42 b(instead)f(of)h(`)p -Fp(floor)p Fr(',)49 b(.)22 b(.)h(.)11 b(,)44 b(b)s(ecause)e(on)f(some)g -(systems,)-30 4768 y(system)30 b(dep)s(enden)m(t)f(include)h(\014les)g -(de\014ne)g(`)p Fp(floor)p Fr(')f(and)h(`)p Fp(ceiling)p -Fr(')f(as)i(macros.)-30 4902 y(In)h(man)m(y)g(cases,)j(one)e(needs)g(b) -s(oth)f(the)h(quotien)m(t)i(and)d(the)h(remainder)e(of)j(a)f(division.) -49 b(It)33 b(is)g(more)f(e\016cien)m(t)i(to)-30 5011 -y(compute)h(b)s(oth)h(at)h(the)f(same)g(time)f(than)h(to)h(p)s(erform)d -(t)m(w)m(o)j(divisions,)h(one)e(for)g(quotien)m(t)i(and)d(the)h(next)h -(one)-30 5121 y(for)28 b(the)g(remainder.)38 b(The)27 -b(follo)m(wing)j(functions)d(therefore)i(return)d(a)j(structure)e(con)m -(taining)i(b)s(oth)f(the)g(quotien)m(t)-30 5230 y(and)g(the)g -(remainder.)38 b(The)28 b(su\016x)f(`)p Fp(2)p Fr(')h(indicates)h(the)g -(n)m(um)m(b)s(er)c(of)k(\\return)e(v)-5 b(alues".)41 -b(The)27 b(remainder)g(is)h(de\014ned)-30 5340 y(as)j(follo)m(ws:)p -eop -%%Page: 15 17 -15 16 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(15)45 299 y Fq(\017)60 -b Fr(for)30 b(the)h(computation)f(of)h Fp(quotient)d(=)i(floor\(x\))p -Fr(,)e Fp(remainder)g(=)i(x)g(-)g(quotient)p Fr(,)45 -441 y Fq(\017)60 b Fr(for)30 b(the)h(computation)f(of)h -Fp(quotient)d(=)i(floor\(x,y\))p Fr(,)e Fp(remainder)f(=)j(x)g(-)g -(quotient*y)p Fr(,)-30 624 y(and)g(similarly)g(for)g(the)g(other)h -(three)g(op)s(erations.)-30 774 y(Eac)m(h)e(of)f(the)g(classes)h -Fp(cl_R)p Fr(,)e Fp(cl_RA)p Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p -Fr(,)h Fp(cl_FF)p Fr(,)f Fp(cl_DF)p Fr(,)g Fp(cl_LF)g -Fr(de\014nes)g(the)h(follo)m(wing)h(op)s(erations:)-30 -957 y Fp(struct)g Fl(t)m(yp)s(e)5 b Fp(_div_t)29 b({)h(cl_I)f -(quotient;)f Fl(t)m(yp)s(e)35 b Fp(remainder;)28 b(};)-30 -1066 y Fl(t)m(yp)s(e)5 b Fp(_div_t)29 b(floor2)g(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))-30 1176 y Fl(t)m(yp)s(e)5 -b Fp(_div_t)29 b(ceiling2)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))-30 1286 y Fl(t)m(yp)s(e)5 b Fp(_div_t)29 -b(truncate2)f(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))-30 -1395 y Fl(t)m(yp)s(e)5 b Fp(_div_t)29 b(round2)g(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))-30 1545 y Fr(Eac)m(h)43 -b(of)g(the)f(classes)i Fp(cl_R)p Fr(,)h Fp(cl_RA)p Fr(,)f -Fp(cl_I)p Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p Fr(,)g Fp(cl_FF)p -Fr(,)h Fp(cl_DF)p Fr(,)f Fp(cl_LF)d Fr(de\014nes)h(the)g(follo)m(wing) --30 1655 y(op)s(erations:)-30 1838 y Fp(struct)29 b Fl(t)m(yp)s(e)5 -b Fp(_div_t)29 b({)h(cl_I)f(quotient;)f Fl(t)m(yp)s(e)35 -b Fp(remainder;)28 b(};)-30 1947 y Fl(t)m(yp)s(e)5 b -Fp(_div_t)29 b(floor2)g(\(const)f Fl(t)m(yp)s(e)5 b Fp(&)31 -b(x,)e(const)g Fl(t)m(yp)s(e)5 b Fp(&)31 b(y\))-30 2057 -y Fl(t)m(yp)s(e)5 b Fp(_div_t)29 b(ceiling2)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 -b Fp(&)30 b(y\))-30 2166 y Fl(t)m(yp)s(e)5 b Fp(_div_t)29 -b(truncate2)f(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 2276 y Fl(t)m(yp)s(e)5 -b Fp(_div_t)29 b(round2)g(\(const)f Fl(t)m(yp)s(e)5 b -Fp(&)31 b(x,)e(const)g Fl(t)m(yp)s(e)5 b Fp(&)31 b(y\))-30 -2426 y Fr(Sometimes,)d(one)g(w)m(an)m(ts)h(the)f(quotien)m(t)h(as)g(a)f -(\015oating-p)s(oin)m(t)i(n)m(um)m(b)s(er)c(\(of)i(the)h(same)e(format) -h(as)g(the)g(argumen)m(t,)-30 2536 y(if)i(the)h(argumen)m(t)f(is)g(a)h -(\015oat\))g(instead)g(of)f(as)h(an)f(in)m(teger.)42 -b(The)30 b(pre\014x)g(`)p Fp(f)p Fr(')g(indicates)h(this.)-30 -2686 y(Eac)m(h)g(of)g(the)f(classes)i Fp(cl_F)p Fr(,)d -Fp(cl_SF)p Fr(,)g Fp(cl_FF)p Fr(,)g Fp(cl_DF)p Fr(,)h -Fp(cl_LF)e Fr(de\014nes)i(the)h(follo)m(wing)g(op)s(erations:)-30 -2868 y Fl(t)m(yp)s(e)36 b Fp(ffloor)28 b(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))-30 2978 y Fl(t)m(yp)s(e)36 b Fp(fceiling)28 -b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))-30 3088 -y Fl(t)m(yp)s(e)36 b Fp(ftruncate)27 b(\(const)i Fl(t)m(yp)s(e)5 -b Fp(&)31 b(x\))-30 3197 y Fl(t)m(yp)s(e)36 b Fp(fround)28 -b(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))-30 3347 -y Fr(and)g(similarly)g(for)g(class)h Fp(cl_R)p Fr(,)e(but)h(with)g -(return)f(t)m(yp)s(e)i Fp(cl_F)p Fr(.)-30 3497 y(The)f(class)h -Fp(cl_R)e Fr(de\014nes)h(the)g(follo)m(wing)i(op)s(erations:)-30 -3680 y Fp(cl_F)d(ffloor)g(\(const)g Fl(t)m(yp)s(e)5 b -Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 -3790 y(cl_F)f(fceiling)f(\(const)h Fl(t)m(yp)s(e)5 b -Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 -3899 y(cl_F)f(ftruncate)f(\(const)h Fl(t)m(yp)s(e)5 b -Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 -4009 y(cl_F)f(fround)g(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x,)g(const)f Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 4159 -y Fr(These)g(functions)f(also)i(exist)g(in)e(v)m(ersions)h(whic)m(h)g -(return)f(b)s(oth)g(the)h(quotien)m(t)h(and)e(the)i(remainder.)39 -b(The)29 b(su\016x)-30 4269 y(`)p Fp(2)p Fr(')i(indicates)g(this.)-30 -4419 y(Eac)m(h)g(of)g(the)f(classes)i Fp(cl_F)p Fr(,)d -Fp(cl_SF)p Fr(,)g Fp(cl_FF)p Fr(,)g Fp(cl_DF)p Fr(,)h -Fp(cl_LF)e Fr(de\014nes)i(the)h(follo)m(wing)g(op)s(erations:)-30 -4601 y Fp(struct)e Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)28 b({)i -Fl(t)m(yp)s(e)36 b Fp(quotient;)28 b Fl(t)m(yp)s(e)36 -b Fp(remainder;)27 b(};)-30 4711 y Fl(t)m(yp)s(e)5 b -Fp(_fdiv_t)29 b(ffloor2)f(\(const)h Fl(t)m(yp)s(e)5 b -Fp(&)30 b(x\))-30 4821 y Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)29 -b(fceiling2)f(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))-30 -4930 y Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)29 b(ftruncate2)e(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))-30 5040 y Fl(t)m(yp)s(e)5 -b Fp(_fdiv_t)29 b(fround2)f(\(const)h Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))-30 5190 y Fr(and)g(similarly)g(for)g(class)h -Fp(cl_R)p Fr(,)e(but)h(with)g(quotien)m(t)i(t)m(yp)s(e)e -Fp(cl_F)p Fr(.)-30 5340 y(The)g(class)h Fp(cl_R)e Fr(de\014nes)h(the)g -(follo)m(wing)i(op)s(erations:)p eop -%%Page: 16 18 -16 17 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(16)-30 299 y Fp(struct)29 -b Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)28 b({)i(cl_F)g(quotient;)d(cl_R)j -(remainder;)d(};)-30 408 y Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)29 -b(ffloor2)f(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 518 y Fl(t)m(yp)s(e)5 -b Fp(_fdiv_t)29 b(fceiling2)f(\(const)g Fl(t)m(yp)s(e)5 -b Fp(&)31 b(x,)e(const)g Fl(t)m(yp)s(e)5 b Fp(&)31 b(y\))-30 -628 y Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)29 b(ftruncate2)e(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f Fl(t)m(yp)s(e)5 -b Fp(&)30 b(y\))-30 737 y Fl(t)m(yp)s(e)5 b Fp(_fdiv_t)29 -b(fround2)f(\(const)h Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 868 y Fr(Other)g(applications)h -(need)f(only)g(the)h(remainder)e(of)h(a)h(division.)40 -b(The)30 b(remainder)f(of)h(`)p Fp(floor)p Fr(')f(and)h(`)p -Fp(ffloor)p Fr(')f(is)-30 978 y(called)k(`)p Fp(mod)p -Fr(')e(\(abbreviation)h(of)g(\\mo)s(dulo"\).)43 b(The)31 -b(remainder)f(`)p Fp(truncate)p Fr(')g(and)h(`)p Fp(ftruncate)p -Fr(')e(is)j(called)g(`)p Fp(rem)p Fr(')-30 1087 y(\(abbreviation)f(of)g -(\\remainder"\).)45 1218 y Fq(\017)60 b Fp(mod\(x,y\))28 -b(=)i(floor2\(x,y\).remainder)25 b(=)30 b(x)g(-)g(floor\(x/y\)*y)45 -1349 y Fq(\017)60 b Fp(rem\(x,y\))28 b(=)i(truncate2\(x,y\).remainder) -24 b(=)30 b(x)g(-)g(truncate\(x/y\)*y)-30 1501 y Fr(If)j -Fp(x)f Fr(and)h Fp(y)f Fr(are)i(b)s(oth)e Fp(>)p Fr(=)g(0,)j -Fp(mod\(x,y\))28 b(=)i(rem\(x,y\))e(>=)i(0)p Fr(.)48 -b(In)32 b(general,)j Fp(mod\(x,y\))c Fr(has)i(the)g(sign)g(of)g -Fp(y)g Fr(or)g(is)-30 1611 y(zero,)e(and)f Fp(rem\(x,y\))e -Fr(has)i(the)h(sign)f(of)h Fp(x)f Fr(or)g(is)h(zero.)-30 -1742 y(The)f(classes)h Fp(cl_R)p Fr(,)f Fp(cl_I)f Fr(de\014ne)h(the)g -(follo)m(wing)i(op)s(erations:)-30 1894 y Fl(t)m(yp)s(e)k -Fp(mod)29 b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 2004 y Fl(t)m(yp)s(e)36 -b Fp(rem)29 b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f -Fl(t)m(yp)s(e)5 b Fp(&)30 b(y\))-30 2229 y Fs(4.7)68 -b(Ro)t(ots)-30 2418 y Fr(Eac)m(h)31 b(of)g(the)f(classes)i -Fp(cl_R)p Fr(,)d Fp(cl_F)p Fr(,)g Fp(cl_SF)p Fr(,)h Fp(cl_FF)p -Fr(,)f Fp(cl_DF)p Fr(,)g Fp(cl_LF)g Fr(de\014nes)g(the)i(follo)m(wing)h -(op)s(eration:)-30 2570 y Fl(t)m(yp)s(e)k Fp(sqrt)29 -b(\(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 2680 -y(x)e Fr(m)m(ust)g(b)s(e)g Fp(>)p Fr(=)h(0.)40 b(This)28 -b(function)h(returns)e(the)i(square)g(ro)s(ot)g(of)g -Fp(x)p Fr(,)g(normalized)f(to)i(b)s(e)e Fp(>)p Fr(=)g(0.)41 -b(If)28 b Fp(x)450 2789 y Fr(is)g(the)g(square)f(of)h(a)g(rational)h(n) -m(um)m(b)s(er,)d Fp(sqrt\(x\))g Fr(will)i(b)s(e)f(a)h(rational)h(n)m -(um)m(b)s(er,)d(else)j(it)f(will)g(return)450 2899 y(a)j(\015oating-p)s -(oin)m(t)g(appro)m(ximation.)-30 3051 y(The)f(classes)h -Fp(cl_RA)p Fr(,)e Fp(cl_I)h Fr(de\014ne)f(the)i(follo)m(wing)h(op)s -(eration:)-30 3203 y Fp(cl_boolean)c(sqrtp)h(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x,)e Fl(t)m(yp)s(e)5 b Fp(*)31 -b(root\))450 3313 y Fr(This)e(tests)i(whether)e Fp(x)g -Fr(is)h(a)h(p)s(erfect)e(square.)41 b(If)29 b(so,)i(it)f(returns)f -(true)g(and)h(the)g(exact)h(square)f(ro)s(ot)450 3423 -y(in)g Fp(*root)p Fr(,)f(else)i(it)g(returns)f(false.)-30 -3575 y(F)-8 b(urthermore,)30 b(for)g(in)m(tegers,)i(similarly:)-30 -3727 y Fp(cl_boolean)c(isqrt)h(\(const)f Fl(t)m(yp)s(e)5 -b Fp(&)31 b(x,)e Fl(t)m(yp)s(e)5 b Fp(*)31 b(root\))450 -3837 y(x)j Fr(should)g(b)s(e)f Fp(>)p Fr(=)h(0.)53 b(This)34 -b(function)g(sets)h Fp(*root)e Fr(to)i Fp(floor\(sqrt\(x\)\))c -Fr(and)j(returns)f(the)i(same)450 3946 y(v)-5 b(alue)31 -b(as)f Fp(sqrtp)p Fr(:)40 b(the)30 b(b)s(o)s(olean)h(v)-5 -b(alue)31 b Fp(\(expt\(*root,2\))26 b(==)k(x\))p Fr(.)-30 -4098 y(F)-8 b(or)31 b Fp(n)p Fr(th)f(ro)s(ots,)h(the)f(classes)i -Fp(cl_RA)p Fr(,)d Fp(cl_I)g Fr(de\014ne)h(the)g(follo)m(wing)i(op)s -(eration:)-30 4251 y Fp(cl_boolean)c(rootp)h(\(const)f -Fl(t)m(yp)s(e)5 b Fp(&)31 b(x,)e(const)g(cl_I&)g(n,)h -Fl(t)m(yp)s(e)5 b Fp(*)30 b(root\))450 4360 y(x)38 b -Fr(m)m(ust)g(b)s(e)f Fp(>)p Fr(=)h(0.)66 b Fp(n)38 b -Fr(m)m(ust)f(b)s(e)h Fp(>)g Fr(0.)66 b(This)37 b(tests)j(whether)e -Fp(x)g Fr(is)g(an)h Fp(n)p Fr(th)f(p)s(o)m(w)m(er)g(of)h(a)g(rational) -450 4470 y(n)m(um)m(b)s(er.)f(If)30 b(so,)h(it)g(returns)e(true)h(and)g -(the)h(exact)h(ro)s(ot)e(in)g Fp(*root)p Fr(,)g(else)h(it)g(returns)e -(false.)-30 4622 y(The)h(only)g(square)g(ro)s(ot)h(function)f(whic)m(h) -g(accepts)i(negativ)m(e)h(n)m(um)m(b)s(ers)28 b(is)i(the)h(one)f(for)g -(class)h Fp(cl_N)p Fr(:)-30 4774 y Fp(cl_N)e(sqrt)g(\(const)g(cl_N&)g -(z\))450 4884 y Fr(Returns)44 b(the)h(square)f(ro)s(ot)h(of)g -Fp(z)p Fr(,)j(as)d(de\014ned)f(b)m(y)g(the)h(form)m(ula)f -Fp(sqrt\(z\))28 b(=)i(exp\(log\(z\)/2\))p Fr(.)450 4994 -y(Con)m(v)m(ersion)j(to)g(a)f(\015oating-p)s(oin)m(t)i(t)m(yp)s(e)e(or) -h(to)g(a)f(complex)g(n)m(um)m(b)s(er)e(are)j(done)f(if)g(necessary)-8 -b(.)47 b(The)450 5103 y(range)25 b(of)f(the)h(result)f(is)g(the)h(righ) -m(t)g(half)f(plane)g Fp(realpart\(sqrt\(z\)\))i(>=)k(0)24 -b Fr(including)f(the)i(p)s(ositiv)m(e)450 5213 y(imaginary)k(axis)h -(and)f(0,)h(but)f(excluding)g(the)h(negativ)m(e)i(imaginary)d(axis.)40 -b(The)29 b(result)h(is)f(an)g(exact)450 5322 y(n)m(um)m(b)s(er)f(only)j -(if)f Fp(z)g Fr(is)g(an)h(exact)g(n)m(um)m(b)s(er.)p -eop -%%Page: 17 19 -17 18 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(17)-30 299 y Fs(4.8)68 -b(T)-11 b(ranscenden)l(tal)45 b(functions)-30 495 y Fr(The)30 -b(transcenden)m(tal)i(functions)f(return)f(an)g(exact)j(result)e(if)f -(the)i(argumen)m(t)e(is)h(exact)h(and)f(the)g(result)f(is)h(exact)-30 -605 y(as)j(w)m(ell.)54 b(Otherwise)34 b(they)g(m)m(ust)f(return)g -(inexact)j(n)m(um)m(b)s(ers)c(ev)m(en)j(if)f(the)g(argumen)m(t)g(is)g -(exact.)54 b(F)-8 b(or)35 b(example,)-30 714 y Fp(cos\(0\))29 -b(=)h(1)g Fr(returns)f(the)h(rational)i(n)m(um)m(b)s(er)c -Fp(1)p Fr(.)-30 946 y Fn(4.8.1)63 b(Exp)s(onen)m(tial)40 -b(and)h(logarithmic)g(functions)-30 1169 y Fp(cl_R)29 -b(exp)h(\(const)e(cl_R&)h(x\))-30 1278 y(cl_N)g(exp)h(\(const)e(cl_N&)h -(x\))450 1388 y Fr(Returns)35 b(the)i(exp)s(onen)m(tial)g(function)f -(of)g Fp(x)p Fr(.)58 b(This)36 b(is)g Fp(e^x)f Fr(where)h -Fp(e)g Fr(is)g(the)h(base)f(of)g(the)h(natural)450 1498 -y(logarithms.)k(The)29 b(range)i(of)g(the)f(result)h(is)f(the)h(en)m -(tire)g(complex)f(plane)g(excluding)h(0.)-30 1661 y Fp(cl_R)e(ln)h -(\(const)f(cl_R&)g(x\))450 1770 y(x)h Fr(m)m(ust)f(b)s(e)h -Fp(>)g Fr(0.)41 b(Returns)30 b(the)g(\(natural\))h(logarithm)g(of)f(x.) --30 1933 y Fp(cl_N)f(log)h(\(const)e(cl_N&)h(x\))450 -2043 y Fr(Returns)g(the)g(\(natural\))h(logarithm)g(of)f(x.)41 -b(If)29 b Fp(x)g Fr(is)g(real)h(and)f(p)s(ositiv)m(e,)i(this)e(is)h -Fp(ln\(x\))p Fr(.)39 b(In)29 b(general,)450 2153 y Fp(log\(x\))g(=)h -(log\(abs\(x\)\))d(+)j(i*phase\(x\))p Fr(.)35 b(The)21 -b(range)i(of)f(the)g(result)f(is)h(the)g(strip)g(in)f(the)h(complex)450 -2262 y(plane)30 b Fp(-pi)g(<)g(imagpart\(log\(x\)\))c(<=)k(pi)p -Fr(.)-30 2425 y Fp(cl_R)f(phase)g(\(const)g(cl_N&)g(x\))450 -2535 y Fr(Returns)41 b(the)i(angle)h(part)e(of)g Fp(x)g -Fr(in)h(its)f(p)s(olar)g(represen)m(tation)i(as)f(a)f(complex)g(n)m(um) -m(b)s(er.)75 b(That)450 2644 y(is,)41 b Fp(phase\(x\))29 -b(=)h(atan\(realpart\(x\),imagpa)o(rt\()o(x\)\))p Fr(.)60 -b(This)38 b(is)h(also)h(the)f(imaginary)g(part)g(of)450 -2754 y Fp(log\(x\))p Fr(.)52 b(The)35 b(range)g(of)g(the)g(result)g(is) -g(the)g(in)m(terv)-5 b(al)36 b Fp(-pi)29 b(<)h(phase\(x\))e(<=)i(pi)p -Fr(.)54 b(The)34 b(result)h(will)450 2864 y(b)s(e)30 -b(an)g(exact)i(n)m(um)m(b)s(er)c(only)i(if)h Fp(zerop\(x\))d -Fr(or)i(if)h Fp(x)f Fr(is)g(real)h(and)f(p)s(ositiv)m(e.)-30 -3027 y Fp(cl_R)f(log)h(\(const)e(cl_R&)h(a,)h(const)f(cl_R&)g(b\))450 -3136 y(a)35 b Fr(and)g Fp(b)g Fr(m)m(ust)f(b)s(e)h Fp(>)g -Fr(0.)56 b(Returns)35 b(the)g(logarithm)h(of)f Fp(a)g -Fr(with)h(resp)s(ect)f(to)h(base)g Fp(b)p Fr(.)55 b Fp(log\(a,b\))28 -b(=)450 3246 y(ln\(a\)/ln\(b\))p Fr(.)38 b(The)30 b(result)g(can)g(b)s -(e)g(exact)i(only)f(if)f Fp(a)g(=)g(1)g Fr(or)g(if)h -Fp(a)f Fr(and)g Fp(b)g Fr(are)g(b)s(oth)g(rational.)-30 -3409 y Fp(cl_N)f(log)h(\(const)e(cl_N&)h(a,)h(const)f(cl_N&)g(b\))450 -3518 y Fr(Returns)g(the)i(logarithm)f(of)h Fp(a)f Fr(with)g(resp)s(ect) -g(to)i(base)e Fp(b)p Fr(.)40 b Fp(log\(a,b\))29 b(=)h -(log\(a\)/log\(b\))p Fr(.)-30 3682 y Fp(cl_N)f(expt)g(\(const)g(cl_N&)g -(x,)h(const)f(cl_N&)g(y\))450 3791 y Fr(Exp)s(onen)m(tiation:)42 -b(Returns)29 b Fp(x^y)g(=)h(exp\(y*log\(x\)\))p Fr(.)-30 -3956 y(The)g(constan)m(t)i(e)e(=)g(exp\(1\))i(=)e(2.71828)6 -b(.)24 b(.)f(.)41 b(is)31 b(returned)e(b)m(y)h(the)h(follo)m(wing)h -(functions:)-30 4121 y Fp(cl_F)d(exp1)g(\(cl_float_format_t)d(f\))450 -4231 y Fr(Returns)j(e)i(as)g(a)g(\015oat)g(of)f(format)g -Fp(f)p Fr(.)-30 4394 y Fp(cl_F)f(exp1)g(\(const)g(cl_F&)g(y\))450 -4503 y Fr(Returns)g(e)i(in)f(the)h(\015oat)g(format)f(of)g -Fp(y)p Fr(.)-30 4666 y Fp(cl_F)f(exp1)g(\(void\))450 -4776 y Fr(Returns)g(e)i(as)g(a)g(\015oat)g(of)f(format)g -Fp(default_float_format)p Fr(.)-30 5007 y Fn(4.8.2)63 -b(T)-10 b(rigonometric)41 b(functions)-30 5230 y Fp(cl_R)29 -b(sin)h(\(const)e(cl_R&)h(x\))450 5340 y Fr(Returns)g -Fp(sin\(x\))p Fr(.)39 b(The)30 b(range)h(of)g(the)f(result)g(is)h(the)f -(in)m(terv)-5 b(al)32 b Fp(-1)e(<=)f(sin\(x\))g(<=)h(1)p -Fr(.)p eop -%%Page: 18 20 -18 19 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(18)-30 299 y Fp(cl_N)29 -b(sin)h(\(const)e(cl_N&)h(z\))450 408 y Fr(Returns)g -Fp(sin\(z\))p Fr(.)39 b(The)30 b(range)h(of)g(the)f(result)g(is)h(the)f -(en)m(tire)i(complex)e(plane.)-30 562 y Fp(cl_R)f(cos)h(\(const)e -(cl_R&)h(x\))450 671 y Fr(Returns)g Fp(cos\(x\))p Fr(.)39 -b(The)30 b(range)h(of)g(the)f(result)g(is)h(the)f(in)m(terv)-5 -b(al)32 b Fp(-1)e(<=)f(cos\(x\))g(<=)h(1)p Fr(.)-30 825 -y Fp(cl_N)f(cos)h(\(const)e(cl_N&)h(x\))450 934 y Fr(Returns)g -Fp(cos\(z\))p Fr(.)39 b(The)30 b(range)h(of)g(the)f(result)g(is)h(the)f -(en)m(tire)i(complex)e(plane.)-30 1088 y Fp(struct)f(cos_sin_t)f({)i -(cl_R)f(cos;)g(cl_R)g(sin;)g(};)-30 1198 y(cos_sin_t)f(cos_sin)g -(\(const)h(cl_R&)g(x\))450 1307 y Fr(Returns)20 b(b)s(oth)h -Fp(sin\(x\))f Fr(and)h Fp(cos\(x\))p Fr(.)36 b(This)20 -b(is)i(more)e(e\016cien)m(t)j(than)e(computing)g(them)f(separately)-8 -b(.)450 1417 y(The)30 b(relation)h Fp(cos^2)e(+)h(sin^2)f(=)h(1)g -Fr(will)h(hold)f(only)h(appro)m(ximately)-8 b(.)-30 1570 -y Fp(cl_R)29 b(tan)h(\(const)e(cl_R&)h(x\))-30 1680 y(cl_N)g(tan)h -(\(const)e(cl_N&)h(x\))450 1789 y Fr(Returns)g Fp(tan\(x\))g(=)h -(sin\(x\)/cos\(x\))p Fr(.)-30 1943 y Fp(cl_N)f(cis)h(\(const)e(cl_R&)h -(x\))-30 2052 y(cl_N)g(cis)h(\(const)e(cl_N&)h(x\))450 -2162 y Fr(Returns)35 b Fp(exp\(i*x\))p Fr(.)54 b(The)35 -b(name)f(`)p Fp(cis)p Fr(')h(means)g(\\cos)i Fp(+)e Fr(i)h(sin",)h(b)s -(ecause)e Fp(e^\(i*x\))29 b(=)h(cos\(x\))e(+)450 2271 -y(i*sin\(x\))p Fr(.)-30 2425 y Fp(cl_N)h(asin)g(\(const)g(cl_N&)g(z\)) -450 2534 y Fr(Returns)j Fp(arcsin\(z\))p Fr(.)44 b(This)32 -b(is)h(de\014ned)e(as)i Fp(arcsin\(z\))27 b(=)j -(log\(iz+sqrt\(1-z^2\)\)/i)d Fr(and)32 b(sat-)450 2644 -y(is\014es)d Fp(arcsin\(-z\))e(=)j(-arcsin\(z\))p Fr(.)37 -b(The)29 b(range)g(of)g(the)g(result)f(is)h(the)g(strip)f(in)g(the)h -(complex)g(do-)450 2754 y(main)34 b Fp(-pi/2)29 b(<=)h -(realpart\(arcsin\(z\)\))25 b(<=)30 b(pi/2)p Fr(,)35 -b(excluding)g(the)h(n)m(um)m(b)s(ers)c(with)j Fp(realpart)450 -2863 y(=)30 b(-pi/2)f Fr(and)h Fp(imagpart)e(<)i(0)g -Fr(and)g(the)g(n)m(um)m(b)s(ers)e(with)i Fp(realpart)e(=)i(pi/2)g -Fr(and)f Fp(imagpart)f(>)j(0)p Fr(.)-30 3017 y Fp(cl_N)e(acos)g -(\(const)g(cl_N&)g(z\))450 3126 y Fr(Returns)101 b Fp(arccos\(z\))p -Fr(.)252 b(This)101 b(is)h(de\014ned)e(as)i Fp(arccos\(z\))28 -b(=)i(pi/2)f(-)h(arcsin\(z\))e(=)450 3236 y(log\(z+i*sqrt\(1-z^2\)\)/i) -53 b Fr(and)58 b(satis\014es)h Fp(arccos\(-z\))28 b(=)i(pi)g(-)g -(arccos\(z\))p Fr(.)123 b(The)59 b(range)450 3345 y(of)48 -b(the)g(result)g(is)g(the)h(strip)e(in)h(the)g(complex)g(domain)f -Fp(0)30 b(<=)f(realpart\(arcsin\(z\)\))d(<=)j(pi)p Fr(,)450 -3455 y(excluding)46 b(the)g(n)m(um)m(b)s(ers)d(with)i -Fp(realpart)28 b(=)i(0)46 b Fr(and)f Fp(imagpart)28 b(<)i(0)45 -b Fr(and)g(the)h(n)m(um)m(b)s(ers)d(with)450 3565 y Fp(realpart)28 -b(=)i(pi)g Fr(and)g Fp(imagpart)e(>)i(0)p Fr(.)-30 3718 -y Fp(cl_R)f(atan)g(\(const)g(cl_R&)g(x,)h(const)f(cl_R&)g(y\))450 -3828 y Fr(Returns)41 b(the)i(angle)g(of)g(the)f(p)s(olar)g(represen)m -(tation)h(of)g(the)f(complex)g(n)m(um)m(b)s(er)e Fp(x+iy)p -Fr(.)75 b(This)42 b(is)450 3937 y Fp(atan\(y/x\))31 b -Fr(if)i Fp(x>0)p Fr(.)49 b(The)33 b(range)h(of)f(the)h(result)f(is)h -(the)g(in)m(terv)-5 b(al)34 b Fp(-pi)c(<)g(atan\(x,y\))d(<=)j(pi)p -Fr(.)49 b(The)450 4047 y(result)23 b(will)g(b)s(e)f(an)g(exact)i(n)m -(um)m(b)s(er)d(only)i(if)f Fp(x)30 b(>)g(0)23 b Fr(and)f -Fp(y)g Fr(is)h(the)g(exact)h Fp(0)p Fr(.)38 b(W)-10 b(ARNING:)23 -b(In)f(Common)450 4156 y(Lisp,)30 b(this)g(function)g(is)h(called)g(as) -g Fp(\(atan)e(y)h(x\))p Fr(,)g(with)g(rev)m(ersed)h(order)e(of)i -(argumen)m(ts.)-30 4310 y Fp(cl_R)e(atan)g(\(const)g(cl_R&)g(x\))450 -4419 y Fr(Returns)40 b Fp(arctan\(x\))p Fr(.)68 b(This)40 -b(is)h(the)g(same)f(as)g Fp(atan\(1,x\))p Fr(.)69 b(The)40 -b(range)h(of)g(the)g(result)f(is)h(the)450 4529 y(in)m(terv)-5 -b(al)38 b Fp(-pi/2)29 b(<)h(atan\(x\))e(<)i(pi/2)p Fr(.)59 -b(The)36 b(result)g(will)h(b)s(e)f(an)h(exact)h(n)m(um)m(b)s(er)c(only) -j(if)g Fp(x)f Fr(is)h(the)450 4639 y(exact)32 b Fp(0)p -Fr(.)-30 4792 y Fp(cl_N)d(atan)g(\(const)g(cl_N&)g(z\))450 -4902 y Fr(Returns)51 b Fp(arctan\(z\))p Fr(.)102 b(This)52 -b(is)f(de\014ned)g(as)h Fp(arctan\(z\))28 b(=)i -(\(log\(1+iz\)-log\(1-iz\)\))25 b(/)30 b(2i)450 5011 -y Fr(and)44 b(satis\014es)h Fp(arctan\(-z\))28 b(=)i(-arctan\(z\))p -Fr(.)80 b(The)44 b(range)h(of)g(the)g(result)f(is)h(the)f(strip)g(in)h -(the)450 5121 y(complex)28 b(domain)g Fp(-pi/2)h(<=)g -(realpart\(arctan\(z\)\))d(<=)j(pi/2)p Fr(,)f(excluding)h(the)g(n)m(um) -m(b)s(ers)d(with)450 5230 y Fp(realpart)i(=)i(-pi/2)49 -b Fr(and)i Fp(imagpart)28 b(>=)i(0)50 b Fr(and)g(the)h(n)m(um)m(b)s -(ers)d(with)j Fp(realpart)28 b(=)i(pi/2)50 b Fr(and)450 -5340 y Fp(imagpart)28 b(<=)i(0)p Fr(.)p eop -%%Page: 19 21 -19 20 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(19)-30 299 y(Arc)m(himedes')30 -b(constan)m(t)i(pi)e(=)g(3.14)6 b(.)23 b(.)f(.)42 b(is)30 -b(returned)g(b)m(y)g(the)g(follo)m(wing)i(functions:)-30 -469 y Fp(cl_F)d(pi)h(\(cl_float_format_t)25 b(f\))450 -578 y Fr(Returns)k(pi)i(as)f(a)h(\015oat)g(of)f(format)g -Fp(f)p Fr(.)-30 745 y Fp(cl_F)f(pi)h(\(const)f(cl_F&)g(y\))450 -855 y Fr(Returns)g(pi)i(in)f(the)g(\015oat)h(format)f(of)g -Fp(y)p Fr(.)-30 1021 y Fp(cl_F)f(pi)h(\(void\))450 1131 -y Fr(Returns)f(pi)i(as)f(a)h(\015oat)g(of)f(format)g -Fp(default_float_format)p Fr(.)-30 1369 y Fn(4.8.3)63 -b(Hyp)s(erb)s(olic)42 b(functions)-30 1597 y Fp(cl_R)29 -b(sinh)g(\(const)g(cl_R&)g(x\))450 1707 y Fr(Returns)g -Fp(sinh\(x\))p Fr(.)-30 1873 y Fp(cl_N)g(sinh)g(\(const)g(cl_N&)g(z\)) -450 1983 y Fr(Returns)g Fp(sinh\(z\))p Fr(.)39 b(The)30 -b(range)h(of)f(the)h(result)f(is)h(the)f(en)m(tire)h(complex)g(plane.) --30 2149 y Fp(cl_R)e(cosh)g(\(const)g(cl_R&)g(x\))450 -2259 y Fr(Returns)g Fp(cosh\(x\))p Fr(.)39 b(The)30 b(range)h(of)f(the) -h(result)f(is)h(the)f(in)m(terv)-5 b(al)32 b Fp(cosh\(x\))c(>=)i(1)p -Fr(.)-30 2425 y Fp(cl_N)f(cosh)g(\(const)g(cl_N&)g(z\))450 -2535 y Fr(Returns)g Fp(cosh\(z\))p Fr(.)39 b(The)30 b(range)h(of)f(the) -h(result)f(is)h(the)f(en)m(tire)h(complex)g(plane.)-30 -2701 y Fp(struct)e(cosh_sinh_t)e({)j(cl_R)f(cosh;)g(cl_R)g(sinh;)g(};) --30 2811 y(cosh_sinh_t)e(cosh_sinh)h(\(const)h(cl_R&)g(x\))450 -2921 y Fr(Returns)i(b)s(oth)g Fp(sinh\(x\))f Fr(and)h -Fp(cosh\(x\))p Fr(.)43 b(This)31 b(is)h(more)f(e\016cien)m(t)i(than)f -(computing)f(them)f(sepa-)450 3030 y(rately)-8 b(.)42 -b(The)30 b(relation)i Fp(cosh^2)c(-)i(sinh^2)f(=)h(1)g -Fr(will)h(hold)f(only)g(appro)m(ximately)-8 b(.)-30 3197 -y Fp(cl_R)29 b(tanh)g(\(const)g(cl_R&)g(x\))-30 3306 -y(cl_N)g(tanh)g(\(const)g(cl_N&)g(x\))450 3416 y Fr(Returns)g -Fp(tanh\(x\))g(=)h(sinh\(x\)/cosh\(x\))p Fr(.)-30 3582 -y Fp(cl_N)f(asinh)g(\(const)g(cl_N&)g(z\))450 3692 y -Fr(Returns)h Fp(arsinh\(z\))p Fr(.)40 b(This)31 b(is)g(de\014ned)f(as)h -Fp(arsinh\(z\))d(=)i(log\(z+sqrt\(1+z^2\)\))c Fr(and)k(satis\014es)450 -3802 y Fp(arsinh\(-z\))e(=)i(-arsinh\(z\))p Fr(.)36 b(The)26 -b(range)h(of)g(the)g(result)f(is)h(the)g(strip)f(in)g(the)h(complex)f -(domain)f Fp(-)450 3911 y(pi/2)k(<=)h(imagpart\(arsinh\(z\)\))25 -b(<=)30 b(pi/2)p Fr(,)22 b(excluding)g(the)g(n)m(um)m(b)s(ers)d(with)i -Fp(imagpart)28 b(=)i(-pi/2)450 4021 y Fr(and)g Fp(realpart)e(>)i(0)g -Fr(and)g(the)g(n)m(um)m(b)s(ers)e(with)i Fp(imagpart)e(=)i(pi/2)g -Fr(and)f Fp(realpart)g(<)h(0)p Fr(.)-30 4187 y Fp(cl_N)f(acosh)g -(\(const)g(cl_N&)g(z\))450 4297 y Fr(Returns)35 b Fp(arcosh\(z\))p -Fr(.)53 b(This)35 b(is)h(de\014ned)e(as)i Fp(arcosh\(z\))28 -b(=)i(2*log\(sqrt\(\(z+1\)/2\)+sqr)o(t\(\(z)o(-)450 4406 -y(1\)/2\)\))p Fr(.)114 b(The)55 b(range)h(of)g(the)g(result)f(is)g(the) -h(half-strip)f(in)h(the)f(complex)g(domain)g Fp(-pi)29 -b(<)450 4516 y(imagpart\(arcosh\(z\)\))c(<=)30 b(pi,)f -(realpart\(arcosh\(z\)\))c(>=)30 b(0)p Fr(,)99 b(excluding)85 -b(the)g(n)m(um)m(b)s(ers)450 4626 y(with)30 b Fp(realpart)e(=)i(0)g -Fr(and)g Fp(-pi)f(<)i(imagpart)d(<)i(0)p Fr(.)-30 4792 -y Fp(cl_N)f(atanh)g(\(const)g(cl_N&)g(z\))450 4902 y -Fr(Returns)24 b Fp(artanh\(z\))p Fr(.)37 b(This)24 b(is)h(de\014ned)f -(as)h Fp(artanh\(z\))j(=)i(\(log\(1+z\)-log\(1-z\)\))25 -b(/)30 b(2)25 b Fr(and)f(sat-)450 5011 y(is\014es)29 -b Fp(artanh\(-z\))e(=)j(-artanh\(z\))p Fr(.)37 b(The)29 -b(range)g(of)g(the)g(result)f(is)h(the)g(strip)f(in)g(the)h(complex)g -(do-)450 5121 y(main)34 b Fp(-pi/2)29 b(<=)h(imagpart\(artanh\(z\)\))25 -b(<=)30 b(pi/2)p Fr(,)35 b(excluding)g(the)h(n)m(um)m(b)s(ers)c(with)j -Fp(imagpart)450 5230 y(=)30 b(-pi/2)j Fr(and)h Fp(realpart)28 -b(<=)i(0)k Fr(and)g(the)h(n)m(um)m(b)s(ers)d(with)i Fp(imagpart)28 -b(=)i(pi/2)k Fr(and)f Fp(realpart)c(>=)450 5340 y(0)p -Fr(.)p eop -%%Page: 20 22 -20 21 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(20)-30 299 y Fn(4.8.4)63 -b(Euler)40 b(gamma)-30 498 y Fr(Euler's)30 b(constan)m(t)i(C)e(=)g -(0.577)6 b(.)24 b(.)e(.)41 b(is)31 b(returned)e(b)m(y)h(the)h(follo)m -(wing)h(functions:)-30 666 y Fp(cl_F)d(eulerconst)f -(\(cl_float_format_t)d(f\))450 776 y Fr(Returns)k(Euler's)i(constan)m -(t)g(as)g(a)g(\015oat)g(of)f(format)g Fp(f)p Fr(.)-30 -942 y Fp(cl_F)f(eulerconst)f(\(const)g(cl_F&)h(y\))450 -1051 y Fr(Returns)g(Euler's)i(constan)m(t)g(in)f(the)h(\015oat)g -(format)f(of)g Fp(y)p Fr(.)-30 1217 y Fp(cl_F)f(eulerconst)f(\(void\)) -450 1326 y Fr(Returns)h(Euler's)i(constan)m(t)g(as)g(a)g(\015oat)g(of)f -(format)g Fp(default_float_format)p Fr(.)-30 1495 y(Catalan's)i -(constan)m(t)f(G)g(=)f(0.915)6 b(.)24 b(.)e(.)42 b(is)30 -b(returned)f(b)m(y)h(the)h(follo)m(wing)h(functions:)-30 -1664 y Fp(cl_F)d(catalanconst)e(\(cl_float_format_t)f(f\))450 -1773 y Fr(Returns)j(Catalan's)j(constan)m(t)g(as)e(a)h(\015oat)g(of)g -(format)e Fp(f)p Fr(.)-30 1939 y Fp(cl_F)g(catalanconst)e(\(const)i -(cl_F&)g(y\))450 2048 y Fr(Returns)g(Catalan's)j(constan)m(t)g(in)e -(the)g(\015oat)h(format)f(of)h Fp(y)p Fr(.)-30 2214 y -Fp(cl_F)e(catalanconst)e(\(void\))450 2324 y Fr(Returns)i(Catalan's)j -(constan)m(t)g(as)e(a)h(\015oat)g(of)g(format)e Fp -(default_float_format)p Fr(.)-30 2560 y Fn(4.8.5)63 b(Riemann)39 -b(zeta)-30 2759 y Fr(Riemann's)29 b(zeta)j(function)e(at)h(an)g(in)m -(tegral)h(p)s(oin)m(t)e Fp(s>1)f Fr(is)i(returned)e(b)m(y)h(the)h -(follo)m(wing)h(functions:)-30 2927 y Fp(cl_F)d(zeta)g(\(int)h(s,)f -(cl_float_format_t)d(f\))450 3037 y Fr(Returns)j(Riemann's)h(zeta)i -(function)e(at)h Fp(s)f Fr(as)g(a)h(\015oat)g(of)g(format)e -Fp(f)p Fr(.)-30 3203 y Fp(cl_F)g(zeta)g(\(int)h(s,)f(const)g(cl_F&)g -(y\))450 3312 y Fr(Returns)g(Riemann's)h(zeta)i(function)e(at)h -Fp(s)f Fr(in)g(the)g(\015oat)h(format)f(of)h Fp(y)p Fr(.)-30 -3478 y Fp(cl_F)e(zeta)g(\(int)h(s\))450 3587 y Fr(Returns)f(Riemann's)h -(zeta)i(function)e(at)h Fp(s)f Fr(as)g(a)h(\015oat)g(of)g(format)e -Fp(default_float_format)p Fr(.)-30 3860 y Fs(4.9)68 b(F)-11 -b(unctions)44 b(on)h(in)l(tegers)-30 4155 y Fn(4.9.1)63 -b(Logical)40 b(functions)-30 4354 y Fr(In)m(tegers,)31 -b(when)d(view)m(ed)j(as)f(in)f(t)m(w)m(o's)i(complemen)m(t)e(notation,) -i(can)f(b)s(e)f(though)m(t)h(as)g(in\014nite)f(bit)h(strings)f(where) --30 4463 y(the)i(bits')f(v)-5 b(alues)31 b(ev)m(en)m(tually)h(are)f -(constan)m(t.)42 b(F)-8 b(or)31 b(example,)401 4598 y -Fp(17)47 b(=)h(......00010001)401 4702 y(-6)f(=)h(......11111010)-30 -4843 y Fr(The)33 b(logical)j(op)s(erations)e(view)g(in)m(tegers)h(as)f -(suc)m(h)f(bit)h(strings)f(and)h(op)s(erate)g(on)f(eac)m(h)i(of)f(the)g -(bit)g(p)s(ositions)f(in)-30 4952 y(parallel.)-30 5121 -y Fp(cl_I)c(lognot)g(\(const)g(cl_I&)f(x\))-30 5230 y(cl_I)h(operator)f -(~)i(\(const)f(cl_I&)g(x\))450 5340 y Fr(Logical)j(not,)f(lik)m(e)h -Fp(~x)e Fr(in)g(C.)g(This)g(is)g(the)h(same)e(as)i Fp(-1-x)p -Fr(.)p eop -%%Page: 21 23 -21 22 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(21)-30 299 y Fp(cl_I)29 -b(logand)g(\(const)g(cl_I&)f(x,)i(const)f(cl_I&)g(y\))-30 -408 y(cl_I)g(operator)f(&)i(\(const)f(cl_I&)g(x,)h(const)f(cl_I&)g(y\)) -450 518 y Fr(Logical)j(and,)e(lik)m(e)i Fp(x)e(&)g(y)g -Fr(in)g(C.)-30 673 y Fp(cl_I)f(logior)g(\(const)g(cl_I&)f(x,)i(const)f -(cl_I&)g(y\))-30 783 y(cl_I)g(operator)f(|)i(\(const)f(cl_I&)g(x,)h -(const)f(cl_I&)g(y\))450 892 y Fr(Logical)j(\(inclusiv)m(e\))g(or,)f -(lik)m(e)h Fp(x)e(|)g(y)g Fr(in)g(C.)-30 1047 y Fp(cl_I)f(logxor)g -(\(const)g(cl_I&)f(x,)i(const)f(cl_I&)g(y\))-30 1157 -y(cl_I)g(operator)f(^)i(\(const)f(cl_I&)g(x,)h(const)f(cl_I&)g(y\))450 -1267 y Fr(Exclusiv)m(e)i(or,)g(lik)m(e)h Fp(x)e(^)g(y)g -Fr(in)g(C.)-30 1422 y Fp(cl_I)f(logeqv)g(\(const)g(cl_I&)f(x,)i(const)f -(cl_I&)g(y\))450 1531 y Fr(Bit)m(wise)j(equiv)-5 b(alence,)32 -b(lik)m(e)g Fp(~\(x)d(^)h(y\))g Fr(in)g(C.)-30 1686 y -Fp(cl_I)f(lognand)g(\(const)f(cl_I&)h(x,)h(const)f(cl_I&)g(y\))450 -1796 y Fr(Bit)m(wise)j(not)f(and,)f(lik)m(e)h Fp(~\(x)f(&)g(y\))g -Fr(in)g(C.)-30 1951 y Fp(cl_I)f(lognor)g(\(const)g(cl_I&)f(x,)i(const)f -(cl_I&)g(y\))450 2060 y Fr(Bit)m(wise)j(not)f(or,)f(lik)m(e)i -Fp(~\(x)d(|)h(y\))g Fr(in)g(C.)-30 2216 y Fp(cl_I)f(logandc1)f(\(const) -h(cl_I&)g(x,)h(const)f(cl_I&)g(y\))450 2325 y Fr(Logical)j(and,)e -(complemen)m(ting)g(the)h(\014rst)e(argumen)m(t,)h(lik)m(e)i -Fp(~x)e(&)g(y)g Fr(in)g(C.)-30 2480 y Fp(cl_I)f(logandc2)f(\(const)h -(cl_I&)g(x,)h(const)f(cl_I&)g(y\))450 2590 y Fr(Logical)j(and,)e -(complemen)m(ting)g(the)h(second)f(argumen)m(t,)g(lik)m(e)i -Fp(x)e(&)g(~y)g Fr(in)g(C.)-30 2745 y Fp(cl_I)f(logorc1)g(\(const)f -(cl_I&)h(x,)h(const)f(cl_I&)g(y\))450 2854 y Fr(Logical)j(or,)f -(complemen)m(ting)f(the)g(\014rst)g(argumen)m(t,)g(lik)m(e)i -Fp(~x)d(|)i(y)f Fr(in)g(C.)-30 3009 y Fp(cl_I)f(logorc2)g(\(const)f -(cl_I&)h(x,)h(const)f(cl_I&)g(y\))450 3119 y Fr(Logical)j(or,)f -(complemen)m(ting)f(the)g(second)h(argumen)m(t,)f(lik)m(e)i -Fp(x)e(|)g(~y)f Fr(in)h(C.)-30 3274 y(These)g(op)s(erations)h(are)g -(all)g(a)m(v)-5 b(ailable)33 b(though)d(the)g(function)-30 -3429 y Fp(cl_I)f(boole)g(\(cl_boole)f(op,)h(const)g(cl_I&)g(x,)h(const) -f(cl_I&)g(y\))-30 3561 y Fr(where)35 b Fp(op)f Fr(m)m(ust)g(ha)m(v)m(e) -j(one)e(of)g(the)h(16)g(v)-5 b(alues)35 b(\(eac)m(h)i(one)e(stands)g -(for)g(a)g(function)g(whic)m(h)g(com)m(bines)g(t)m(w)m(o)h(bits)-30 -3671 y(in)m(to)31 b(one)g(bit\):)42 b Fp(boole_clr)p -Fr(,)28 b Fp(boole_set)p Fr(,)g Fp(boole_1)p Fr(,)h Fp(boole_2)p -Fr(,)f Fp(boole_c1)p Fr(,)h Fp(boole_c2)p Fr(,)f Fp(boole_and)p -Fr(,)h Fp(boole_)-30 3781 y(ior)p Fr(,)45 b Fp(boole_xor)p -Fr(,)f Fp(boole_eqv)p Fr(,)g Fp(boole_nand)p Fr(,)f Fp(boole_nor)p -Fr(,)h Fp(boole_andc1)p Fr(,)f Fp(boole_andc2)p Fr(,)g -Fp(boole_orc1)p Fr(,)-30 3890 y Fp(boole_orc2)p Fr(.)-30 -4023 y(Other)30 b(functions)g(that)h(view)f(in)m(tegers)i(as)f(bit)f -(strings:)-30 4178 y Fp(cl_boolean)e(logtest)g(\(const)h(cl_I&)g(x,)g -(const)g(cl_I&)g(y\))450 4287 y Fr(Returns)g(true)i(if)f(some)g(bit)g -(is)h(set)f(in)h(b)s(oth)e Fp(x)h Fr(and)g Fp(y)p Fr(,)g(i.e.)42 -b(if)30 b Fp(logand\(x,y\))d(!=)j(0)p Fr(.)-30 4442 y -Fp(cl_boolean)e(logbitp)g(\(const)h(cl_I&)g(n,)g(const)g(cl_I&)g(x\)) -450 4552 y Fr(Returns)g(true)i(if)f(the)h Fp(n)p Fr(th)e(bit)i(\(from)e -(the)i(righ)m(t\))g(of)f Fp(x)h Fr(is)f(set.)41 b(Bit)32 -b(0)e(is)h(the)f(least)i(signi\014can)m(t)f(bit.)-30 -4707 y Fp(uintL)e(logcount)f(\(const)h(cl_I&)g(x\))450 -4816 y Fr(Returns)g(the)h(n)m(um)m(b)s(er)d(of)j(one)h(bits)e(in)h -Fp(x)p Fr(,)g(if)f Fp(x)h(>)p Fr(=)f(0,)i(or)e(the)h(n)m(um)m(b)s(er)e -(of)i(zero)h(bits)e(in)h Fp(x)p Fr(,)g(if)f Fp(x)h(<)f -Fr(0.)-30 4972 y(The)h(follo)m(wing)i(functions)e(op)s(erate)h(on)f(in) -m(terv)-5 b(als)31 b(of)g(bits)f(in)g(in)m(tegers.)42 -b(The)30 b(t)m(yp)s(e)210 5098 y Fp(struct)46 b(cl_byte)g({)h(uintL)g -(size;)f(uintL)g(position;)g(};)-30 5230 y Fr(represen)m(ts)41 -b(the)h(bit)f(in)m(terv)-5 b(al)43 b(con)m(taining)g(the)e(bits)g -Fp(position)6 b Fr(.)20 b(.)i(.)12 b Fp(position+size-1)37 -b Fr(of)k(an)g(in)m(teger.)75 b(The)-30 5340 y(constructor)31 -b Fp(cl_byte\(size,position\))24 b Fr(constructs)31 b(a)f -Fp(cl_byte)p Fr(.)p eop -%%Page: 22 24 -22 23 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(22)-30 299 y Fp(cl_I)29 -b(ldb)h(\(const)e(cl_I&)h(n,)h(const)f(cl_byte&)f(b\))450 -408 y Fr(extracts)k(the)e(bits)g(of)h Fp(n)f Fr(describ)s(ed)f(b)m(y)h -(the)h(bit)f(in)m(terv)-5 b(al)32 b Fp(b)e Fr(and)g(returns)f(them)g -(as)i(a)f(nonnegativ)m(e)450 518 y(in)m(teger)i(with)e -Fp(b.size)e Fr(bits.)-30 670 y Fp(cl_boolean)g(ldb_test)g(\(const)g -(cl_I&)h(n,)h(const)f(cl_byte&)f(b\))450 780 y Fr(Returns)h(true)i(if)f -(some)g(bit)g(describ)s(ed)f(b)m(y)i(the)f(bit)h(in)m(terv)-5 -b(al)31 b Fp(b)f Fr(is)h(set)g(in)f Fp(n)p Fr(.)-30 932 -y Fp(cl_I)f(dpb)h(\(const)e(cl_I&)h(newbyte,)f(const)h(cl_I&)g(n,)h -(const)f(cl_byte&)f(b\))450 1041 y Fr(Returns)j Fp(n)p -Fr(,)h(with)f(the)h(bits)f(describ)s(ed)g(b)m(y)g(the)h(bit)g(in)m -(terv)-5 b(al)32 b Fp(b)g Fr(replaced)g(b)m(y)f Fp(newbyte)p -Fr(.)43 b(Only)31 b(the)450 1151 y(lo)m(w)m(est)h Fp(b.size)d -Fr(bits)h(of)h Fp(newbyte)d Fr(are)j(relev)-5 b(an)m(t.)-30 -1303 y(The)33 b(functions)f Fp(ldb)h Fr(and)f Fp(dpb)g -Fr(implicitly)i(shift.)49 b(The)32 b(follo)m(wing)j(functions)e(are)g -(their)g(coun)m(terparts)h(without)-30 1412 y(shifting:)-30 -1564 y Fp(cl_I)29 b(mask_field)f(\(const)g(cl_I&)h(n,)h(const)f -(cl_byte&)f(b\))450 1674 y Fr(returns)35 b(an)g(in)m(teger)j(with)d -(the)h(bits)g(describ)s(ed)f(b)m(y)h(the)g(bit)g(in)m(terv)-5 -b(al)37 b Fp(b)e Fr(copied)i(from)d(the)i(corre-)450 -1784 y(sp)s(onding)29 b(bits)h(in)g Fp(n)p Fr(,)g(the)h(other)g(bits)f -(zero.)-30 1936 y Fp(cl_I)f(deposit_field)e(\(const)i(cl_I&)g(newbyte,) -f(const)h(cl_I&)g(n,)g(const)g(cl_byte&)f(b\))450 2045 -y Fr(returns)e(an)h(in)m(teger)h(where)f(the)g(bits)g(describ)s(ed)f(b) -m(y)h(the)h(bit)f(in)m(terv)-5 b(al)28 b Fp(b)f Fr(come)g(from)e -Fp(newbyte)h Fr(and)450 2155 y(the)31 b(other)f(bits)g(come)h(from)e -Fp(n)p Fr(.)-30 2307 y(The)h(follo)m(wing)i(relations)f(hold:)150 -2438 y Fp(ldb)e(\(n,)h(b\))g(=)g(mask_field\(n,)d(b\))i(>>)h -(b.position)p Fr(,)150 2568 y Fp(dpb)f(\(newbyte,)f(n,)i(b\))g(=)g -(deposit_field)d(\(newbyte)h(<<)h(b.position,)f(n,)i(b\))p -Fr(,)150 2699 y Fp(deposit_field\(newbyte,n,)o(b\))24 -b(=)30 b(n)g(^)g(mask_field\(n,b\))c(^)31 b(mask_field\(new_byte,b\))p -Fr(.)-30 2851 y(The)41 b(follo)m(wing)h(op)s(erations)g(on)f(in)m -(tegers)i(as)e(bit)h(strings)f(are)g(e\016cien)m(t)i(shortcuts)e(for)g -(common)f(arithmetic)-30 2961 y(op)s(erations:)-30 3113 -y Fp(cl_boolean)28 b(oddp)h(\(const)f(cl_I&)h(x\))450 -3222 y Fr(Returns)g(true)i(if)f(the)h(least)g(signi\014can)m(t)g(bit)g -(of)f Fp(x)g Fr(is)h(1.)41 b(Equiv)-5 b(alen)m(t)31 b(to)g -Fp(mod\(x,2\))d(!=)i(0)p Fr(.)-30 3374 y Fp(cl_boolean)e(evenp)h -(\(const)f(cl_I&)h(x\))450 3484 y Fr(Returns)g(true)i(if)f(the)h(least) -g(signi\014can)m(t)g(bit)g(of)f Fp(x)g Fr(is)h(0.)41 -b(Equiv)-5 b(alen)m(t)31 b(to)g Fp(mod\(x,2\))d(==)i(0)p -Fr(.)-30 3636 y Fp(cl_I)f(operator)f(<<)i(\(const)f(cl_I&)g(x,)g(const) -g(cl_I&)g(n\))450 3746 y Fr(Shifts)h Fp(x)g Fr(b)m(y)g -Fp(n)g Fr(bits)g(to)h(the)g(left.)41 b Fp(n)30 b Fr(should)g(b)s(e)f -Fp(>)p Fr(=0.)41 b(Equiv)-5 b(alen)m(t)31 b(to)g Fp(x)f(*)g -(expt\(2,n\))p Fr(.)-30 3898 y Fp(cl_I)f(operator)f(>>)i(\(const)f -(cl_I&)g(x,)g(const)g(cl_I&)g(n\))450 4007 y Fr(Shifts)e -Fp(x)g Fr(b)m(y)h Fp(n)f Fr(bits)h(to)g(the)g(righ)m(t.)41 -b Fp(n)27 b Fr(should)g(b)s(e)g Fp(>)p Fr(=0.)40 b(Bits)28 -b(shifted)g(out)g(to)g(the)g(righ)m(t)g(are)g(thro)m(wn)450 -4117 y(a)m(w)m(a)m(y)-8 b(.)43 b(Equiv)-5 b(alen)m(t)31 -b(to)g Fp(floor\(x)e(/)h(expt\(2,n\)\))p Fr(.)-30 4269 -y Fp(cl_I)f(ash)h(\(const)e(cl_I&)h(x,)h(const)f(cl_I&)g(y\))450 -4378 y Fr(Shifts)37 b Fp(x)g Fr(b)m(y)h Fp(y)f Fr(bits)h(to)g(the)g -(left)h(\(if)f Fp(y>)p Fr(=0\))f(or)h(b)m(y)g Fp(-y)f -Fr(bits)g(to)i(the)f(righ)m(t)g(\(if)g Fp(y<)p Fr(=0\).)63 -b(In)37 b(other)450 4488 y(w)m(ords,)30 b(this)g(returns)g -Fp(floor\(x)e(*)i(expt\(2,y\)\))p Fr(.)-30 4640 y Fp(uintL)f -(integer_length)d(\(const)j(cl_I&)g(x\))450 4750 y Fr(Returns)44 -b(the)i(n)m(um)m(b)s(er)d(of)j(bits)f(\(excluding)h(the)g(sign)f(bit\)) -h(needed)f(to)h(represen)m(t)f Fp(x)g Fr(in)g(t)m(w)m(o's)450 -4859 y(complemen)m(t)31 b(notation.)45 b(This)30 b(is)i(the)g(smallest) -f(n)g Fp(>)p Fr(=)g(0)h(suc)m(h)f(that)h(-2)p Fp(^)p -Fr(n)f Fp(<)p Fr(=)g(x)g Fp(<)g Fr(2)p Fp(^)p Fr(n.)44 -b(If)31 b(x)g Fp(>)g Fr(0,)450 4969 y(this)f(is)h(the)f(unique)g(n)g -Fp(>)g Fr(0)g(suc)m(h)g(that)h(2)p Fp(^)p Fr(\(n-1\))h -Fp(<)p Fr(=)e(x)g Fp(<)g Fr(2)p Fp(^)p Fr(n.)-30 5121 -y Fp(uintL)f(ord2)g(\(const)g(cl_I&)g(x\))450 5230 y(x)e -Fr(m)m(ust)f(b)s(e)h(non-zero.)40 b(This)27 b(function)g(returns)f(the) -i(n)m(um)m(b)s(er)d(of)j(0)g(bits)f(at)h(the)g(righ)m(t)g(of)f -Fp(x)g Fr(in)g(t)m(w)m(o's)450 5340 y(complemen)m(t)j(notation.)42 -b(This)29 b(is)i(the)f(largest)i(n)e Fp(>)p Fr(=)f(0)i(suc)m(h)f(that)h -(2)p Fp(^)p Fr(n)f(divides)g Fp(x)p Fr(.)p eop -%%Page: 23 25 -23 24 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(23)-30 299 y Fp(uintL)29 -b(power2p)f(\(const)h(cl_I&)g(x\))450 408 y(x)f Fr(m)m(ust)e(b)s(e)i -Fp(>)f Fr(0.)41 b(This)27 b(function)g(c)m(hec)m(ks)j(whether)d -Fp(x)h Fr(is)g(a)g(p)s(o)m(w)m(er)g(of)g(2.)40 b(If)28 -b Fp(x)f Fr(=)h(2)p Fp(^)p Fr(\(n-1\),)i(it)e(returns)450 -518 y(n.)40 b(Else)31 b(it)g(returns)e(0.)41 b(\(See)31 -b(also)g(the)g(function)f Fp(logp)p Fr(.\))-30 736 y -Fn(4.9.2)63 b(Num)m(b)s(er)40 b(theoretic)h(functions)-30 -949 y Fp(uint32)29 b(gcd)g(\(uint32)g(a,)g(uint32)g(b\))-30 -1058 y(cl_I)g(gcd)h(\(const)e(cl_I&)h(a,)h(const)f(cl_I&)g(b\))450 -1168 y Fr(This)h(function)g(returns)f(the)h(greatest)j(common)28 -b(divisor)i(of)h Fp(a)f Fr(and)g Fp(b)p Fr(,)g(normalized)g(to)h(b)s(e) -f Fp(>)p Fr(=)f(0.)-30 1323 y Fp(cl_I)g(xgcd)g(\(const)g(cl_I&)g(a,)h -(const)f(cl_I&)g(b,)g(cl_I*)g(u,)h(cl_I*)f(v\))450 1433 -y Fr(This)34 b(function)h(\(\\extended)h(gcd"\))g(returns)e(the)h -(greatest)i(common)d(divisor)h Fp(g)f Fr(of)i Fp(a)e -Fr(and)h Fp(b)g Fr(and)450 1542 y(at)30 b(the)g(same)f(time)g(the)h -(represen)m(tation)g(of)g Fp(g)f Fr(as)h(an)g(in)m(tegral)h(linear)f -(com)m(bination)g(of)f Fp(a)g Fr(and)g Fp(b)p Fr(:)40 -b Fp(u)450 1652 y Fr(and)32 b Fp(v)g Fr(with)g Fp(u*a+v*b)d(=)h(g)p -Fr(,)j Fp(g)f(>)p Fr(=)g(0.)48 b Fp(u)32 b Fr(and)g Fp(v)g -Fr(will)h(b)s(e)f(normalized)g(to)h(b)s(e)f(of)h(smallest)f(p)s -(ossible)450 1761 y(absolute)d(v)-5 b(alue,)29 b(in)e(the)h(follo)m -(wing)h(sense:)40 b(If)27 b Fp(a)h Fr(and)f Fp(b)g Fr(are)i(non-zero,)g -(and)e Fp(abs\(a\))i(!=)g(abs\(b\))p Fr(,)e Fp(u)450 -1871 y Fr(and)j Fp(v)g Fr(will)h(satisfy)f(the)h(inequalities)h -Fp(abs\(u\))c(<=)i(abs\(b\)/\(2*g\))p Fr(,)d Fp(abs\(v\))i(<=)h -(abs\(a\)/\(2*g\))p Fr(.)-30 2026 y Fp(cl_I)f(lcm)h(\(const)e(cl_I&)h -(a,)h(const)f(cl_I&)g(b\))450 2136 y Fr(This)h(function)g(returns)f -(the)h(least)i(common)d(m)m(ultiple)h(of)g Fp(a)g Fr(and)g -Fp(b)p Fr(,)g(normalized)g(to)h(b)s(e)f Fp(>)p Fr(=)g(0.)-30 -2291 y Fp(cl_boolean)e(logp)h(\(const)f(cl_I&)h(a,)h(const)f(cl_I&)g -(b,)h(cl_RA*)e(l\))-30 2400 y(cl_boolean)g(logp)h(\(const)f(cl_RA&)h -(a,)h(const)f(cl_RA&)f(b,)i(cl_RA*)f(l\))450 2510 y(a)38 -b Fr(m)m(ust)g(b)s(e)f Fp(>)i Fr(0.)65 b Fp(b)38 b Fr(m)m(ust)f(b)s(e)h -Fp(>)p Fr(0)h(and)f(!=)g(1.)66 b(If)38 b(log\(a,b\))i(is)f(rational)g -(n)m(um)m(b)s(er,)g(this)f(function)450 2619 y(returns)29 -b(true)h(and)g(sets)h(*l)g(=)f(log\(a,b\),)j(else)e(it)g(returns)e -(false.)-30 2837 y Fn(4.9.3)63 b(Com)m(binatorial)40 -b(functions)-30 3050 y Fp(cl_I)29 b(factorial)f(\(uintL)h(n\))450 -3160 y(n)h Fr(m)m(ust)f(b)s(e)h(a)h(small)f(in)m(teger)h -Fp(>)p Fr(=)f(0.)41 b(This)30 b(function)g(returns)f(the)i(factorial)h -Fp(n)p Fr(!)40 b(=)30 b Fp(1*2*...)n(*n)p Fr(.)-30 3315 -y Fp(cl_I)f(doublefactorial)d(\(uintL)j(n\))450 3425 -y(n)48 b Fr(m)m(ust)e(b)s(e)i(a)g(small)f(in)m(teger)j -Fp(>)p Fr(=)d(0.)94 b(This)47 b(function)h(returns)e(the)i -(doublefactorial)i Fp(n)p Fr(!!)93 b(=)450 3534 y Fp(1*3*...)n(*n)30 -b Fr(or)g Fp(n)p Fr(!!)41 b(=)30 b Fp(2*4*...)n(*n)p -Fr(,)g(resp)s(ectiv)m(ely)-8 b(.)-30 3689 y Fp(cl_I)29 -b(binomial)f(\(uintL)h(n,)h(uintL)f(k\))450 3799 y(n)40 -b Fr(and)g Fp(k)g Fr(m)m(ust)g(b)s(e)f(small)h(in)m(tegers)i -Fp(>)p Fr(=)e(0.)71 b(This)40 b(function)g(returns)g(the)g(binomial)g -(co)s(e\016cien)m(t)450 3839 y Fk(\000)488 3868 y Fj(n)490 -3940 y(k)529 3839 y Fk(\001)592 3908 y Fr(=)798 3873 -y Fj(n)p Fi(!)p 698 3888 261 4 v 698 3940 a Fj(n)p Fi(!\()p -Fj(n)p Fh(\000)p Fj(k)q Fi(\)!)999 3908 y Fr(for)30 b(0)h -Fp(<)p Fr(=)e(k)i Fp(<)p Fr(=)e(n,)h(0)h(else.)-30 4159 -y Fs(4.10)68 b(F)-11 b(unctions)44 b(on)h(\015oating-p)t(oin)l(t)h(n)l -(um)l(b)t(ers)-30 4350 y Fr(Recall)31 b(that)f(a)f(\015oating-p)s(oin)m -(t)i(n)m(um)m(b)s(er)c(consists)j(of)f(a)h(sign)f Fp(s)p -Fr(,)h(an)f(exp)s(onen)m(t)g Fp(e)g Fr(and)g(a)g(man)m(tissa)h -Fp(m)p Fr(.)40 b(The)28 b(v)-5 b(alue)-30 4459 y(of)31 -b(the)f(n)m(um)m(b)s(er)e(is)j Fp(\(-1\)^s)d(*)i(2^e)g(*)g(m)p -Fr(.)-30 4592 y(Eac)m(h)h(of)g(the)f(classes)i Fp(cl_F)p -Fr(,)d Fp(cl_SF)p Fr(,)g Fp(cl_FF)p Fr(,)g Fp(cl_DF)p -Fr(,)h Fp(cl_LF)e Fr(de\014nes)i(the)h(follo)m(wing)g(op)s(erations.) --30 4747 y Fl(t)m(yp)s(e)36 b Fp(scale_float)27 b(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(sintL)f(delta\))-30 -4856 y Fl(t)m(yp)s(e)36 b Fp(scale_float)27 b(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(const)f(cl_I&)g(delta\))450 -4966 y Fr(Returns)40 b Fp(x*2^delta)p Fr(.)70 b(This)40 -b(is)h(more)f(e\016cien)m(t)j(than)d(an)h(explicit)i(m)m(ultiplication) -e(b)s(ecause)g(it)450 5075 y(copies)31 b Fp(x)f Fr(and)g(mo)s(di\014es) -f(the)h(exp)s(onen)m(t.)-30 5230 y(The)36 b(follo)m(wing)j(functions)d -(pro)m(vide)h(an)g(abstract)h(in)m(terface)g(to)g(the)f(underlying)f -(represen)m(tation)i(of)f(\015oating-)-30 5340 y(p)s(oin)m(t)30 -b(n)m(um)m(b)s(ers.)p eop -%%Page: 24 26 -24 25 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(24)-30 299 y Fp(sintL)29 -b(float_exponent)d(\(const)j Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 408 y Fr(Returns)j(the)g(exp)s(onen)m(t)h Fp(e)f -Fr(of)h Fp(x)p Fr(.)50 b(F)-8 b(or)34 b Fp(x)c(=)g(0.0)p -Fr(,)k(this)f(is)h(0.)50 b(F)-8 b(or)35 b Fp(x)e Fr(non-zero,)i(this)f -(is)f(the)h(unique)450 518 y(in)m(teger)e(with)e Fp(2^\(e-1\))e(<=)i -(abs\(x\))f(<)h(2^e)p Fr(.)-30 701 y Fp(sintL)f(float_radix)e(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 811 y Fr(Returns)f(the)i(base)g(of) -f(the)h(\015oating-p)s(oin)m(t)g(represen)m(tation.)42 -b(This)30 b(is)g(alw)m(a)m(ys)i Fp(2)p Fr(.)-30 994 y -Fl(t)m(yp)s(e)k Fp(float_sign)27 b(\(const)i Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 1103 y Fr(Returns)f(the)i(sign)f -Fp(s)g Fr(of)h Fp(x)f Fr(as)h(a)f(\015oat.)42 b(The)30 -b(v)-5 b(alue)31 b(is)f(1)h(for)f Fp(x)g(>)p Fr(=)g(0,)h(-1)g(for)f -Fp(x)g(<)g Fr(0.)-30 1287 y Fp(uintL)f(float_digits)e(\(const)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 1396 y Fr(Returns)f(the)h(n)m(um)m -(b)s(er)e(of)i(man)m(tissa)g(bits)g(in)g(the)g(\015oating-p)s(oin)m(t)h -(represen)m(tation)g(of)f Fp(x)p Fr(,)g(including)450 -1506 y(the)h(hidden)e(bit.)40 b(The)30 b(v)-5 b(alue)31 -b(only)g(dep)s(ends)d(on)i(the)h(t)m(yp)s(e)f(of)h Fp(x)p -Fr(,)f(not)h(on)f(its)h(v)-5 b(alue.)-30 1689 y Fp(uintL)29 -b(float_precision)d(\(const)j Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 1798 y Fr(Returns)c(the)h(n)m(um)m(b)s(er)d(of)j -(signi\014can)m(t)h(man)m(tissa)f(bits)g(in)f(the)h(\015oating-p)s(oin) -m(t)h(represen)m(tation)g(of)f Fp(x)p Fr(.)450 1908 y(Since)j -(denormalized)e(n)m(um)m(b)s(ers)g(are)h(not)h(supp)s(orted,)e(this)i -(is)f(the)h(same)f(as)h Fp(float_digits\(x\))25 b Fr(if)450 -2018 y Fp(x)30 b Fr(is)g(non-zero,)i(and)d(0)i(if)f Fp(x)h -Fr(=)f(0.)-30 2213 y(The)f(complete)g(in)m(ternal)h(represen)m(tation)h -(of)e(a)g(\015oat)h(is)g(enco)s(ded)e(in)h(the)h(t)m(yp)s(e)f -Fp(decoded_float)d Fr(\(or)j Fp(decoded_)-30 2322 y(sfloat)p -Fr(,)g Fp(decoded_ffloat)p Fr(,)e Fp(decoded_dfloat)p -Fr(,)f Fp(decoded_lfloat)p Fr(,)h(resp)s(ectiv)m(ely\),)32 -b(de\014ned)e(b)m(y)210 2475 y Fp(struct)46 b(decoded_)p -Fl(t)m(yp)s(e)5 b Fp(float)45 b({)592 2578 y Fl(t)m(yp)s(e)53 -b Fp(mantissa;)45 b(cl_I)i(exponent;)e Fl(t)m(yp)s(e)53 -b Fp(sign;)210 2682 y(};)-30 2840 y Fr(and)30 b(returned)f(b)m(y)h(the) -h(function)-30 3035 y Fp(decoded_)p Fl(t)m(yp)s(e)5 b -Fp(float)27 b(decode_float)g(\(const)i Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x\))450 3145 y Fr(F)-8 b(or)26 b Fp(x)e Fr(non-zero,)j -(this)d(returns)g Fp(\(-1\)^s)p Fr(,)h Fp(e)p Fr(,)g -Fp(m)g Fr(with)f Fp(x)30 b(=)g(\(-1\)^s)f(*)h(2^e)g(*)g(m)24 -b Fr(and)g Fp(0.5)30 b(<=)g(m)g(<)g(1.0)p Fr(.)450 3255 -y(F)-8 b(or)35 b Fp(x)f Fr(=)h(0,)h(it)f(returns)e Fp(\(-1\)^s)p -Fr(=1,)h Fp(e)p Fr(=0,)i Fp(m)p Fr(=0.)53 b Fp(e)34 b -Fr(is)g(the)h(same)f(as)h(returned)e(b)m(y)i(the)f(function)450 -3364 y Fp(float_exponent)p Fr(.)-30 3559 y(A)c(complete)h(deco)s(ding)g -(in)f(terms)f(of)i(in)m(tegers)g(is)g(pro)m(vided)f(as)g(t)m(yp)s(e)210 -3712 y Fp(struct)46 b(cl_idecoded_float)d({)592 3815 -y(cl_I)j(mantissa;)g(cl_I)g(exponent;)g(cl_I)g(sign;)210 -3919 y(};)-30 4077 y Fr(b)m(y)30 b(the)h(follo)m(wing)h(function:)-30 -4272 y Fp(cl_idecoded_float)26 b(integer_decode_float)e(\(const)29 -b Fl(t)m(yp)s(e)5 b Fp(&)31 b(x\))450 4382 y Fr(F)-8 -b(or)38 b Fp(x)e Fr(non-zero,)k(this)d(returns)f Fp(\(-1\)^s)p -Fr(,)h Fp(e)p Fr(,)h Fp(m)f Fr(with)g Fp(x)30 b(=)g(\(-1\)^s)e(*)i(2^e) -g(*)g(m)37 b Fr(and)f Fp(m)h Fr(an)g(in)m(teger)450 4491 -y(with)e Fp(float_digits\(x\))30 b Fr(bits.)54 b(F)-8 -b(or)36 b Fp(x)e Fr(=)h(0,)h(it)g(returns)d Fp(\(-1\)^s)p -Fr(=1,)i Fp(e)p Fr(=0,)h Fp(m)p Fr(=0.)54 b(W)-10 b(ARNING:)450 -4601 y(The)27 b(exp)s(onen)m(t)h Fp(e)f Fr(is)h(not)f(the)h(same)f(as)h -(the)g(one)g(returned)e(b)m(y)h(the)h(functions)f Fp(decode_float)e -Fr(and)450 4711 y Fp(float_exponent)p Fr(.)-30 4906 y(Some)k(other)i -(function,)f(implemen)m(ted)f(only)i(for)f(class)h Fp(cl_F)p -Fr(:)-30 5101 y Fp(cl_F)e(float_sign)f(\(const)g(cl_F&)h(x,)h(const)f -(cl_F&)g(y\))450 5210 y Fr(This)d(returns)g(a)i(\015oating)g(p)s(oin)m -(t)f(n)m(um)m(b)s(er)e(whose)h(precision)i(and)e(absolute)i(v)-5 -b(alue)28 b(is)f(that)h(of)f Fp(y)g Fr(and)450 5320 y(whose)j(sign)h -(is)f(that)h(of)f Fp(x)p Fr(.)41 b(If)30 b Fp(x)g Fr(is)g(zero,)i(it)f -(is)f(treated)h(as)g(p)s(ositiv)m(e.)42 b(Same)29 b(for)h -Fp(y)p Fr(.)p eop -%%Page: 25 27 -25 26 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(25)-30 299 y Fs(4.11)68 -b(Con)l(v)l(ersion)46 b(functions)-30 612 y Fn(4.11.1)63 -b(Con)m(v)m(ersion)41 b(to)g(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers) --30 821 y Fr(The)30 b(t)m(yp)s(e)g Fp(cl_float_format_t)c -Fr(describ)s(es)k(a)g(\015oating-p)s(oin)m(t)i(format.)-30 -1003 y Fp(cl_float_format_t)26 b(cl_float_format)g(\(uintL)j(n\))450 -1113 y Fr(Returns)45 b(the)g(smallest)h(\015oat)g(format)f(whic)m(h)h -(guaran)m(tees)g(at)h(least)g Fp(n)e Fr(decimal)g(digits)h(in)g(the)450 -1222 y(man)m(tissa)30 b(\(after)i(the)e(decimal)g(p)s(oin)m(t\).)-30 -1397 y Fp(cl_float_format_t)c(cl_float_format)g(\(const)j(cl_F&)f(x\)) -450 1507 y Fr(Returns)h(the)i(\015oating)g(p)s(oin)m(t)g(format)e(of)i -Fp(x)p Fr(.)-30 1682 y Fp(cl_float_format_t)26 b(default_float_format) -450 1792 y Fr(Global)d(v)-5 b(ariable:)37 b(the)23 b(default)f(\015oat) -g(format)g(used)f(when)g(con)m(v)m(erting)j(rational)f(n)m(um)m(b)s -(ers)c(to)k(\015oats.)-30 1974 y(T)-8 b(o)30 b(con)m(v)m(ert)h(a)f -(real)g(n)m(um)m(b)s(er)d(to)j(a)g(\015oat,)g(eac)m(h)h(of)e(the)h(t)m -(yp)s(es)f Fp(cl_R)p Fr(,)g Fp(cl_F)p Fr(,)f Fp(cl_I)p -Fr(,)h Fp(cl_RA)p Fr(,)g Fp(int)p Fr(,)f Fp(unsigned)h(int)p -Fr(,)-30 2084 y Fp(float)p Fr(,)g Fp(double)g Fr(de\014nes)g(the)i -(follo)m(wing)h(op)s(erations:)-30 2267 y Fp(cl_F)d(cl_float)f(\(const) -h Fl(t)m(yp)s(e)5 b Fp(&x,)30 b(cl_float_format_t)25 -b(f\))450 2376 y Fr(Returns)k Fp(x)h Fr(as)h(a)g(\015oat)g(of)f(format) -g Fp(f)p Fr(.)-30 2551 y Fp(cl_F)f(cl_float)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&x,)30 b(const)f(cl_F&)g(y\))450 -2661 y Fr(Returns)g Fp(x)h Fr(in)h(the)f(\015oat)h(format)f(of)g -Fp(y)p Fr(.)-30 2836 y Fp(cl_F)f(cl_float)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&x\))450 2945 y Fr(Returns)24 b -Fp(x)g Fr(as)h(a)g(\015oat)h(of)f(format)f Fp(default_float_format)19 -b Fr(if)24 b(it)i(is)e(an)h(exact)h(n)m(um)m(b)s(er,)e(or)h -Fp(x)f Fr(itself)450 3055 y(if)30 b(it)h(is)g(already)g(a)f(\015oat.) --30 3238 y(Of)g(course,)h(con)m(v)m(erting)h(a)f(n)m(um)m(b)s(er)d(to)j -(a)f(\015oat)i(can)e(lose)h(precision.)-30 3388 y(Ev)m(ery)g -(\015oating-p)s(oin)m(t)g(format)f(has)g(some)g(c)m(haracteristic)j(n)m -(um)m(b)s(ers:)-30 3571 y Fp(cl_F)c(most_positive_float)c -(\(cl_float_format_t)h(f\))450 3680 y Fr(Returns)j(the)i(largest)h -(\(most)e(p)s(ositiv)m(e\))i(\015oating)f(p)s(oin)m(t)f(n)m(um)m(b)s -(er)e(in)i(\015oat)h(format)f Fp(f)p Fr(.)-30 3855 y -Fp(cl_F)f(most_negative_float)c(\(cl_float_format_t)h(f\))450 -3965 y Fr(Returns)j(the)i(smallest)g(\(most)f(negativ)m(e\))j -(\015oating)e(p)s(oin)m(t)f(n)m(um)m(b)s(er)e(in)i(\015oat)h(format)f -Fp(f)p Fr(.)-30 4140 y Fp(cl_F)f(least_positive_float)c -(\(cl_float_format_t)g(f\))450 4249 y Fr(Returns)g(the)h(least)h(p)s -(ositiv)m(e)g(\015oating)g(p)s(oin)m(t)e(n)m(um)m(b)s(er)f(\(i.e.)40 -b Fp(>)26 b Fr(0)g(but)f(closest)i(to)g(0\))g(in)e(\015oat)i(format)450 -4359 y Fp(f)p Fr(.)-30 4534 y Fp(cl_F)i(least_negative_float)c -(\(cl_float_format_t)g(f\))450 4644 y Fr(Returns)e(the)i(least)h -(negativ)m(e)g(\015oating)g(p)s(oin)m(t)e(n)m(um)m(b)s(er)e(\(i.e.)40 -b Fp(<)24 b Fr(0)h(but)e(closest)j(to)f(0\))g(in)g(\015oat)g(format)450 -4753 y Fp(f)p Fr(.)-30 4928 y Fp(cl_F)k(float_epsilon)e -(\(cl_float_format_t)e(f\))450 5038 y Fr(Returns)k(the)i(smallest)g -(\015oating)g(p)s(oin)m(t)f(n)m(um)m(b)s(er)e(e)j Fp(>)f -Fr(0)h(suc)m(h)f(that)h Fp(1+e)e(!=)h(1)p Fr(.)-30 5213 -y Fp(cl_F)f(float_negative_epsilon)24 b(\(cl_float_format_t)i(f\))450 -5322 y Fr(Returns)j(the)i(smallest)g(\015oating)g(p)s(oin)m(t)f(n)m(um) -m(b)s(er)e(e)j Fp(>)f Fr(0)h(suc)m(h)f(that)h Fp(1-e)e(!=)h(1)p -Fr(.)p eop -%%Page: 26 28 -26 27 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(26)-30 299 y Fn(4.11.2)63 -b(Con)m(v)m(ersion)41 b(to)g(rational)g(n)m(um)m(b)s(ers)-30 -488 y Fr(Eac)m(h)31 b(of)g(the)f(classes)i Fp(cl_R)p -Fr(,)d Fp(cl_RA)p Fr(,)g Fp(cl_F)g Fr(de\014nes)h(the)g(follo)m(wing)i -(op)s(eration:)-30 639 y Fp(cl_RA)d(rational)f(\(const)h -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 749 y Fr(Returns)j(the)h(v)-5 -b(alue)35 b(of)f Fp(x)f Fr(as)h(an)g(exact)i(n)m(um)m(b)s(er.)49 -b(If)33 b Fp(x)h Fr(is)g(already)g(an)g(exact)h(n)m(um)m(b)s(er,)e -(this)h(is)g Fp(x)p Fr(.)450 858 y(If)g Fp(x)g Fr(is)g(a)g -(\015oating-p)s(oin)m(t)i(n)m(um)m(b)s(er,)d(the)h(v)-5 -b(alue)35 b(is)f(a)h(rational)g(n)m(um)m(b)s(er)d(whose)i(denominator)f -(is)i(a)450 968 y(p)s(o)m(w)m(er)30 b(of)h(2.)-30 1119 -y(In)f(order)g(to)h(con)m(v)m(ert)h(bac)m(k,)f(sa)m(y)-8 -b(,)32 b Fp(\(cl_F\)\(cl_R\)"1/3")25 b Fr(to)31 b Fp(1/3)p -Fr(,)f(there)h(is)f(the)h(function)-30 1271 y Fp(cl_RA)e(rationalize)e -(\(const)i(cl_R&)g(x\))450 1380 y Fr(If)36 b Fp(x)f Fr(is)h(a)h -(\015oating-p)s(oin)m(t)g(n)m(um)m(b)s(er,)f(it)g(actually)i(represen)m -(ts)e(an)g(in)m(terv)-5 b(al)37 b(of)f(real)h(n)m(um)m(b)s(ers,)f(and) -450 1490 y(this)d(function)g(returns)e(the)i(rational)i(n)m(um)m(b)s -(er)30 b(with)j(smallest)g(denominator)f(\(and)h(smallest)g(n)m(u-)450 -1600 y(merator,)e(in)f(magnitude\))g(whic)m(h)g(lies)i(in)e(this)h(in)m -(terv)-5 b(al.)42 b(If)30 b Fp(x)h Fr(is)f(already)i(an)e(exact)i(n)m -(um)m(b)s(er,)d(this)450 1709 y(function)h(returns)f -Fp(x)p Fr(.)-30 1861 y(If)h Fp(x)g Fr(is)g(an)m(y)h(\015oat,)g(one)g -(has)150 1991 y Fp(cl_float\(rational\(x\),x\))24 b(=)30 -b(x)150 2122 y(cl_float\(rationalize\(x\),)o(x\))24 b(=)30 -b(x)-30 2367 y Fs(4.12)68 b(Random)46 b(n)l(um)l(b)t(er)e(generators) --30 2556 y Fr(A)j(random)e(generator)j(is)f(a)h(mac)m(hine)e(whic)m(h)h -(pro)s(duces)e(\(pseudo-\)random)h(n)m(um)m(b)s(ers.)88 -b(The)46 b(include)h(\014le)-30 2666 y Fp()40 -b Fr(de\014nes)j(a)h(class)h Fp(random_state)c Fr(whic)m(h)i(con)m -(tains)j(the)e(state)h(of)f(a)g(random)f(generator.)-30 -2775 y(If)29 b(y)m(ou)g(mak)m(e)g(a)g(cop)m(y)h(of)f(the)h(random)d(n)m -(um)m(b)s(er)g(generator,)j(the)g(original)g(one)f(and)f(the)i(cop)m(y) -f(will)h(pro)s(duce)e(the)-30 2885 y(same)i(sequence)h(of)f(random)f(n) -m(um)m(b)s(ers.)-30 3015 y(The)j(follo)m(wing)i(functions)d(return)h -(\(pseudo-\)random)e(n)m(um)m(b)s(ers)g(in)i(di\013eren)m(t)h(formats.) -45 b(Calling)33 b(one)g(of)f(these)-30 3125 y(mo)s(di\014es)d(the)h -(state)i(of)e(the)h(random)e(n)m(um)m(b)s(er)f(generator)j(in)f(a)h -(complicated)g(but)f(deterministic)g(w)m(a)m(y)-8 b(.)-30 -3255 y(The)30 b(global)i(v)-5 b(ariable)210 3380 y Fp(random_state)44 -b(default_random_state)-30 3511 y Fr(con)m(tains)29 b(a)f(default)f -(random)f(n)m(um)m(b)s(er)f(generator.)41 b(It)28 b(is)f(used)g(when)g -(the)g(functions)h(b)s(elo)m(w)f(are)h(called)h(without)-30 -3620 y Fp(random_state)e Fr(argumen)m(t.)-30 3772 y Fp(uint32)i -(random32)f(\(random_state&)e(randomstate\))-30 3881 -y(uint32)j(random32)f(\(\))450 3991 y Fr(Returns)h(a)i(random)e -(unsigned)g(32-bit)j(n)m(um)m(b)s(er.)38 b(All)31 b(bits)f(are)h -(equally)g(random.)-30 4143 y Fp(cl_I)e(random_I)f(\(random_state&)f -(randomstate,)g(const)i(cl_I&)g(n\))-30 4252 y(cl_I)g(random_I)f -(\(const)h(cl_I&)g(n\))450 4362 y(n)i Fr(m)m(ust)e(b)s(e)h(an)h(in)m -(teger)h Fp(>)f Fr(0.)42 b(This)31 b(function)f(returns)g(a)h(random)e -(in)m(teger)j Fp(x)f Fr(in)f(the)h(range)g Fp(0)g(<=)e(x)450 -4471 y(<)h(n)p Fr(.)-30 4623 y Fp(cl_F)f(random_F)f(\(random_state&)f -(randomstate,)g(const)i(cl_F&)g(n\))-30 4732 y(cl_F)g(random_F)f -(\(const)h(cl_F&)g(n\))450 4842 y(n)d Fr(m)m(ust)f(b)s(e)h(a)h(\015oat) -g Fp(>)f Fr(0.)40 b(This)26 b(function)g(returns)f(a)i(random)d -(\015oating-p)s(oin)m(t)k(n)m(um)m(b)s(er)c(of)j(the)g(same)450 -4952 y(format)j(as)g Fp(n)g Fr(in)g(the)h(range)g Fp(0)f(<=)f(x)i(<)f -(n)p Fr(.)-30 5103 y Fp(cl_R)f(random_R)f(\(random_state&)f -(randomstate,)g(const)i(cl_R&)g(n\))-30 5213 y(cl_R)g(random_R)f -(\(const)h(cl_R&)g(n\))450 5322 y Fr(Beha)m(v)m(es)j(lik)m(e)g -Fp(random_I)c Fr(if)i Fp(n)g Fr(is)h(an)f(in)m(teger)i(and)e(lik)m(e)h -Fp(random_F)d Fr(if)j Fp(n)f Fr(is)g(a)h(\015oat.)p eop -%%Page: 27 29 -27 28 bop -30 -116 a Fr(Chapter)30 b(4:)41 b(F)-8 b(unctions)31 -b(on)f(n)m(um)m(b)s(ers)2523 b(27)-30 299 y Fs(4.13)68 -b(Obfuscating)46 b(op)t(erators)-30 491 y Fr(The)36 b(mo)s(difying)g -(C/C)p Fp(++)g Fr(op)s(erators)h Fp(+=)p Fr(,)h Fp(-=)p -Fr(,)g Fp(*=)p Fr(,)g Fp(/=)p Fr(,)g Fp(&=)p Fr(,)g Fp(|=)p -Fr(,)g Fp(^=)p Fr(,)h Fp(<<=)p Fr(,)e Fp(>>=)f Fr(are)i(not)f(a)m(v)-5 -b(ailable)39 b(b)m(y)e(default)-30 601 y(b)s(ecause)45 -b(their)f(use)g(tends)h(to)g(mak)m(e)g(programs)e(unreadable.)83 -b(It)44 b(is)h(trivial)h(to)f(get)h(a)m(w)m(a)m(y)g(without)f(them.)-30 -711 y(Ho)m(w)m(ev)m(er,)33 b(if)d(y)m(ou)h(feel)g(that)g(y)m(ou)g -(absolutely)g(need)f(these)h(op)s(erators)f(to)h(get)h(happ)m(y)-8 -b(,)30 b(then)g(add)210 839 y Fp(#define)46 b(WANT_OBFUSCATING_OPERATO) -o(RS)-30 974 y Fr(to)37 b(the)g(b)s(eginning)f(of)h(y)m(our)g(source)g -(\014les,)h(b)s(efore)f(the)g(inclusion)f(of)h(an)m(y)g(CLN)f(include)h -(\014les.)60 b(This)36 b(\015ag)h(will)-30 1083 y(enable)31 -b(the)f(follo)m(wing)i(op)s(erators:)-30 1218 y(F)-8 -b(or)31 b(the)g(classes)g Fp(cl_N)p Fr(,)f Fp(cl_R)p -Fr(,)f Fp(cl_RA)p Fr(,)g Fp(cl_F)p Fr(,)h Fp(cl_SF)p -Fr(,)f Fp(cl_FF)p Fr(,)g Fp(cl_DF)p Fr(,)g Fp(cl_LF)p -Fr(:)-30 1377 y Fl(t)m(yp)s(e)5 b Fp(&)30 b(operator)e(+=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 1487 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(-=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 1597 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(*=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 1706 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(/=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 1841 y Fr(F)-8 b(or)31 b(the)g(class)g Fp(cl_I)p -Fr(:)-30 2000 y Fl(t)m(yp)s(e)5 b Fp(&)30 b(operator)e(+=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2110 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(-=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2219 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(*=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2329 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(&=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2438 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(|=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2548 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(^=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2658 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(<<=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2767 y Fl(t)m(yp)s(e)g Fp(&)30 b(operator)e(>>=)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&,)30 b(const)f Fl(t)m(yp)s(e)5 -b Fp(&\))-30 2902 y Fr(F)-8 b(or)31 b(the)g(classes)g -Fp(cl_N)p Fr(,)f Fp(cl_R)p Fr(,)f Fp(cl_RA)p Fr(,)g Fp(cl_I)p -Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p Fr(,)g Fp(cl_FF)p -Fr(,)h Fp(cl_DF)p Fr(,)f Fp(cl_LF)p Fr(:)-30 3061 y Fl(t)m(yp)s(e)5 -b Fp(&)30 b(operator)e(++)i(\()p Fl(t)m(yp)s(e)5 b Fp(&)30 -b(x\))450 3171 y Fr(The)g(pre\014x)f(op)s(erator)i Fp(++x)p -Fr(.)-30 3330 y Fp(void)e(operator)f(++)i(\()p Fl(t)m(yp)s(e)5 -b Fp(&)30 b(x,)g(int\))450 3440 y Fr(The)g(p)s(ost\014x)f(op)s(erator)i -Fp(x++)p Fr(.)-30 3599 y Fl(t)m(yp)s(e)5 b Fp(&)30 b(operator)e(--)i -(\()p Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 3709 y Fr(The)g(pre\014x)f -(op)s(erator)i Fp(--x)p Fr(.)-30 3868 y Fp(void)e(operator)f(--)i(\()p -Fl(t)m(yp)s(e)5 b Fp(&)30 b(x,)g(int\))450 3978 y Fr(The)g(p)s -(ost\014x)f(op)s(erator)i Fp(x--)p Fr(.)-30 4137 y(Note)37 -b(that)g(b)m(y)f(using)g(these)h(obfuscating)f(op)s(erators,)i(y)m(ou)f -(w)m(ouldn't)f(gain)h(e\016ciency:)53 b(In)35 b(CLN)h(`)p -Fp(x)30 b(+=)g(y;)p Fr(')36 b(is)-30 4247 y(exactly)c(the)f(same)e(as)i -(`)p Fp(x)f(=)g(x+y;)p Fr(',)g(not)h(more)e(e\016cien)m(t.)p -eop -%%Page: 28 30 -28 29 bop -30 -116 a Fr(Chapter)30 b(5:)41 b(Input/Output)2844 -b(28)-30 299 y Fo(5)80 b(Input/Output)-30 758 y Fs(5.1)68 -b(In)l(ternal)46 b(and)f(prin)l(ted)g(represen)l(tation)-30 -973 y Fr(All)31 b(computations)f(deal)h(with)f(the)h(in)m(ternal)g -(represen)m(tations)g(of)g(the)f(n)m(um)m(b)s(ers.)-30 -1130 y(Ev)m(ery)36 b(n)m(um)m(b)s(er)d(has)j(an)f(external)i(represen)m -(tation)g(as)f(a)g(sequence)g(of)g(ASCI)s(I)e(c)m(haracters.)58 -b(Sev)m(eral)37 b(external)-30 1239 y(represen)m(tations)31 -b(ma)m(y)f(denote)h(the)g(same)f(n)m(um)m(b)s(er,)e(for)i(example,)g -Fp(")p Fr(20.0)p Fp(")i Fr(and)d Fp(")p Fr(20.000)p Fp(")p -Fr(.)-30 1397 y(Con)m(v)m(erting)34 b(an)f(in)m(ternal)h(to)g(an)e -(external)i(represen)m(tation)h(is)e(called)h(\\prin)m(ting",)h(con)m -(v)m(erting)f(an)f(external)h(to)-30 1506 y(an)24 b(in)m(ternal)h -(represen)m(tation)g(is)f(called)h(\\reading".)40 b(In)24 -b(CLN,)f(it)i(is)f(alw)m(a)m(ys)i(true)e(that)h(con)m(v)m(ersion)g(of)f -(an)g(in)m(ternal)-30 1616 y(to)j(an)e(external)i(represen)m(tation)g -(and)e(then)h(bac)m(k)g(to)h(an)e(in)m(ternal)i(represen)m(tation)g -(will)f(yield)g(the)g(same)f(in)m(ternal)-30 1725 y(represen)m(tation.) -42 b(Sym)m(b)s(olically:)f Fp(read\(print\(x\)\))26 b(==)k(x)p -Fr(.)40 b(This)30 b(is)g(called)i(\\prin)m(t-read)e(consistency".)-30 -1882 y(Di\013eren)m(t)i(t)m(yp)s(es)e(of)h(n)m(um)m(b)s(ers)d(ha)m(v)m -(e)j(di\013eren)m(t)g(external)g(represen)m(tations)h(\(case)f(is)g -(insigni\014can)m(t\):)-30 2076 y(In)m(tegers)167 b(External)35 -b(represen)m(tation:)50 b Fl(sign)p Fp({)p Fl(digit)r -Fp(}+)p Fr(.)j(The)34 b(reader)g(also)h(accepts)h(the)f(Common)d(Lisp)h -(syn-)450 2185 y(taxes)43 b Fl(sign)p Fp({)p Fl(digit)r -Fp(}+.)g Fr(with)f(a)h(trailing)g(dot)g(for)f(decimal)g(in)m(tegers)i -(and)e(the)h Fp(#)p Fl(n)p Fp(R)p Fr(,)h Fp(#b)p Fr(,)h -Fp(#o)p Fr(,)h Fp(#x)450 2295 y Fr(pre\014xes.)-30 2477 -y(Rational)32 b(n)m(um)m(b)s(ers)450 2586 y(External)26 -b(represen)m(tation:)39 b Fl(sign)p Fp({)p Fl(digit)r -Fp(}+/{)p Fl(digit)r Fp(}+)p Fr(.)g(The)25 b Fp(#)p Fl(n)p -Fp(R)p Fr(,)h Fp(#b)p Fr(,)g Fp(#o)p Fr(,)g Fp(#x)f Fr(pre\014xes)g -(are)h(allo)m(w)m(ed)450 2696 y(here)k(as)h(w)m(ell.)-30 -2878 y(Floating-p)s(oin)m(t)i(n)m(um)m(b)s(ers)450 2988 -y(External)58 b(represen)m(tation:)96 b Fl(sign)p Fp({)p -Fl(digit)r Fp(})p Fr(*)p Fl(exp)s(onen)m(t)60 b Fr(or)d -Fl(sign)p Fp({)p Fl(digit)r Fp(})p Fr(*)p Fp(.{)p Fl(digit)r -Fp(})p Fr(*)p Fl(exp)s(onen)m(t)k Fr(or)450 3097 y Fl(sign)p -Fp({)p Fl(digit)r Fp(})p Fr(*)p Fp(.{)p Fl(digit)r Fp(}+)p -Fr(.)45 b(A)31 b(precision)h(sp)s(eci\014er)f(of)h(the)f(form)p -2693 3097 28 4 v 63 w Fl(prec)37 b Fr(ma)m(y)31 b(b)s(e)g(app)s(ended.) -42 b(There)450 3207 y(m)m(ust)g(b)s(e)h(at)h(least)h(one)e(digit)h(in)f -(the)h(non-exp)s(onen)m(t)f(part.)80 b(The)42 b(exp)s(onen)m(t)i(has)f -(the)g(syn)m(tax)450 3316 y Fl(expmark)m(er)36 b(expsign)30 -b Fp({)p Fl(digit)r Fp(}+)p Fr(.)41 b(The)30 b(exp)s(onen)m(t)g(mark)m -(er)g(is)630 3462 y(`)p Fp(s)p Fr(')h(for)f(short-\015oats,)630 -3608 y(`)p Fp(f)p Fr(')h(for)f(single-\015oats,)630 3754 -y(`)p Fp(d)p Fr(')h(for)f(double-\015oats,)630 3900 y(`)p -Fp(L)p Fr(')h(for)f(long-\015oats,)450 4082 y(or)23 b(`)p -Fp(e)p Fr(',)h(whic)m(h)f(denotes)g(a)g(default)f(\015oat)i(format.)37 -b(The)22 b(precision)h(sp)s(ecifying)g(su\016x)e(has)i(the)f(syn)m(tax) -p 450 4191 V 477 4191 a Fl(prec)48 b Fr(where)41 b Fl(prec)48 -b Fr(denotes)42 b(the)g(n)m(um)m(b)s(er)e(of)i(v)-5 b(alid)43 -b(man)m(tissa)f(digits)g(\(in)h(decimal,)i(excluding)450 -4301 y(leading)31 b(zero)s(es\),)h(cf.)41 b(also)31 b(function)f(`)p -Fp(cl_float_format)p Fr('.)-30 4483 y(Complex)f(n)m(um)m(b)s(ers)450 -4592 y(External)i(represen)m(tation:)630 4738 y(In)36 -b(algebraic)j(notation:)54 b Fl(realpart)r Fp(+)p Fl(imagpart)r -Fp(i)p Fr(.)60 b(Of)37 b(course,)h(if)f Fl(imagpart)i -Fr(is)e(negativ)m(e,)k(its)630 4848 y(prin)m(ted)28 b(represen)m -(tation)i(b)s(egins)e(with)g(a)h(`)p Fp(-)p Fr(',)g(and)f(the)g(`)p -Fp(+)p Fr(')h(b)s(et)m(w)m(een)g Fl(realpart)i Fr(and)d -Fl(imagpart)630 4957 y Fr(ma)m(y)41 b(b)s(e)h(omitted.)75 -b(Note)43 b(that)g(this)e(notation)j(cannot)e(b)s(e)f(used)g(when)g -(the)h Fl(imagpart)i Fr(is)630 5067 y(rational)c(and)e(the)i(rational)g -(n)m(um)m(b)s(er's)c(base)j(is)g Fp(>)p Fr(18,)j(b)s(ecause)d(the)g(`)p -Fp(i)p Fr(')g(is)g(then)g(read)f(as)i(a)630 5177 y(digit.)630 -5322 y(In)30 b(Common)e(Lisp)h(notation:)42 b Fp(#C\()p -Fl(realpart)32 b(imagpart)r Fp(\))p Fr(.)p eop -%%Page: 29 31 -29 30 bop -30 -116 a Fr(Chapter)30 b(5:)41 b(Input/Output)2844 -b(29)-30 299 y Fs(5.2)68 b(Input)44 b(functions)-30 486 -y Fr(Including)25 b Fp()d Fr(de\014nes)j(a)h(t)m(yp)s(e)f -Fp(cl_istream)p Fr(,)f(whic)m(h)i(is)f(the)h(t)m(yp)s(e)f(of)h(the)g -(\014rst)e(argumen)m(t)h(to)i(all)f(input)-30 595 y(functions.)40 -b Fp(cl_istream)28 b Fr(is)i(the)h(same)f(as)g Fp(std::istream&)p -Fr(.)-30 724 y(The)g(v)-5 b(ariable)150 852 y Fp(cl_istream)28 -b(stdin)-30 1000 y Fr(con)m(tains)k(the)e(standard)g(input)f(stream.) --30 1129 y(These)h(are)h(the)f(simple)g(input)f(functions:)-30 -1276 y Fp(int)g(freadchar)f(\(cl_istream)g(stream\))450 -1386 y Fr(Reads)37 b(a)f(c)m(haracter)j(from)c Fp(stream)p -Fr(.)57 b(Returns)35 b Fp(cl_EOF)g Fr(\(not)i(a)g(`)p -Fp(char)p Fr('!\))59 b(if)36 b(the)h(end)f(of)h(stream)450 -1495 y(w)m(as)31 b(encoun)m(tered)g(or)f(an)g(error)g(o)s(ccurred.)-30 -1643 y Fp(int)f(funreadchar)f(\(cl_istream)f(stream,)h(int)i(c\))450 -1753 y Fr(Puts)41 b(bac)m(k)h Fp(c)f Fr(on)m(to)i Fp(stream)p -Fr(.)72 b Fp(c)41 b Fr(m)m(ust)f(b)s(e)h(the)h(result)f(of)g(the)h -(last)g Fp(freadchar)d Fr(op)s(eration)j(on)450 1862 -y Fp(stream)p Fr(.)-30 2010 y(Eac)m(h)53 b(of)f(the)g(classes)i -Fp(cl_N)p Fr(,)i Fp(cl_R)p Fr(,)h Fp(cl_RA)p Fr(,)f Fp(cl_I)p -Fr(,)h Fp(cl_F)p Fr(,)f Fp(cl_SF)p Fr(,)h Fp(cl_FF)p -Fr(,)f Fp(cl_DF)p Fr(,)h Fp(cl_LF)50 b Fr(de\014nes,)57 -b(in)-30 2119 y Fp()p -Fr(,)28 b(the)i(follo)m(wing)i(input)e(function:)-30 -2267 y Fp(cl_istream)e(operator>>)f(\(cl_istream)g(stream,)i -Fl(t)m(yp)s(e)5 b Fp(&)30 b(result\))450 2377 y Fr(Reads)g(a)h(n)m(um)m -(b)s(er)d(from)h Fp(stream)g Fr(and)h(stores)g(it)h(in)f(the)h -Fp(result)p Fr(.)-30 2524 y(The)f(most)g(\015exible)g(input)g -(functions,)g(de\014ned)f(in)h Fp()p Fr(,)28 b(are)j(the)f(follo)m(wing:)-30 -2672 y Fp(cl_N)f(read_complex)e(\(cl_istream)h(stream,)g(const)h -(cl_read_flags&)d(flags\))-30 2781 y(cl_R)j(read_real)f(\(cl_istream)f -(stream,)i(const)g(cl_read_flags&)d(flags\))-30 2891 -y(cl_F)j(read_float)f(\(cl_istream)f(stream,)h(const)h(cl_read_flags&)e -(flags\))-30 3001 y(cl_RA)i(read_rational)e(\(cl_istream)g(stream,)h -(const)h(cl_read_flags&)e(flags\))-30 3110 y(cl_I)i(read_integer)e -(\(cl_istream)h(stream,)g(const)h(cl_read_flags&)d(flags\))450 -3220 y Fr(Reads)i(a)g(n)m(um)m(b)s(er)e(from)g Fp(stream)p -Fr(.)38 b(The)27 b Fp(flags)g Fr(are)h(parameters)f(whic)m(h)h -(a\013ect)h(the)f(input)f(syn)m(tax.)450 3329 y(Whitespace)32 -b(b)s(efore)e(the)g(n)m(um)m(b)s(er)e(is)j(silen)m(tly)h(skipp)s(ed.) --30 3477 y Fp(cl_N)d(read_complex)e(\(const)i(cl_read_flags&)d(flags,)j -(const)g(char)g(*)h(string,)f(const)g(char)g(*)-30 3587 -y(string_limit,)e(const)i(char)g(*)h(*)g(end_of_parse\))-30 -3696 y(cl_R)f(read_real)f(\(const)h(cl_read_flags&)d(flags,)j(const)g -(char)g(*)h(string,)e(const)h(char)h(*)-30 3806 y(string_limit,)d -(const)i(char)g(*)h(*)g(end_of_parse\))-30 3915 y(cl_F)f(read_float)f -(\(const)g(cl_read_flags&)f(flags,)i(const)g(char)g(*)h(string,)e -(const)h(char)g(*)-30 4025 y(string_limit,)e(const)i(char)g(*)h(*)g -(end_of_parse\))-30 4134 y(cl_RA)f(read_rational)e(\(const)h -(cl_read_flags&)f(flags,)h(const)h(char)h(*)g(string,)e(const)h(char)g -(*)-30 4244 y(string_limit,)e(const)i(char)g(*)h(*)g(end_of_parse\))-30 -4354 y(cl_I)f(read_integer)e(\(const)i(cl_read_flags&)d(flags,)j(const) -g(char)g(*)h(string,)f(const)g(char)g(*)-30 4463 y(string_limit,)e -(const)i(char)g(*)h(*)g(end_of_parse\))450 4573 y Fr(Reads)k(a)h(n)m -(um)m(b)s(er)d(from)g(a)j(string)f(in)g(memory)-8 b(.)50 -b(The)34 b Fp(flags)e Fr(are)j(parameters)e(whic)m(h)h(a\013ect)i(the) -450 4682 y(input)31 b(syn)m(tax.)46 b(The)31 b(string)h(starts)g(at)h -Fp(string)d Fr(and)i(ends)f(at)h Fp(string_limit)d Fr(\(exclusiv)m(e)34 -b(limit\).)450 4792 y Fp(string_limit)29 b Fr(ma)m(y)i(also)i(b)s(e)f -Fp(NULL)p Fr(,)f(denoting)i(the)f(en)m(tire)h(string,)g(i.e.)47 -b(equiv)-5 b(alen)m(t)33 b(to)g Fp(string_)450 4902 y(limit)c(=)h -(string)f(+)h(strlen\(string\))p Fr(.)75 b(If)42 b Fp(end_of_parse)e -Fr(is)j Fp(NULL)p Fr(,)j(the)d(string)g(in)g(memory)450 -5011 y(m)m(ust)30 b(con)m(tain)j(exactly)g(one)f(n)m(um)m(b)s(er)d(and) -i(nothing)g(more,)g(else)i(a)f(fatal)g(error)f(will)h(b)s(e)f -(signalled.)450 5121 y(If)37 b Fp(end_of_parse)d Fr(is)k(not)g -Fp(NULL)p Fr(,)g Fp(*end_of_parse)c Fr(will)k(b)s(e)f(assigned)h(a)g(p) -s(oin)m(ter)g(past)f(the)h(last)450 5230 y(parsed)32 -b(c)m(haracter)h(\(i.e.)48 b Fp(string_limit)29 b Fr(if)j(nothing)g -(came)g(after)h(the)g(n)m(um)m(b)s(er\).)44 b(Whitespace)34 -b(is)450 5340 y(not)d(allo)m(w)m(ed.)p eop -%%Page: 30 32 -30 31 bop -30 -116 a Fr(Chapter)30 b(5:)41 b(Input/Output)2844 -b(30)-30 299 y(The)30 b(structure)g Fp(cl_read_flags)d -Fr(con)m(tains)k(the)g(follo)m(wing)g(\014elds:)-30 461 -y Fp(cl_read_syntax_t)26 b(syntax)450 570 y Fr(The)i(p)s(ossible)f -(results)h(of)g(the)h(read)f(op)s(eration.)40 b(P)m(ossible)29 -b(v)-5 b(alues)28 b(are)h Fp(syntax_number)p Fr(,)c Fp(syntax_)450 -680 y(real)p Fr(,)49 b Fp(syntax_rational)p Fr(,)e Fp(syntax_integer)p -Fr(,)g Fp(syntax_float)p Fr(,)g Fp(syntax_sfloat)p Fr(,)g -Fp(syntax_)450 789 y(ffloat)p Fr(,)29 b Fp(syntax_dfloat)p -Fr(,)e Fp(syntax_lfloat)p Fr(.)-30 950 y Fp(cl_read_lsyntax_t)f -(lsyntax)450 1060 y Fr(Sp)s(eci\014es)31 b(the)g(language-dep)s(enden)m -(t)h(syn)m(tax)g(v)-5 b(arian)m(t)32 b(for)f(the)h(read)f(op)s -(eration.)43 b(P)m(ossible)33 b(v)-5 b(alues)450 1169 -y(are)450 1330 y Fp(lsyntax_standard)930 1440 y Fr(accept)32 -b(standard)d(algebraic)j(notation)g(only)-8 b(,)31 b(no)g(complex)f(n)m -(um)m(b)s(ers,)450 1601 y Fp(lsyntax_algebraic)930 1710 -y Fr(accept)i(the)e(algebraic)i(notation)g Fl(x)6 b Fp(+)p -Fl(y)i Fp(i)30 b Fr(for)g(complex)g(n)m(um)m(b)s(ers,)450 -1871 y Fp(lsyntax_commonlisp)930 1981 y Fr(accept)49 -b(the)g Fp(#b)p Fr(,)j Fp(#o)p Fr(,)g Fp(#x)47 b Fr(syn)m(taxes)i(for)f -(binary)-8 b(,)52 b(o)s(ctal,)i(hexadecimal)48 b(n)m(um)m(b)s(ers,)930 -2090 y Fp(#)p Fl(base)5 b Fp(R)25 b Fr(for)f(rational)i(n)m(um)m(b)s -(ers)d(in)h(a)i(giv)m(en)g(base,)g Fp(#c\()p Fl(realpart)32 -b(imagpart)r Fp(\))24 b Fr(for)h(com-)930 2200 y(plex)30 -b(n)m(um)m(b)s(ers,)450 2361 y Fp(lsyntax_all)930 2471 -y Fr(accept)i(all)f(of)g(these)f(extensions.)-30 2631 -y Fp(unsigned)e(int)i(rational_base)450 2741 y Fr(The)g(base)g(in)g -(whic)m(h)h(rational)g(n)m(um)m(b)s(ers)d(are)j(read.)-30 -2902 y Fp(cl_float_format_t)26 b(float_flags.default_flo)o(at_f)o(orm)o -(at)450 3012 y Fr(The)k(\015oat)h(format)f(used)f(when)h(reading)g -(\015oats)h(with)f(exp)s(onen)m(t)g(mark)m(er)g(`)p Fp(e)p -Fr('.)-30 3172 y Fp(cl_float_format_t)c(float_flags.default_lfl)o(oat_) -o(for)o(mat)450 3282 y Fr(The)k(\015oat)h(format)f(used)f(when)h -(reading)g(\015oats)h(with)f(exp)s(onen)m(t)g(mark)m(er)g(`)p -Fp(l)p Fr('.)-30 3443 y Fp(cl_boolean)e(float_flags.mantissa_de)o(pen)o -(dent)o(_flo)o(at_)o(form)o(at)450 3553 y Fr(When)h(this)g(\015ag)h(is) -f(true,)g(\015oats)h(sp)s(eci\014ed)e(with)h(more)g(digits)g(than)g -(corresp)s(onding)g(to)g(the)h(exp)s(o-)450 3662 y(nen)m(t)g(mark)m(er) -e(they)i(con)m(tain,)h(but)e(without)p 2018 3662 28 4 -v 62 w Fl(nnn)e Fr(su\016x,)i(will)h(get)h(a)e(precision)h(corresp)s -(onding)e(to)450 3772 y(their)i(n)m(um)m(b)s(er)e(of)j(signi\014can)m -(t)g(digits.)-30 4033 y Fs(5.3)68 b(Output)45 b(functions)-30 -4227 y Fr(Including)40 b Fp()f Fr(de\014nes)h(a)i(t)m(yp)s(e) -f Fp(cl_ostream)p Fr(,)g(whic)m(h)g(is)h(the)f(t)m(yp)s(e)g(of)h(the)f -(\014rst)f(argumen)m(t)h(to)h(all)-30 4337 y(output)30 -b(functions.)40 b Fp(cl_ostream)28 b Fr(is)i(the)h(same)f(as)g -Fp(std::ostream&)p Fr(.)-30 4473 y(The)g(v)-5 b(ariable)150 -4609 y Fp(cl_ostream)28 b(stdout)-30 4770 y Fr(con)m(tains)k(the)e -(standard)g(output)g(stream.)-30 4906 y(The)g(v)-5 b(ariable)150 -5042 y Fp(cl_ostream)28 b(stderr)-30 5204 y Fr(con)m(tains)k(the)e -(standard)g(error)g(output)g(stream.)-30 5340 y(These)g(are)h(the)f -(simple)g(output)g(functions:)p eop -%%Page: 31 33 -31 32 bop -30 -116 a Fr(Chapter)30 b(5:)41 b(Input/Output)2844 -b(31)-30 299 y Fp(void)29 b(fprintchar)f(\(cl_ostream)f(stream,)h(char) -i(c\))450 408 y Fr(Prin)m(ts)g(the)h(c)m(haracter)h Fp(x)e -Fr(literally)i(on)e(the)h Fp(stream)p Fr(.)-30 574 y -Fp(void)e(fprint)g(\(cl_ostream)e(stream,)i(const)f(char)i(*)g -(string\))450 683 y Fr(Prin)m(ts)g(the)h Fp(string)d -Fr(literally)33 b(on)d(the)g Fp(stream)p Fr(.)-30 848 -y Fp(void)f(fprintdecimal)e(\(cl_ostream)g(stream,)i(int)g(x\))-30 -958 y(void)g(fprintdecimal)e(\(cl_ostream)g(stream,)i(const)g(cl_I&)g -(x\))450 1068 y Fr(Prin)m(ts)h(the)h(in)m(teger)h Fp(x)e -Fr(in)g(decimal)g(on)g(the)h Fp(stream)p Fr(.)-30 1233 -y Fp(void)e(fprintbinary)e(\(cl_ostream)h(stream,)g(const)h(cl_I&)g -(x\))450 1342 y Fr(Prin)m(ts)h(the)h(in)m(teger)h Fp(x)e -Fr(in)g(binary)f(\(base)i(2,)g(without)g(pre\014x\))e(on)h(the)h -Fp(stream)p Fr(.)-30 1508 y Fp(void)e(fprintoctal)f(\(cl_ostream)f -(stream,)h(const)h(cl_I&)g(x\))450 1617 y Fr(Prin)m(ts)h(the)h(in)m -(teger)h Fp(x)e Fr(in)g(o)s(ctal)h(\(base)g(8,)g(without)g(pre\014x\))e -(on)i(the)f Fp(stream)p Fr(.)-30 1782 y Fp(void)f(fprinthexadecimal)d -(\(cl_ostream)h(stream,)i(const)f(cl_I&)h(x\))450 1892 -y Fr(Prin)m(ts)h(the)h(in)m(teger)h Fp(x)e Fr(in)g(hexadecimal)g -(\(base)h(16,)h(without)e(pre\014x\))g(on)g(the)h Fp(stream)p -Fr(.)-30 2060 y(Eac)m(h)53 b(of)f(the)g(classes)i Fp(cl_N)p -Fr(,)i Fp(cl_R)p Fr(,)h Fp(cl_RA)p Fr(,)f Fp(cl_I)p Fr(,)h -Fp(cl_F)p Fr(,)f Fp(cl_SF)p Fr(,)h Fp(cl_FF)p Fr(,)f -Fp(cl_DF)p Fr(,)h Fp(cl_LF)50 b Fr(de\014nes,)57 b(in)-30 -2170 y Fp()p Fr(,)28 -b(the)i(follo)m(wing)i(output)e(functions:)-30 2338 y -Fp(void)f(fprint)g(\(cl_ostream)e(stream,)i(const)f Fl(t)m(yp)s(e)5 -b Fp(&)31 b(x\))-30 2447 y(cl_ostream)d(operator<<)f(\(cl_ostream)g -(stream,)i(const)g Fl(t)m(yp)s(e)5 b Fp(&)30 b(x\))450 -2557 y Fr(Prin)m(ts)42 b(the)g(n)m(um)m(b)s(er)e Fp(x)i -Fr(on)g(the)g Fp(stream)p Fr(.)75 b(The)41 b(output)h(ma)m(y)g(dep)s -(end)e(on)i(the)h(global)g(prin)m(ter)450 2667 y(settings)36 -b(in)g(the)f(v)-5 b(ariable)37 b Fp(default_print_flags)p -Fr(.)51 b(The)35 b Fp(ostream)e Fr(\015ags)j(and)f(settings)h -(\(\015ags,)450 2776 y(width)30 b(and)f(lo)s(cale\))k(are)e(ignored.) --30 2944 y(The)f(most)g(\015exible)g(output)g(function,)g(de\014ned)g -(in)g Fp()p Fr(,)28 -b(are)i(the)h(follo)m(wing:)210 3079 y Fp(void)47 b(print_complex)92 -b(\(cl_ostream)44 b(stream,)i(const)g(cl_print_flags&)e(flags,)1212 -3183 y(const)j(cl_N&)f(z\);)210 3286 y(void)h(print_real)236 -b(\(cl_ostream)44 b(stream,)i(const)g(cl_print_flags&)e(flags,)1212 -3390 y(const)j(cl_R&)f(z\);)210 3494 y(void)h(print_float)188 -b(\(cl_ostream)44 b(stream,)i(const)g(cl_print_flags&)e(flags,)1212 -3598 y(const)j(cl_F&)f(z\);)210 3702 y(void)h(print_rational)d -(\(cl_ostream)g(stream,)i(const)g(cl_print_flags&)e(flags,)1212 -3805 y(const)j(cl_RA&)f(z\);)210 3909 y(void)h(print_integer)92 -b(\(cl_ostream)44 b(stream,)i(const)g(cl_print_flags&)e(flags,)1212 -4013 y(const)j(cl_I&)f(z\);)-30 4153 y Fr(Prin)m(ts)30 -b(the)h(n)m(um)m(b)s(er)d Fp(x)i Fr(on)g(the)h Fp(stream)p -Fr(.)39 b(The)30 b Fp(flags)f Fr(are)h(parameters)g(whic)m(h)g -(a\013ect)i(the)f(output.)-30 4293 y(The)f(structure)g(t)m(yp)s(e)g -Fp(cl_print_flags)d Fr(con)m(tains)k(the)g(follo)m(wing)h(\014elds:)-30 -4462 y Fp(unsigned)c(int)i(rational_base)450 4571 y Fr(The)g(base)g(in) -g(whic)m(h)h(rational)g(n)m(um)m(b)s(ers)d(are)j(prin)m(ted.)40 -b(Default)32 b(is)e Fp(10)p Fr(.)-30 4736 y Fp(cl_boolean)e -(rational_readably)450 4846 y Fr(If)34 b(this)h(\015ag)h(is)f(true,)h -(rational)g(n)m(um)m(b)s(ers)c(are)k(prin)m(ted)e(with)h(radix)f(sp)s -(eci\014ers)h(in)f(Common)f(Lisp)450 4956 y(syn)m(tax)e(\()p -Fp(#)p Fl(n)p Fp(R)f Fr(or)g Fp(#b)g Fr(or)g Fp(#o)g -Fr(or)g Fp(#x)g Fr(pre\014xes,)g(trailing)h(dot\).)41 -b(Default)32 b(is)e(false.)-30 5121 y Fp(cl_boolean)e(float_readably) -450 5230 y Fr(If)34 b(this)g(\015ag)h(is)f(true,)i(t)m(yp)s(e)e(sp)s -(eci\014c)g(exp)s(onen)m(t)h(mark)m(ers)e(ha)m(v)m(e)j(precedence)f(o)m -(v)m(er)g('E'.)g(Default)h(is)450 5340 y(false.)p eop -%%Page: 32 34 -32 33 bop -30 -116 a Fr(Chapter)30 b(5:)41 b(Input/Output)2844 -b(32)-30 299 y Fp(cl_float_format_t)26 b(default_float_format)450 -408 y Fr(Floating)40 b(p)s(oin)m(t)d(n)m(um)m(b)s(ers)e(of)j(this)f -(format)g(will)h(b)s(e)f(prin)m(ted)g(using)g(the)h('E')g(exp)s(onen)m -(t)f(mark)m(er.)450 518 y(Default)31 b(is)g Fp(cl_float_format_ffloat)p -Fr(.)-30 677 y Fp(cl_boolean)d(complex_readably)450 787 -y Fr(If)41 b(this)g(\015ag)g(is)h(true,)i(complex)c(n)m(um)m(b)s(ers)f -(will)j(b)s(e)e(prin)m(ted)h(using)g(the)g(Common)e(Lisp)h(syn)m(tax) -450 897 y Fp(#C\()p Fl(realpart)32 b(imagpart)r Fp(\))p -Fr(.)40 b(Default)32 b(is)e(false.)-30 1056 y Fp(cl_string)e -(univpoly_varname)450 1166 y Fr(Univ)-5 b(ariate)37 b(p)s(olynomials)d -(with)i(no)f(explicit)i(indeterminate)e(name)f(will)i(b)s(e)f(prin)m -(ted)g(using)g(this)450 1275 y(v)-5 b(ariable)31 b(name.)40 -b(Default)31 b(is)g Fp("x")p Fr(.)-30 1435 y(The)26 b(global)i(v)-5 -b(ariable)27 b Fp(default_print_flags)21 b Fr(con)m(tains)28 -b(the)f(default)f(v)-5 b(alues,)28 b(used)e(b)m(y)g(the)h(function)f -Fp(fprint)p Fr(.)p eop -%%Page: 33 35 -33 34 bop -30 -116 a Fr(Chapter)30 b(6:)41 b(Rings)3180 -b(33)-30 299 y Fo(6)80 b(Rings)-30 533 y Fr(CLN)30 b(has)g(a)h(class)g -(of)g(abstract)g(rings.)1403 662 y Fp(Ring)1308 765 y(cl_ring)1212 -869 y()-30 1004 y Fr(Rings)f(can)h(b)s(e)f(compared)f(for)h -(equalit)m(y:)-30 1163 y Fp(bool)f(operator==)f(\(const)g(cl_ring&,)g -(const)h(cl_ring&\))-30 1273 y(bool)g(operator!=)f(\(const)g(cl_ring&,) -g(const)h(cl_ring&\))450 1382 y Fr(These)h(compare)g(t)m(w)m(o)i(rings) -e(for)g(equalit)m(y)-8 b(.)-30 1542 y(Giv)m(en)31 b(a)g(ring)f -Fp(R)p Fr(,)g(the)h(follo)m(wing)h(mem)m(b)s(ers)27 b(can)k(b)s(e)f -(used.)-30 1701 y Fp(void)f(R->fprint)f(\(cl_ostream)f(stream,)i(const) -g(cl_ring_element&)d(x\))-30 1811 y(cl_boolean)i(R->equal)g(\(const)g -(cl_ring_element&)e(x,)k(const)f(cl_ring_element&)d(y\))-30 -1920 y(cl_ring_element)g(R->zero)j(\(\))-30 2030 y(cl_boolean)f -(R->zerop)g(\(const)g(cl_ring_element&)e(x\))-30 2139 -y(cl_ring_element)g(R->plus)j(\(const)f(cl_ring_element&)e(x,)k(const)f -(cl_ring_element&)d(y\))-30 2249 y(cl_ring_element)g(R->minus)i -(\(const)h(cl_ring_element&)d(x,)k(const)f(cl_ring_element&)d(y\))-30 -2359 y(cl_ring_element)g(R->uminus)i(\(const)h(cl_ring_element&)d(x\)) --30 2468 y(cl_ring_element)g(R->one)j(\(\))-30 2578 y(cl_ring_element)d -(R->canonhom)h(\(const)i(cl_I&)g(x\))-30 2687 y(cl_ring_element)d -(R->mul)j(\(const)g(cl_ring_element&)c(x,)30 b(const)f -(cl_ring_element&)d(y\))-30 2797 y(cl_ring_element)g(R->square)i -(\(const)h(cl_ring_element&)d(x\))-30 2907 y(cl_ring_element)g -(R->expt_pos)h(\(const)i(cl_ring_element&)d(x,)k(const)f(cl_I&)g(y\)) --30 3041 y Fr(The)h(follo)m(wing)i(rings)e(are)g(built-in.)-30 -3200 y Fp(cl_null_ring)d(cl_0_ring)450 3310 y Fr(The)j(n)m(ull)g(ring,) -h(con)m(taining)g(only)g(zero.)-30 3469 y Fp(cl_complex_ring)26 -b(cl_C_ring)450 3579 y Fr(The)k(ring)g(of)h(complex)f(n)m(um)m(b)s -(ers.)38 b(This)29 b(corresp)s(onds)g(to)j(the)e(t)m(yp)s(e)h -Fp(cl_N)p Fr(.)-30 3738 y Fp(cl_real_ring)c(cl_R_ring)450 -3848 y Fr(The)j(ring)g(of)h(real)g(n)m(um)m(b)s(ers.)38 -b(This)29 b(corresp)s(onds)g(to)i(the)g(t)m(yp)s(e)g -Fp(cl_R)p Fr(.)-30 4007 y Fp(cl_rational_ring)26 b(cl_RA_ring)450 -4117 y Fr(The)k(ring)g(of)h(rational)g(n)m(um)m(b)s(ers.)38 -b(This)30 b(corresp)s(onds)f(to)i(the)g(t)m(yp)s(e)f -Fp(cl_RA)p Fr(.)-30 4276 y Fp(cl_integer_ring)c(cl_I_ring)450 -4386 y Fr(The)k(ring)g(of)h(in)m(tegers.)41 b(This)30 -b(corresp)s(onds)f(to)i(the)g(t)m(yp)s(e)f Fp(cl_I)p -Fr(.)-30 4545 y(T)m(yp)s(e)g(tests)h(can)g(b)s(e)e(p)s(erformed)f(for)i -(an)m(y)h(of)g Fp(cl_C_ring)p Fr(,)d Fp(cl_R_ring)p Fr(,)g -Fp(cl_RA_ring)p Fr(,)g Fp(cl_I_ring)p Fr(:)-30 4705 y -Fp(cl_boolean)g(instanceof)f(\(const)i(cl_number&)e(x,)j(const)f -(cl_number_ring&)d(R\))450 4814 y Fr(T)-8 b(ests)31 b(whether)f(the)g -(giv)m(en)i(n)m(um)m(b)s(er)c(is)i(an)g(elemen)m(t)h(of)g(the)f(n)m(um) -m(b)s(er)e(ring)i(R.)p eop -%%Page: 34 36 -34 35 bop -30 -116 a Fr(Chapter)30 b(7:)41 b(Mo)s(dular)30 -b(in)m(tegers)2730 b(34)-30 299 y Fo(7)80 b(Mo)t(dular)55 -b(in)l(tegers)-30 657 y Fs(7.1)68 b(Mo)t(dular)45 b(in)l(teger)h(rings) --30 850 y Fr(CLN)29 b(implemen)m(ts)f(mo)s(dular)f(in)m(tegers,)k(i.e.) -41 b(in)m(tegers)31 b(mo)s(dulo)c(a)j(\014xed)e(in)m(teger)j(N.)f(The)e -(mo)s(dulus)f(is)i(explicitly)-30 960 y(part)37 b(of)h(ev)m(ery)g(mo)s -(dular)e(in)m(teger.)63 b(CLN)37 b(do)s(esn't)g(allo)m(w)i(y)m(ou)f(to) -g(\(acciden)m(tally\))j(mix)36 b(elemen)m(ts)i(of)f(di\013eren)m(t)-30 -1069 y(mo)s(dular)25 b(rings,)j(e.g.)41 b Fp(\(3)30 b(mod)f(4\))h(+)g -(\(2)g(mod)f(5\))e Fr(will)h(result)f(in)g(a)h(run)m(time)e(error.)40 -b(\(Ideally)28 b(one)g(w)m(ould)f(imagine)-30 1179 y(a)k(generic)h -(data)f(t)m(yp)s(e)g Fp(cl_MI\(N\))p Fr(,)e(but)h(C)p -Fp(++)g Fr(do)s(esn't)h(ha)m(v)m(e)h(generic)g(t)m(yp)s(es.)42 -b(So)30 b(one)h(has)g(to)h(liv)m(e)g(with)e(run)m(time)-30 -1288 y(c)m(hec)m(ks.\))-30 1423 y(The)g(class)h(of)g(mo)s(dular)d(in)m -(teger)k(rings)e(is)1403 1552 y Fp(Ring)1308 1656 y(cl_ring)1212 -1760 y()1451 1863 y(|)1451 1967 y(|)1021 -2071 y(Modular)46 b(integer)g(ring)1165 2175 y(cl_modint_ring)1069 -2279 y()-30 2413 y Fr(and)30 b(the)g(class)h(of)g -(all)g(mo)s(dular)e(in)m(tegers)i(\(elemen)m(ts)g(of)g(mo)s(dular)d(in) -m(teger)k(rings\))e(is)1165 2542 y Fp(Modular)45 b(integer)1403 -2646 y(cl_MI)1117 2750 y()-30 2885 -y Fr(Mo)s(dular)30 b(in)m(teger)i(rings)e(are)g(constructed)h(using)f -(the)h(function)-30 3044 y Fp(cl_modint_ring)26 b(find_modint_ring)g -(\(const)j(cl_I&)g(N\))450 3154 y Fr(This)f(function)g(returns)f(the)h -(mo)s(dular)e(ring)j(`)p Fp(Z/NZ)p Fr('.)39 b(It)28 b(tak)m(es)i(care)f -(of)g(\014nding)e(out)h(ab)s(out)g(sp)s(ecial)450 3264 -y(cases)e(of)e Fp(N)p Fr(,)i(lik)m(e)g(p)s(o)m(w)m(ers)f(of)g(t)m(w)m -(o)h(and)e(o)s(dd)f(n)m(um)m(b)s(ers)g(for)h(whic)m(h)h(Mon)m(tgomery)g -(m)m(ultiplication)h(will)450 3373 y(b)s(e)g(a)h(win,)g(and)f -(precomputes)f(an)m(y)i(necessary)g(auxiliary)h(data)f(for)f(computing) -g(mo)s(dulo)f Fp(N)p Fr(.)39 b(There)450 3483 y(is)27 -b(a)h(cac)m(he)g(table)g(of)g(rings,)f(indexed)g(b)m(y)g -Fp(N)g Fr(\(or,)h(more)e(precisely)-8 b(,)29 b(b)m(y)f -Fp(abs\(N\))p Fr(\).)38 b(This)26 b(ensures)g(that)450 -3592 y(the)31 b(precomputation)e(costs)j(are)e(reduced)g(to)h(a)g -(minim)m(um.)-30 3752 y(Mo)s(dular)f(in)m(teger)i(rings)e(can)g(b)s(e)g -(compared)f(for)i(equalit)m(y:)-30 3912 y Fp(bool)e(operator==)f -(\(const)g(cl_modint_ring&,)e(const)j(cl_modint_ring&\))-30 -4022 y(bool)g(operator!=)f(\(const)g(cl_modint_ring&,)e(const)j -(cl_modint_ring&\))450 4131 y Fr(These)42 b(compare)g(t)m(w)m(o)i(mo)s -(dular)c(in)m(teger)k(rings)e(for)g(equalit)m(y)-8 b(.)78 -b(Tw)m(o)43 b(di\013eren)m(t)g(calls)g(to)g Fp(find_)450 -4241 y(modint_ring)c Fr(with)i(the)h(same)f(argumen)m(t)g(necessarily)h -(return)f(the)h(same)f(ring)g(b)s(ecause)h(it)g(is)450 -4350 y(memoized)29 b(in)h(the)h(cac)m(he)h(table.)-30 -4608 y Fs(7.2)68 b(F)-11 b(unctions)44 b(on)h(mo)t(dular)g(in)l(tegers) --30 4801 y Fr(Giv)m(en)31 b(a)g(mo)s(dular)d(in)m(teger)k(ring)e -Fp(R)p Fr(,)h(the)f(follo)m(wing)i(mem)m(b)s(ers)c(can)i(b)s(e)g(used.) --30 4961 y Fp(cl_I)f(R->modulus)450 5071 y Fr(This)h(is)g(the)h(ring's) -f(mo)s(dulus,)e(normalized)i(to)h(b)s(e)e(nonnegativ)m(e:)43 -b Fp(abs\(N\))p Fr(.)-30 5230 y Fp(cl_MI)29 b(R->zero\(\))450 -5340 y Fr(This)h(returns)f Fp(0)h(mod)f(N)p Fr(.)p eop -%%Page: 35 37 -35 36 bop -30 -116 a Fr(Chapter)30 b(7:)41 b(Mo)s(dular)30 -b(in)m(tegers)2730 b(35)-30 299 y Fp(cl_MI)29 b(R->one\(\))450 -408 y Fr(This)h(returns)f Fp(1)h(mod)f(N)p Fr(.)-30 576 -y Fp(cl_MI)g(R->canonhom)e(\(const)i(cl_I&)g(x\))450 -686 y Fr(This)h(returns)f Fp(x)h(mod)f(N)p Fr(.)-30 853 -y Fp(cl_I)g(R->retract)f(\(const)g(cl_MI&)h(x\))450 963 -y Fr(This)c(is)h(a)h(partial)f(in)m(v)m(erse)h(function)f(to)h -Fp(R->canonhom)p Fr(.)36 b(It)26 b(returns)f(the)h(standard)f(represen) -m(tativ)m(e)450 1072 y(\()p Fp(>=0)p Fr(,)30 b Fp(random\(random_state&)24 b(randomstate\))-30 1349 -y(cl_MI)29 b(R->random\(\))450 1459 y Fr(This)h(returns)f(a)h(random)f -(in)m(teger)j(mo)s(dulo)d Fp(N)p Fr(.)-30 1630 y(The)h(follo)m(wing)i -(op)s(erations)e(are)h(de\014ned)e(on)i(mo)s(dular)d(in)m(tegers.)-30 -1802 y Fp(cl_modint_ring)e(x.ring)j(\(\))450 1912 y Fr(Returns)g(the)i -(ring)f(to)h(whic)m(h)f(the)h(mo)s(dular)d(in)m(teger)k -Fp(x)e Fr(b)s(elongs.)-30 2079 y Fp(cl_MI)f(operator+)f(\(const)g -(cl_MI&,)h(const)g(cl_MI&\))450 2189 y Fr(Returns)36 -b(the)h(sum)d(of)j(t)m(w)m(o)h(mo)s(dular)d(in)m(tegers.)60 -b(One)37 b(of)f(the)h(argumen)m(ts)f(ma)m(y)g(also)i(b)s(e)e(a)h(plain) -450 2298 y(in)m(teger.)-30 2466 y Fp(cl_MI)29 b(operator-)f(\(const)g -(cl_MI&,)h(const)g(cl_MI&\))450 2575 y Fr(Returns)37 -b(the)h(di\013erence)g(of)g(t)m(w)m(o)h(mo)s(dular)d(in)m(tegers.)65 -b(One)37 b(of)h(the)g(argumen)m(ts)f(ma)m(y)h(also)g(b)s(e)g(a)450 -2685 y(plain)30 b(in)m(teger.)-30 2852 y Fp(cl_MI)f(operator-)f -(\(const)g(cl_MI&\))450 2962 y Fr(Returns)h(the)i(negativ)m(e)i(of)d(a) -h(mo)s(dular)d(in)m(teger.)-30 3130 y Fp(cl_MI)h(operator*)f(\(const)g -(cl_MI&,)h(const)g(cl_MI&\))450 3239 y Fr(Returns)e(the)g(pro)s(duct)f -(of)i(t)m(w)m(o)h(mo)s(dular)c(in)m(tegers.)41 b(One)27 -b(of)h(the)f(argumen)m(ts)g(ma)m(y)g(also)h(b)s(e)f(a)h(plain)450 -3349 y(in)m(teger.)-30 3516 y Fp(cl_MI)h(square)g(\(const)f(cl_MI&\)) -450 3626 y Fr(Returns)h(the)i(square)f(of)h(a)f(mo)s(dular)f(in)m -(teger.)-30 3793 y Fp(cl_MI)g(recip)g(\(const)g(cl_MI&)f(x\))450 -3903 y Fr(Returns)g(the)i(recipro)s(cal)g Fp(x^-1)e Fr(of)i(a)f(mo)s -(dular)f(in)m(teger)i Fp(x)p Fr(.)40 b Fp(x)29 b Fr(m)m(ust)g(b)s(e)f -(coprime)h(to)h(the)f(mo)s(dulus,)450 4012 y(otherwise)i(an)f(error)g -(message)h(is)f(issued.)-30 4180 y Fp(cl_MI)f(div)g(\(const)g(cl_MI&)g -(x,)h(const)e(cl_MI&)h(y\))450 4290 y Fr(Returns)36 b(the)g(quotien)m -(t)i Fp(x*y^-1)d Fr(of)h(t)m(w)m(o)i(mo)s(dular)c(in)m(tegers)k -Fp(x)p Fr(,)g Fp(y)p Fr(.)59 b Fp(y)36 b Fr(m)m(ust)f(b)s(e)h(coprime)g -(to)h(the)450 4399 y(mo)s(dulus,)28 b(otherwise)j(an)f(error)g(message) -g(is)h(issued.)-30 4567 y Fp(cl_MI)e(expt_pos)f(\(const)h(cl_MI&)f(x,)i -(const)f(cl_I&)g(y\))450 4676 y(y)h Fr(m)m(ust)f(b)s(e)h -Fp(>)g Fr(0.)41 b(Returns)30 b Fp(x^y)p Fr(.)-30 4844 -y Fp(cl_MI)f(expt)g(\(const)g(cl_MI&)f(x,)i(const)f(cl_I&)g(y\))450 -4953 y Fr(Returns)h Fp(x^y)p Fr(.)42 b(If)30 b Fp(y)h -Fr(is)g(negativ)m(e,)i Fp(x)e Fr(m)m(ust)f(b)s(e)g(coprime)g(to)i(the)f -(mo)s(dulus,)e(else)i(an)g(error)g(message)450 5063 y(is)f(issued.)-30 -5230 y Fp(cl_MI)f(operator<<)f(\(const)g(cl_MI&)h(x,)h(const)f(cl_I&)f -(y\))450 5340 y Fr(Returns)h Fp(x*2^y)p Fr(.)p eop -%%Page: 36 38 -36 37 bop -30 -116 a Fr(Chapter)30 b(7:)41 b(Mo)s(dular)30 -b(in)m(tegers)2730 b(36)-30 299 y Fp(cl_MI)29 b(operator>>)f(\(const)g -(cl_MI&)h(x,)h(const)f(cl_I&)f(y\))450 408 y Fr(Returns)k -Fp(x*2^-y)p Fr(.)45 b(When)33 b Fp(y)f Fr(is)g(p)s(ositiv)m(e,)j(the)e -(mo)s(dulus)c(m)m(ust)j(b)s(e)g(o)s(dd,)g(or)h(an)f(error)g(message)h -(is)450 518 y(issued.)-30 677 y Fp(bool)c(operator==)f(\(const)g -(cl_MI&,)h(const)g(cl_MI&\))-30 787 y(bool)g(operator!=)f(\(const)g -(cl_MI&,)h(const)g(cl_MI&\))450 897 y Fr(Compares)21 -b(t)m(w)m(o)j(mo)s(dular)c(in)m(tegers,)25 b(b)s(elonging)e(to)g(the)f -(same)g(mo)s(dular)e(in)m(teger)k(ring,)g(for)e(equalit)m(y)-8 -b(.)-30 1056 y Fp(cl_boolean)28 b(zerop)h(\(const)f(cl_MI&)h(x\))450 -1166 y Fr(Returns)g(true)i(if)f Fp(x)g Fr(is)g Fp(0)g(mod)g(N)p -Fr(.)-30 1325 y(The)g(follo)m(wing)i(output)e(functions)g(are)g -(de\014ned)g(\(see)h(also)g(the)g(c)m(hapter)g(on)f(input/output\).)-30 -1484 y Fp(void)f(fprint)g(\(cl_ostream)e(stream,)i(const)f(cl_MI&)h -(x\))-30 1594 y(cl_ostream)f(operator<<)f(\(cl_ostream)g(stream,)i -(const)g(cl_MI&)f(x\))450 1704 y Fr(Prin)m(ts)40 b(the)h(mo)s(dular)d -(in)m(teger)k Fp(x)d Fr(on)i(the)f Fp(stream)p Fr(.)69 -b(The)40 b(output)g(ma)m(y)f(dep)s(end)g(on)h(the)h(global)450 -1813 y(prin)m(ter)30 b(settings)h(in)f(the)h(v)-5 b(ariable)31 -b Fp(default_print_flags)p Fr(.)p eop -%%Page: 37 39 -37 38 bop -30 -116 a Fr(Chapter)30 b(8:)41 b(Sym)m(b)s(olic)29 -b(data)i(t)m(yp)s(es)2596 b(37)-30 299 y Fo(8)80 b(Sym)l(b)t(olic)54 -b(data)g(t)l(yp)t(es)-30 513 y Fr(CLN)30 b(implemen)m(ts)f(t)m(w)m(o)j -(sym)m(b)s(olic)d(\(non-n)m(umeric\))h(data)h(t)m(yp)s(es:)41 -b(strings)30 b(and)g(sym)m(b)s(ols.)-30 758 y Fs(8.1)68 -b(Strings)-30 946 y Fr(The)30 b(class)1260 1071 y Fp(String)1212 -1175 y(cl_string)1117 1278 y()-30 1409 -y Fr(implemen)m(ts)f(imm)m(utable)g(strings.)-30 1539 -y(Strings)h(are)h(constructed)f(through)g(the)h(follo)m(wing)g -(constructors:)-30 1691 y Fp(cl_string)d(\(const)h(char)g(*)h(s\))450 -1800 y Fr(Returns)f(an)i(imm)m(utable)e(cop)m(y)i(of)f(the)h -(\(zero-terminated\))h(C)e(string)g Fp(s)p Fr(.)-30 1951 -y Fp(cl_string)e(\(const)h(char)g(*)h(ptr,)f(unsigned)f(long)h(len\)) -450 2061 y Fr(Returns)36 b(an)h(imm)m(utable)f(cop)m(y)i(of)f(the)g -Fp(len)f Fr(c)m(haracters)j(at)e Fp(ptr[0])p Fr(,)43 -b(.)22 b(.)h(.)11 b(,)39 b Fp(ptr[len-1])p Fr(.)58 b(NUL)450 -2171 y(c)m(haracters)32 b(are)f(allo)m(w)m(ed.)-30 2322 -y(The)f(follo)m(wing)i(functions)e(are)g(a)m(v)-5 b(ailable)33 -b(on)d(strings:)-30 2473 y Fp(operator)e(=)450 2583 y -Fr(Assignmen)m(t)i(from)f Fp(cl_string)f Fr(and)h Fp(const)g(char)h(*)p -Fr(.)-30 2734 y Fp(s.length\(\))-30 2844 y(strlen\(s\))450 -2953 y Fr(Returns)f(the)i(length)g(of)f(the)h(string)f -Fp(s)p Fr(.)-30 3104 y Fp(s[i])288 b Fr(Returns)28 b(the)i -Fp(i)p Fr(th)f(c)m(haracter)i(of)e(the)g(string)h Fp(s)p -Fr(.)40 b Fp(i)29 b Fr(m)m(ust)f(b)s(e)h(in)g(the)g(range)h -Fp(0)g(<=)f(i)h(<)g(s.length\(\))p Fr(.)-30 3256 y Fp(bool)f(equal)g -(\(const)g(cl_string&)e(s1,)j(const)f(cl_string&)e(s2\))450 -3365 y Fr(Compares)38 b(t)m(w)m(o)i(strings)f(for)f(equalit)m(y)-8 -b(.)69 b(One)38 b(of)h(the)g(argumen)m(ts)g(ma)m(y)f(also)i(b)s(e)e(a)i -(plain)e Fp(const)450 3475 y(char)29 b(*)p Fr(.)-30 3720 -y Fs(8.2)68 b(Sym)l(b)t(ols)-30 3908 y Fr(Sym)m(b)s(ols)31 -b(are)i(uniqui\014ed)d(strings:)45 b(all)34 b(sym)m(b)s(ols)d(with)h -(the)g(same)g(name)g(are)h(shared.)46 b(This)32 b(means)f(that)i(com-) --30 4018 y(parison)38 b(of)g(t)m(w)m(o)i(sym)m(b)s(ols)d(is)h(fast)h -(\(e\013ectiv)m(ely)j(just)37 b(a)i(p)s(oin)m(ter)f(comparison\),)i -(whereas)f(comparison)e(of)i(t)m(w)m(o)-30 4128 y(strings)32 -b(m)m(ust)f(in)g(the)i(w)m(orst)f(case)h(w)m(alk)g(b)s(oth)e(strings)h -(un)m(til)g(their)g(end.)45 b(Sym)m(b)s(ols)30 b(are)j(used,)f(for)f -(example,)i(as)-30 4237 y(tags)e(for)g(prop)s(erties,)f(as)g(names)f -(of)i(v)-5 b(ariables)31 b(in)f(p)s(olynomial)g(rings,)g(etc.)-30 -4368 y(Sym)m(b)s(ols)f(are)h(constructed)h(through)f(the)g(follo)m -(wing)i(constructor:)-30 4519 y Fp(cl_symbol)c(\(const)h(cl_string&)e -(s\))450 4629 y Fr(Lo)s(oks)j(up)g(or)g(creates)i(a)f(new)e(sym)m(b)s -(ol)h(with)g(a)g(giv)m(en)i(name.)-30 4780 y(The)e(follo)m(wing)i(op)s -(erations)e(are)h(a)m(v)-5 b(ailable)33 b(on)d(sym)m(b)s(ols:)-30 -4931 y Fp(cl_string)e(\(const)h(cl_symbol&)e(sym\))450 -5041 y Fr(Con)m(v)m(ersion)k(to)g Fp(cl_string)p Fr(:)38 -b(Returns)30 b(the)g(string)h(whic)m(h)f(names)f(the)i(sym)m(b)s(ol)e -Fp(sym)p Fr(.)-30 5192 y Fp(bool)g(equal)g(\(const)g(cl_symbol&)e -(sym1,)i(const)g(cl_symbol&)f(sym2\))450 5301 y Fr(Compares)h(t)m(w)m -(o)j(sym)m(b)s(ols)d(for)h(equalit)m(y)-8 b(.)43 b(This)29 -b(is)i(v)m(ery)f(fast.)p eop -%%Page: 38 40 -38 39 bop -30 -116 a Fr(Chapter)30 b(9:)41 b(Univ)-5 -b(ariate)32 b(p)s(olynomials)2483 b(38)-30 299 y Fo(9)80 -b(Univ)-9 b(ariate)56 b(p)t(olynomials)-30 652 y Fs(9.1)68 -b(Univ)-7 b(ariate)47 b(p)t(olynomial)f(rings)-30 844 -y Fr(CLN)33 b(implemen)m(ts)f(univ)-5 b(ariate)35 b(p)s(olynomials)e -(\(p)s(olynomials)g(in)g(one)h(v)-5 b(ariable\))35 b(o)m(v)m(er)g(an)f -(arbitrary)f(ring.)50 b(The)-30 953 y(indeterminate)34 -b(v)-5 b(ariable)36 b(ma)m(y)e(b)s(e)h(either)g(unnamed)d(\(and)j(will) -g(b)s(e)f(prin)m(ted)h(according)g(to)h Fp(default_print_)-30 -1063 y(flags.univpoly_varname)p Fr(,)h(whic)m(h)j(defaults)g(to)h(`)p -Fp(x)p Fr('\))g(or)f(carry)h(a)f(giv)m(en)h(name.)70 -b(The)40 b(base)g(ring)g(and)g(the)-30 1172 y(indeterminate)31 -b(are)h(explicitly)g(part)f(of)h(ev)m(ery)g(p)s(olynomial.)42 -b(CLN)31 b(do)s(esn't)g(allo)m(w)i(y)m(ou)e(to)h(\(acciden)m(tally\))j -(mix)-30 1282 y(elemen)m(ts)23 b(of)g(di\013eren)m(t)h(p)s(olynomial)e -(rings,)i(e.g.)40 b Fp(\(a^2+1\))28 b(*)i(\(b^3-1\))21 -b Fr(will)i(result)g(in)g(a)g(run)m(time)f(error.)38 -b(\(Ideally)-30 1391 y(this)30 b(should)g(return)f(a)i(m)m(ultiv)-5 -b(ariate)31 b(p)s(olynomial,)f(but)g(they)g(are)h(not)g(y)m(et)g -(implemen)m(ted)e(in)h(CLN.\))-30 1525 y(The)g(classes)h(of)g(univ)-5 -b(ariate)31 b(p)s(olynomial)f(rings)f(are)1499 1653 y -Fp(Ring)1403 1757 y(cl_ring)1308 1861 y()1546 -1965 y(|)1546 2068 y(|)1021 2172 y(Univariate)45 b(polynomial)g(ring) -1260 2276 y(cl_univpoly_ring)1260 2380 y()1546 -2484 y(|)735 2587 y(+----------------+------)o(----)o(----)o(---)o(--+) -735 2691 y(|)763 b(|)907 b(|)258 2795 y(Complex)46 b(polynomial)f(ring) -189 b(|)i(Modular)46 b(integer)g(polynomial)f(ring)258 -2899 y(cl_univpoly_complex_rin)o(g)137 b(|)382 b -(cl_univpoly_modint_ring)258 3002 y()137 -b(|)382 b()1546 3106 y(|)735 3210 -y(+----------------+)735 3314 y(|)763 b(|)353 3418 y(Real)47 -b(polynomial)e(ring)237 b(|)353 3521 y(cl_univpoly_real_ring)185 -b(|)353 3625 y()g(|)1546 3729 y(|)735 -3833 y(+----------------+)735 3936 y(|)763 b(|)258 4040 -y(Rational)45 b(polynomial)g(ring)142 b(|)258 4144 y -(cl_univpoly_rational_ri)o(ng)89 b(|)258 4248 y -()g(|)1546 4352 y(|)735 4455 -y(+----------------+)735 4559 y(|)258 4663 y(Integer)46 -b(polynomial)f(ring)258 4767 y(cl_univpoly_integer_rin)o(g)258 -4870 y()-30 5004 y Fr(and)30 -b(the)g(corresp)s(onding)g(classes)h(of)g(univ)-5 b(ariate)31 -b(p)s(olynomials)e(are)1117 5132 y Fp(Univariate)45 b(polynomial)1451 -5236 y(cl_UP)1260 5340 y()p eop -%%Page: 39 41 -39 40 bop -30 -116 a Fr(Chapter)30 b(9:)41 b(Univ)-5 -b(ariate)32 b(p)s(olynomials)2483 b(39)1546 299 y Fp(|)735 -403 y(+----------------+------)o(----)o(----)o(---)o(--+)735 -506 y(|)763 b(|)907 b(|)353 610 y(Complex)46 b(polynomial)331 -b(|)286 b(Modular)46 b(integer)g(polynomial)592 714 y(cl_UP_N)618 -b(|)764 b(cl_UP_MI)258 818 y()137 -b(|)382 b()1546 922 y(|)735 1025 -y(+----------------+)735 1129 y(|)763 b(|)449 1233 y(Real)46 -b(polynomial)379 b(|)592 1337 y(cl_UP_R)618 b(|)305 1440 -y()233 b(|)1546 1544 y(|)735 1648 -y(+----------------+)735 1752 y(|)763 b(|)353 1856 y(Rational)46 -b(polynomial)283 b(|)592 1959 y(cl_UP_RA)570 b(|)258 -2063 y()89 b(|)1546 2167 -y(|)735 2271 y(+----------------+)735 2374 y(|)353 2478 -y(Integer)46 b(polynomial)592 2582 y(cl_UP_I)258 2686 -y()-30 3545 y Fr(Univ)-5 b(ariate)32 -b(p)s(olynomial)d(rings)h(are)h(constructed)g(using)f(the)g(functions) --30 4792 y Fp(cl_univpoly_ring)c(find_univpoly_ring)f(\(const)k -(cl_ring&)f(R\))-30 4902 y(cl_univpoly_ring)e(find_univpoly_ring)f -(\(const)k(cl_ring&)f(R,)i(const)f(cl_symbol&)e(varname\))450 -5011 y Fr(This)40 b(function)h(returns)f(the)h(p)s(olynomial)g(ring)g -(`)p Fp(R[X])p Fr(',)i(unnamed)c(or)i(named.)71 b Fp(R)41 -b Fr(ma)m(y)g(b)s(e)f(an)450 5121 y(arbitrary)f(ring.)68 -b(This)39 b(function)g(tak)m(es)i(care)f(of)g(\014nding)e(out)h(ab)s -(out)h(sp)s(ecial)g(cases)g(of)g Fp(R)p Fr(,)h(suc)m(h)450 -5230 y(as)33 b(the)g(rings)g(of)g(complex)f(n)m(um)m(b)s(ers,)g(real)h -(n)m(um)m(b)s(ers,)f(rational)i(n)m(um)m(b)s(ers,)d(in)m(tegers,)k(or)e -(mo)s(dular)450 5340 y(in)m(teger)i(rings.)48 b(There)33 -b(is)g(a)h(cac)m(he)g(table)g(of)g(rings,)f(indexed)g(b)m(y)g -Fp(R)g Fr(and)f Fp(varname)p Fr(.)48 b(This)32 b(ensures)p -eop -%%Page: 40 42 -40 41 bop -30 -116 a Fr(Chapter)30 b(9:)41 b(Univ)-5 -b(ariate)32 b(p)s(olynomials)2483 b(40)450 299 y(that)28 -b(t)m(w)m(o)i(calls)f(of)e(this)h(function)g(with)f(the)h(same)f -(argumen)m(ts)h(will)g(return)e(the)i(same)g(p)s(olynomial)450 -408 y(ring.)-30 547 y Fp(cl_univpoly_complex_ring)c(find_univpoly_ring) -h(\(const)k(cl_complex_ring&)d(R\))-30 657 y(cl_univpoly_complex_ring)e -(find_univpoly_ring)h(\(const)k(cl_complex_ring&)d(R,)j(const)-30 -766 y(cl_symbol&)f(varname\))-30 876 y(cl_univpoly_real_ring)d -(find_univpoly_ring)g(\(const)k(cl_real_ring&)d(R\))-30 -986 y(cl_univpoly_real_ring)f(find_univpoly_ring)g(\(const)k -(cl_real_ring&)d(R,)k(const)f(cl_symbol&)-30 1095 y(varname\))-30 -1205 y(cl_univpoly_rational_rin)o(g)24 b(find_univpoly_ring)i(\(const)j -(cl_rational_ring&)c(R\))-30 1314 y(cl_univpoly_rational_rin)o(g)f -(find_univpoly_ring)i(\(const)j(cl_rational_ring&)c(R,)30 -b(const)-30 1424 y(cl_symbol&)e(varname\))-30 1533 y -(cl_univpoly_integer_ring)c(find_univpoly_ring)h(\(const)k -(cl_integer_ring&)d(R\))-30 1643 y(cl_univpoly_integer_ring)e -(find_univpoly_ring)h(\(const)k(cl_integer_ring&)d(R,)j(const)-30 -1753 y(cl_symbol&)f(varname\))-30 1862 y(cl_univpoly_modint_ring)c -(find_univpoly_ring)h(\(const)k(cl_modint_ring&)d(R\))-30 -1972 y(cl_univpoly_modint_ring)e(find_univpoly_ring)h(\(const)k -(cl_modint_ring&)d(R,)k(const)f(cl_symbol&)-30 2081 y(varname\))450 -2191 y Fr(These)24 b(functions)g(are)h(equiv)-5 b(alen)m(t)26 -b(to)g(the)e(general)i Fp(find_univpoly_ring)p Fr(,)21 -b(only)k(the)f(return)g(t)m(yp)s(e)450 2301 y(is)30 b(more)g(sp)s -(eci\014c,)g(according)i(to)f(the)f(base)h(ring's)f(t)m(yp)s(e.)-30 -2579 y Fs(9.2)68 b(F)-11 b(unctions)44 b(on)h(univ)-7 -b(ariate)46 b(p)t(olynomials)-30 2780 y Fr(Giv)m(en)31 -b(a)g(univ)-5 b(ariate)31 b(p)s(olynomial)f(ring)g Fp(R)p -Fr(,)g(the)h(follo)m(wing)h(mem)m(b)s(ers)27 b(can)k(b)s(e)f(used.)-30 -2952 y Fp(cl_ring)e(R->basering\(\))450 3061 y Fr(This)i(returns)f(the) -h(base)h(ring,)f(as)h(passed)f(to)h(`)p Fp(find_univpoly_ring)p -Fr('.)-30 3229 y Fp(cl_UP)e(R->zero\(\))450 3339 y Fr(This)h(returns)f -Fp(0)h(in)g(R)p Fr(,)g(a)h(p)s(olynomial)e(of)i(degree)g(-1.)-30 -3506 y Fp(cl_UP)e(R->one\(\))450 3616 y Fr(This)h(returns)f -Fp(1)h(in)g(R)p Fr(,)g(a)h(p)s(olynomial)e(of)i(degree)g -Fp(<)p Fr(=)f(0.)-30 3784 y Fp(cl_UP)f(R->canonhom)e(\(const)i(cl_I&)g -(x\))450 3893 y Fr(This)h(returns)f Fp(x)h(in)g(R)p Fr(,)g(a)h(p)s -(olynomial)e(of)i(degree)g Fp(<)p Fr(=)f(0.)-30 4061 -y Fp(cl_UP)f(R->monomial)e(\(const)i(cl_ring_element&)d(x,)k(uintL)f -(e\))450 4171 y Fr(This)h(returns)f(a)h(sparse)g(p)s(olynomial:)41 -b Fp(x)30 b(*)g(X^e)p Fr(,)f(where)h Fp(X)g Fr(is)h(the)f -(indeterminate.)-30 4339 y Fp(cl_UP)f(R->create)f(\(sintL)g(degree\)) -450 4448 y Fr(Creates)d(a)f(new)f(p)s(olynomial)g(with)h(a)g(giv)m(en)h -(degree.)39 b(The)24 b(zero)g(p)s(olynomial)g(has)f(degree)i -Fp(-1)p Fr(.)38 b(After)450 4558 y(creating)26 b(the)f(p)s(olynomial,)g -(y)m(ou)g(should)e(put)h(in)g(the)h(co)s(e\016cien)m(ts,)j(using)c(the) -h Fp(set_coeff)d Fr(mem)m(b)s(er)450 4667 y(function,)30 -b(and)g(then)g(call)i(the)e Fp(finalize)f Fr(mem)m(b)s(er)e(function.) --30 4839 y(The)j(follo)m(wing)i(are)e(the)h(only)g(destructiv)m(e)g(op) -s(erations)g(on)f(univ)-5 b(ariate)31 b(p)s(olynomials.)-30 -5011 y Fp(void)e(set_coeff)f(\(cl_UP&)g(x,)i(uintL)f(index,)g(const)g -(cl_ring_element&)d(y\))450 5121 y Fr(This)32 b(c)m(hanges)i(the)f(co)s -(e\016cien)m(t)i(of)e Fp(X^index)e Fr(in)i Fp(x)g Fr(to)g(b)s(e)g -Fp(y)p Fr(.)48 b(After)33 b(c)m(hanging)h(a)f(p)s(olynomial)g(and)450 -5230 y(b)s(efore)40 b(applying)h(an)m(y)g Fp(")p Fr(normal)p -Fp(")e Fr(op)s(eration)i(on)g(it,)j(y)m(ou)d(should)f(call)i(its)f -Fp(finalize)e Fr(mem)m(b)s(er)450 5340 y(function.)p -eop -%%Page: 41 43 -41 42 bop -30 -116 a Fr(Chapter)30 b(9:)41 b(Univ)-5 -b(ariate)32 b(p)s(olynomials)2483 b(41)-30 299 y Fp(void)29 -b(finalize)f(\(cl_UP&)h(x\))450 408 y Fr(This)j(function)h(marks)f(the) -h(endp)s(oin)m(t)f(of)i(destructiv)m(e)g(mo)s(di\014cations)e(of)h(a)h -(p)s(olynomial.)48 b(It)33 b(nor-)450 518 y(malizes)c(the)f(in)m -(ternal)h(represen)m(tation)h(so)e(that)h(subsequen)m(t)f(computations) -g(ha)m(v)m(e)i(less)e(o)m(v)m(erhead.)450 628 y(Doing)f(normal)e -(computations)g(on)h(unnormalized)f(p)s(olynomials)g(ma)m(y)g(pro)s -(duce)g(wrong)g(results)h(or)450 737 y(crash)k(the)h(program.)-30 -887 y(The)f(follo)m(wing)i(op)s(erations)e(are)h(de\014ned)e(on)i(univ) --5 b(ariate)31 b(p)s(olynomials.)-30 1036 y Fp(cl_univpoly_ring)26 -b(x.ring)j(\(\))450 1146 y Fr(Returns)g(the)i(ring)f(to)h(whic)m(h)f -(the)h(univ)-5 b(ariate)31 b(p)s(olynomial)f Fp(x)g Fr(b)s(elongs.)-30 -1295 y Fp(cl_UP)f(operator+)f(\(const)g(cl_UP&,)h(const)g(cl_UP&\))450 -1405 y Fr(Returns)g(the)i(sum)d(of)j(t)m(w)m(o)h(univ)-5 -b(ariate)31 b(p)s(olynomials.)-30 1554 y Fp(cl_UP)e(operator-)f -(\(const)g(cl_UP&,)h(const)g(cl_UP&\))450 1664 y Fr(Returns)g(the)i -(di\013erence)g(of)f(t)m(w)m(o)i(univ)-5 b(ariate)31 -b(p)s(olynomials.)-30 1813 y Fp(cl_UP)e(operator-)f(\(const)g(cl_UP&\)) -450 1923 y Fr(Returns)h(the)i(negativ)m(e)i(of)d(a)h(univ)-5 -b(ariate)31 b(p)s(olynomial.)-30 2072 y Fp(cl_UP)e(operator*)f(\(const) -g(cl_UP&,)h(const)g(cl_UP&\))450 2182 y Fr(Returns)i(the)i(pro)s(duct)d -(of)j(t)m(w)m(o)g(univ)-5 b(ariate)33 b(p)s(olynomials.)45 -b(One)32 b(of)g(the)g(argumen)m(ts)g(ma)m(y)f(also)j(b)s(e)450 -2291 y(a)d(plain)f(in)m(teger)i(or)e(an)g(elemen)m(t)h(of)g(the)f(base) -h(ring.)-30 2441 y Fp(cl_UP)e(square)g(\(const)f(cl_UP&\))450 -2550 y Fr(Returns)h(the)i(square)f(of)h(a)f(univ)-5 b(ariate)31 -b(p)s(olynomial.)-30 2700 y Fp(cl_UP)e(expt_pos)f(\(const)h(cl_UP&)f -(x,)i(const)f(cl_I&)g(y\))450 2809 y(y)h Fr(m)m(ust)f(b)s(e)h -Fp(>)g Fr(0.)41 b(Returns)30 b Fp(x^y)p Fr(.)-30 2959 -y Fp(bool)f(operator==)f(\(const)g(cl_UP&,)h(const)g(cl_UP&\))-30 -3068 y(bool)g(operator!=)f(\(const)g(cl_UP&,)h(const)g(cl_UP&\))450 -3178 y Fr(Compares)23 b(t)m(w)m(o)i(univ)-5 b(ariate)25 -b(p)s(olynomials,)g(b)s(elonging)g(to)g(the)f(same)g(univ)-5 -b(ariate)24 b(p)s(olynomial)g(ring,)450 3288 y(for)30 -b(equalit)m(y)-8 b(.)-30 3437 y Fp(cl_boolean)28 b(zerop)h(\(const)f -(cl_UP&)h(x\))450 3547 y Fr(Returns)g(true)i(if)f Fp(x)g -Fr(is)g Fp(0)g(in)g(R)p Fr(.)-30 3696 y Fp(sintL)f(degree)g(\(const)f -(cl_UP&)h(x\))450 3806 y Fr(Returns)g(the)i(degree)g(of)g(the)f(p)s -(olynomial.)40 b(The)30 b(zero)h(p)s(olynomial)f(has)g(degree)h -Fp(-1)p Fr(.)-30 3955 y Fp(cl_ring_element)26 b(coeff)j(\(const)g -(cl_UP&)f(x,)i(uintL)f(index\))450 4065 y Fr(Returns)g(the)i(co)s -(e\016cien)m(t)h(of)f Fp(X^index)d Fr(in)i(the)h(p)s(olynomial)f -Fp(x)p Fr(.)-30 4214 y Fp(cl_ring_element)c(x)k(\(const)f -(cl_ring_element&)d(y\))450 4324 y Fr(Ev)-5 b(aluation:)42 -b(If)29 b Fp(x)h Fr(is)h(a)f(p)s(olynomial)g(and)f Fp(y)h -Fr(b)s(elongs)g(to)h(the)g(base)f(ring,)g(then)g(`)p -Fp(x\(y\))p Fr(')g(returns)f(the)450 4433 y(v)-5 b(alue)31 -b(of)f(the)h(substitution)f(of)h Fp(y)f Fr(in)m(to)h -Fp(x)p Fr(.)-30 4583 y Fp(cl_UP)e(deriv)g(\(const)g(cl_UP&)f(x\))450 -4692 y Fr(Returns)h(the)i(deriv)-5 b(ativ)m(e)32 b(of)e(the)h(p)s -(olynomial)f Fp(x)g Fr(with)g(resp)s(ect)g(to)h(the)g(indeterminate)f -Fp(X)p Fr(.)-30 4842 y(The)g(follo)m(wing)i(output)e(functions)g(are)g -(de\014ned)g(\(see)h(also)g(the)g(c)m(hapter)g(on)f(input/output\).)-30 -4991 y Fp(void)f(fprint)g(\(cl_ostream)e(stream,)i(const)f(cl_UP&)h -(x\))-30 5101 y(cl_ostream)f(operator<<)f(\(cl_ostream)g(stream,)i -(const)g(cl_UP&)f(x\))450 5210 y Fr(Prin)m(ts)d(the)f(univ)-5 -b(ariate)26 b(p)s(olynomial)e Fp(x)g Fr(on)h(the)f Fp(stream)p -Fr(.)38 b(The)24 b(output)g(ma)m(y)g(dep)s(end)f(on)i(the)g(global)450 -5320 y(prin)m(ter)30 b(settings)h(in)f(the)h(v)-5 b(ariable)31 -b Fp(default_print_flags)p Fr(.)p eop -%%Page: 42 44 -42 43 bop -30 -116 a Fr(Chapter)30 b(9:)41 b(Univ)-5 -b(ariate)32 b(p)s(olynomials)2483 b(42)-30 299 y Fs(9.3)68 -b(Sp)t(ecial)45 b(p)t(olynomials)-30 491 y Fr(The)30 -b(follo)m(wing)i(functions)e(return)f(sp)s(ecial)i(p)s(olynomials.)-30 -651 y Fp(cl_UP_I)d(tschebychev)g(\(sintL)g(n\))450 760 -y Fr(Returns)h(the)i(n-th)f(Cheb)m(yshev)g(p)s(olynomial)f(\(n)h -Fp(>)p Fr(=)g(0\).)-30 920 y Fp(cl_UP_I)e(hermite)h(\(sintL)f(n\))450 -1029 y Fr(Returns)h(the)i(n-th)f(Hermite)g(p)s(olynomial)g(\(n)g -Fp(>)p Fr(=)g(0\).)-30 1189 y Fp(cl_UP_RA)e(legendre)g(\(sintL)h(n\)) -450 1298 y Fr(Returns)g(the)i(n-th)f(Legendre)g(p)s(olynomial)g(\(n)g -Fp(>)p Fr(=)g(0\).)-30 1458 y Fp(cl_UP_I)e(laguerre)h(\(sintL)f(n\))450 -1567 y Fr(Returns)h(the)i(n-th)f(Laguerre)h(p)s(olynomial)e(\(n)h -Fp(>)p Fr(=)g(0\).)-30 1727 y(Information)e(ho)m(w)h(to)h(deriv)m(e)g -(the)g(di\013eren)m(tial)g(equation)h(satis\014ed)e(b)m(y)g(eac)m(h)h -(of)g(these)g(p)s(olynomials)e(from)g(their)-30 1836 -y(de\014nition)i(can)h(b)s(e)e(found)g(in)i(the)f Fp(doc/polynomial/)c -Fr(directory)-8 b(.)p eop -%%Page: 43 45 -43 44 bop -30 -116 a Fr(Chapter)30 b(10:)41 b(In)m(ternals)3010 -b(43)-30 299 y Fo(10)80 b(In)l(ternals)-30 651 y Fs(10.1)68 -b(Wh)l(y)45 b(C)p Fg(++)f Fs(?)-30 843 y Fr(Using)31 -b(C)p Fp(++)e Fr(as)i(an)f(implemen)m(tation)g(language)i(pro)m(vides) -45 977 y Fq(\017)60 b Fr(E\016ciency:)41 b(It)31 b(compiles)f(to)h(mac) -m(hine)f(co)s(de.)45 1111 y Fq(\017)60 b Fr(P)m(ortabilit)m(y:)49 -b(It)33 b(runs)f(on)h(all)h(platforms)f(supp)s(orting)e(a)j(C)p -Fp(++)e Fr(compiler.)50 b(Because)34 b(of)g(the)f(a)m(v)-5 -b(ailabilit)m(y)37 b(of)150 1220 y(GNU)j(C)p Fp(++)p -Fr(,)h(this)f(includes)f(all)h(curren)m(tly)g(used)e(32-bit)j(and)e -(64-bit)i(platforms,)g(indep)s(enden)m(tly)d(of)i(the)150 -1330 y(qualit)m(y)32 b(of)e(the)h(v)m(endor's)f(C)p Fp(++)f -Fr(compiler.)45 1464 y Fq(\017)60 b Fr(T)m(yp)s(e)30 -b(safet)m(y:)43 b(The)30 b(C)p Fp(++)g Fr(compilers)g(kno)m(ws)g(ab)s -(out)h(the)f(n)m(um)m(b)s(er)f(t)m(yp)s(es)h(and)h(complains)f(if,)h -(for)f(example,)150 1573 y(y)m(ou)44 b(try)f(to)i(assign)f(a)g(\015oat) -g(to)g(an)g(in)m(teger)h(v)-5 b(ariable.)81 b(Ho)m(w)m(ev)m(er,)50 -b(a)44 b(dra)m(wbac)m(k)g(is)f(that)h(C)p Fp(++)f Fr(do)s(esn't)150 -1683 y(kno)m(w)33 b(ab)s(out)h(generic)g(t)m(yp)s(es,)g(hence)g(a)g -(restriction)g(lik)m(e)h(that)f Fp(operator+)28 b(\(const)g(cl_MI&,)h -(const)g(cl_)150 1792 y(MI&\))j Fr(requires)h(that)g(b)s(oth)g(argumen) -m(ts)f(b)s(elong)h(to)h(the)g(same)e(mo)s(dular)f(ring)i(cannot)h(b)s -(e)f(expressed)f(as)i(a)150 1902 y(compile-time)c(information.)45 -2036 y Fq(\017)60 b Fr(Algebraic)37 b(syn)m(tax:)52 b(The)35 -b(elemen)m(tary)h(op)s(erations)g Fp(+)p Fr(,)g Fp(-)p -Fr(,)h Fp(*)p Fr(,)g Fp(=)p Fr(,)g Fp(==)p Fr(,)f(...)57 -b(can)36 b(b)s(e)f(used)f(in)i(in\014x)e(notation,)150 -2145 y(whic)m(h)c(is)h(more)e(con)m(v)m(enien)m(t)k(than)d(Lisp)f -(notation)j(`)p Fp(\(+)e(x)g(y\))p Fr(')g(or)g(C)g(notation)i(`)p -Fp(add\(x,y,&z\))p Fr('.)-30 2303 y(With)24 b(these)f(language)h -(features,)i(there)d(is)g(no)g(need)g(for)f(t)m(w)m(o)j(separate)f -(languages,)i(one)d(for)g(the)g(implemen)m(tation)-30 -2413 y(of)44 b(the)g(library)f(and)g(one)h(in)g(whic)m(h)f(the)h -(library's)g(users)f(can)h(program.)79 b(This)43 b(means)g(that)h(a)g -(protot)m(yp)s(e)-30 2523 y(implemen)m(tation)c(of)g(an)g(algorithm)g -(can)h(b)s(e)f(in)m(tegrated)h(in)m(to)h(the)e(library)g(immediately)f -(after)i(it)g(has)f(b)s(een)-30 2632 y(tested)g(and)e(debugged.)65 -b(No)39 b(need)g(to)g(rewrite)g(it)h(in)e(a)h(lo)m(w-lev)m(el)j -(language)e(after)f(ha)m(ving)g(protot)m(yp)s(ed)g(in)g(a)-30 -2742 y(high-lev)m(el)32 b(language.)-30 2997 y Fs(10.2)68 -b(Memory)45 b(e\016ciency)-30 3189 y Fr(In)30 b(order)g(to)h(sa)m(v)m -(e)h(memory)c(allo)s(cations,)33 b(CLN)d(implemen)m(ts:)45 -3323 y Fq(\017)60 b Fr(Ob)5 b(ject)31 b(sharing:)40 b(An)30 -b(op)s(eration)h(lik)m(e)g Fp(x+0)f Fr(returns)f Fp(x)h -Fr(without)g(cop)m(ying)i(it.)45 3457 y Fq(\017)60 b -Fr(Garbage)29 b(collection:)42 b(A)28 b(reference)h(coun)m(ting)g(mec)m -(hanism)d(mak)m(es)i(sure)f(that)i(an)m(y)f(n)m(um)m(b)s(er)d(ob)5 -b(ject's)29 b(stor-)150 3566 y(age)j(is)e(freed)g(immediately)g(when)f -(the)i(last)g(reference)g(to)g(the)f(ob)5 b(ject)32 b(is)e(gone.)45 -3700 y Fq(\017)60 b Fr(Small)35 b(in)m(tegers)h(are)g(represen)m(ted)f -(as)h(immediate)e(v)-5 b(alues)36 b(instead)g(of)f(p)s(oin)m(ters)h(to) -g(heap)f(allo)s(cated)i(stor-)150 3810 y(age.)51 b(This)33 -b(means)f(that)i(in)m(tegers)g Fp(>)d(-2^29)p Fr(,)h -Fp(<)f(2^29)h Fr(don't)h(consume)f(heap)h(memory)-8 b(,)33 -b(unless)g(they)g(w)m(ere)150 3919 y(explicitly)f(allo)s(cated)g(on)f -(the)f(heap.)-30 4174 y Fs(10.3)68 b(Sp)t(eed)45 b(e\016ciency)-30 -4366 y Fr(Sp)s(eed)29 b(e\016ciency)j(is)e(obtained)h(b)m(y)f(the)h -(com)m(bination)f(of)h(the)f(follo)m(wing)i(tric)m(ks)f(and)f -(algorithms:)45 4500 y Fq(\017)60 b Fr(Small)43 b(in)m(tegers,)49 -b(b)s(eing)43 b(represen)m(ted)h(as)g(immediate)f(v)-5 -b(alues,)48 b(don't)43 b(require)h(memory)e(access,)48 -b(just)c(a)150 4610 y(couple)31 b(of)f(instructions)h(for)f(eac)m(h)h -(elemen)m(tary)g(op)s(eration.)45 4744 y Fq(\017)60 b -Fr(The)31 b(k)m(ernel)h(of)f(CLN)g(has)g(b)s(een)g(written)g(in)g -(assem)m(bly)g(language)i(for)e(some)g(CPUs)f(\()p Fp(i386)p -Fr(,)h Fp(m68k)p Fr(,)g Fp(sparc)p Fr(,)150 4853 y Fp(mips)p -Fr(,)e Fp(arm)p Fr(\).)45 4987 y Fq(\017)60 b Fr(On)38 -b(all)h(CPUs,)h(CLN)e(ma)m(y)g(b)s(e)g(con\014gured)g(to)h(use)f(the)g -(sup)s(ere\016cien)m(t)h(lo)m(w-lev)m(el)i(routines)d(from)f(GNU)150 -5097 y(GMP)31 b(v)m(ersion)g(3.)45 5230 y Fq(\017)60 -b Fr(F)-8 b(or)32 b(large)g(n)m(um)m(b)s(ers,)e(CLN)g(uses,)i(instead)f -(of)h(the)f(standard)f Fp(O\(N^2\))g Fr(algorithm,)i(the)f(Karatsuba)g -(m)m(ulti-)150 5340 y(plication,)h(whic)m(h)e(is)h(an)f -Ff(O)s Fr(\()p Ff(N)1217 5307 y Fi(1)p Fj(:)p Fi(6)1307 -5340 y Fr(\))h(algorithm.)p eop -%%Page: 44 46 -44 45 bop -30 -116 a Fr(Chapter)30 b(10:)41 b(In)m(ternals)3010 -b(44)45 299 y Fq(\017)60 b Fr(F)-8 b(or)50 b(v)m(ery)g(large)g(n)m(um)m -(b)s(ers)d(\(more)i(than)g(12000)j(decimal)d(digits\),)55 -b(CLN)49 b(uses)g(Sc)m(h\177)-45 b(onhage-Strassen)150 -408 y(m)m(ultiplication,)32 b(whic)m(h)e(is)g(an)g(asymptotically)i -(optimal)e(m)m(ultiplication)i(algorithm.)45 543 y Fq(\017)60 -b Fr(These)32 b(fast)g(m)m(ultiplication)i(algorithms)e(also)h(giv)m(e) -g(impro)m(v)m(emen)m(ts)f(in)g(the)g(sp)s(eed)f(of)i(division)f(and)f -(radix)150 653 y(con)m(v)m(ersion.)-30 910 y Fs(10.4)68 -b(Garbage)46 b(collection)-30 1103 y Fr(All)33 b(the)g(n)m(um)m(b)s(er) -d(classes)j(are)g(reference)g(coun)m(t)g(classes:)46 -b(They)31 b(only)i(con)m(tain)h(a)f(p)s(oin)m(ter)f(to)h(an)f(ob)5 -b(ject)34 b(in)e(the)-30 1212 y(heap.)40 b(Up)s(on)27 -b(construction,)j(assignmen)m(t)e(and)g(destruction)h(of)f(n)m(um)m(b)s -(er)e(ob)5 b(jects,)30 b(only)f(the)f(ob)5 b(jects')29 -b(reference)-30 1322 y(coun)m(t)i(are)g(manipulated.)-30 -1456 y(Memory)k(o)s(ccupied)h(b)m(y)f(n)m(um)m(b)s(er)f(ob)5 -b(jects)36 b(are)h(automatically)g(reclaimed)f(as)g(so)s(on)f(as)h -(their)g(reference)g(coun)m(t)-30 1566 y(drops)29 b(to)i(zero.)-30 -1700 y(F)-8 b(or)34 b(n)m(um)m(b)s(er)e(rings,)i(another)g(strategy)h -(is)f(implemen)m(ted:)46 b(There)33 b(is)h(a)g(cac)m(he)h(of,)g(for)f -(example,)g(the)g(mo)s(dular)-30 1810 y(in)m(teger)29 -b(rings.)39 b(A)27 b(mo)s(dular)f(in)m(teger)j(ring)e(is)g(destro)m(y)m -(ed)h(only)g(if)f(its)h(reference)g(coun)m(t)g(dropp)s(ed)d(to)j(zero)g -(and)f(the)-30 1919 y(cac)m(he)36 b(is)f(ab)s(out)f(to)h(b)s(e)f -(resized.)54 b(The)34 b(e\013ect)i(of)e(this)h(strategy)h(is)e(that)h -(recen)m(tly)h(used)e(rings)g(remain)g(cac)m(hed,)-30 -2029 y(whereas)c(undue)f(memory)f(consumption)h(through)h(cac)m(hed)h -(rings)f(is)h(a)m(v)m(oided.)p eop -%%Page: 45 47 -45 46 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(45)-30 299 y Fo(11)80 b(Using)54 -b(the)f(library)-30 542 y Fr(F)-8 b(or)47 b(the)g(follo)m(wing)g -(discussion,)j(w)m(e)d(will)g(assume)e(that)h(y)m(ou)h(ha)m(v)m(e)h -(installed)f(the)f(CLN)g(source)g(in)g Fp($CLN_)-30 652 -y(DIR)41 b Fr(and)g(built)h(it)g(in)g Fp($CLN_TARGETDIR)p -Fr(.)71 b(F)-8 b(or)43 b(example,)h(for)e(me)f(it's)h -Fp(CLN_DIR="$HOME/cln")37 b Fr(and)k Fp(CLN_)-30 762 -y(TARGETDIR="$HOME/cln/lin)o(uxel)o(f")p Fr(.)53 b(Y)-8 -b(ou)38 b(migh)m(t)e(de\014ne)g(these)h(as)g(en)m(vironmen)m(t)f(v)-5 -b(ariables,)40 b(or)c(directly)-30 871 y(substitute)30 -b(the)h(appropriate)f(v)-5 b(alues.)-30 1136 y Fs(11.1)68 -b(Compiler)46 b(options)-30 1332 y Fr(Un)m(til)31 b(y)m(ou)g(ha)m(v)m -(e)h(installed)f(CLN)f(in)g(a)h(public)e(place,)j(the)e(follo)m(wing)i -(options)f(are)g(needed:)-30 1470 y(When)f(y)m(ou)h(compile)f(CLN)g -(application)i(co)s(de,)f(add)e(the)i(\015ags)353 1601 -y Fp(-I$CLN_DIR/include)43 b(-I$CLN_TARGETDIR/include)-30 -1739 y Fr(to)29 b(the)g(C)p Fp(++)e Fr(compiler's)h(command)f(line)h -(\()p Fp(make)g Fr(v)-5 b(ariable)29 b(CFLA)m(GS)g(or)f(CXXFLA)m(GS\).) -i(When)e(y)m(ou)h(link)f(CLN)-30 1849 y(application)k(co)s(de)e(to)h -(form)e(an)i(executable,)h(add)e(the)g(\015ags)353 1980 -y Fp($CLN_TARGETDIR/src/libcln)o(.a)-30 2118 y Fr(to)h(the)g(C/C)p -Fp(++)e Fr(compiler's)h(command)e(line)j(\()p Fp(make)f -Fr(v)-5 b(ariable)31 b(LIBS\).)-30 2256 y(If)62 b(y)m(ou)h(did)f(a)h -Fp(make)29 b(install)p Fr(,)69 b(the)62 b(include)h(\014les)f(are)h -(installed)g(in)g(a)f(public)g(directory)h(\(normally)-30 -2365 y Fp(/usr/local/include)p Fr(\),)45 b(hence)g(y)m(ou)h(don't)g -(need)f(sp)s(ecial)h(\015ags)g(for)f(compiling.)85 b(The)45 -b(library)g(has)h(b)s(een)-30 2475 y(installed)i(to)g(a)f(public)f -(directory)i(as)f(w)m(ell)h(\(normally)f Fp(/usr/local/lib)p -Fr(\),)h(hence)f(when)f(linking)h(a)g(CLN)-30 2584 y(application)32 -b(it)f(is)f(su\016cien)m(t)h(to)g(giv)m(e)h(the)e(\015ag)h -Fp(-lcln)p Fr(.)-30 2850 y Fs(11.2)68 b(Compatibilit)l(y)48 -b(to)d(old)g(CLN)g(v)l(ersions)-30 3045 y Fr(As)39 b(of)h(CLN)f(v)m -(ersion)h(1.1)h(all)f(non-macro)f(iden)m(ti\014ers)g(w)m(ere)h(hidden)e -(in)h(namespace)h Fp(cln)e Fr(in)h(order)g(to)h(a)m(v)m(oid)-30 -3155 y(p)s(oten)m(tial)f(name)e(clashes)h(with)f(other)h(C)p -Fp(++)e Fr(libraries.)62 b(If)37 b(y)m(ou)h(ha)m(v)m(e)h(an)e(old)h -(application,)j(y)m(ou)d(will)f(ha)m(v)m(e)i(to)-30 3264 -y(man)m(ually)30 b(p)s(ort)g(it)h(to)g(the)f(new)g(sc)m(heme.)41 -b(The)29 b(follo)m(wing)j(principles)e(will)h(help)f(during)f(the)i -(transition:)45 3402 y Fq(\017)60 b Fr(All)35 b(headers)f(are)h(no)m(w) -f(in)g(a)h(separate)h(sub)s(directory)-8 b(.)52 b(Instead)34 -b(of)h(including)f Fp(cl_)p Fl(something)8 b Fp(.h)p -Fr(,)33 b(include)150 3512 y Fp(cln/)p Fl(something)8 -b Fp(.h)28 b Fr(no)m(w.)45 3648 y Fq(\017)60 b Fr(All)25 -b(public)e(iden)m(ti\014ers)i(\(t)m(yp)s(enames)e(and)h(functions\))g -(ha)m(v)m(e)h(lost)g(their)g Fp(cl_)e Fr(pre\014x.)37 -b(Exceptions)25 b(are)g(all)g(the)150 3757 y(t)m(yp)s(enames)j(of)i(n)m -(um)m(b)s(er)d(t)m(yp)s(es,)j(\(cl)p 1404 3757 28 4 v -34 w(N,)f(cl)p 1625 3757 V 34 w(I,)g(cl)p 1811 3757 V -33 w(MI,)36 b(.)22 b(.)g(.)11 b(\),)30 b(rings,)g(sym)m(b)s(olic)f(t)m -(yp)s(es)g(\(cl)p 3204 3757 V 34 w(string,)g(cl)p 3585 -3757 V 34 w(sym)m(b)s(ol\))150 3867 y(and)36 b(p)s(olynomials)g(\(cl)p -950 3867 V 33 w(UP)p 1113 3867 V 33 w Fl(t)m(yp)s(e)5 -b Fr(\).)60 b(\(This)36 b(is)h(b)s(ecause)f(their)h(names)f(w)m(ould)g -(not)h(b)s(e)f(mnemonic)e(enough)150 3977 y(once)d(the)g(namespace)f -Fp(cln)f Fr(is)i(imp)s(orted.)39 b(Ev)m(en)30 b(in)g(a)h(namespace)f(w) -m(e)h(fa)m(v)m(or)g Fp(cl_N)f Fr(o)m(v)m(er)h Fp(N)p -Fr(.\))45 4113 y Fq(\017)60 b Fr(All)30 b(public)e Fe(functions)37 -b Fr(that)29 b(had)g(b)m(y)g(a)g Fp(cl_)f Fr(in)h(their)g(name)f(still) -i(carry)e(that)i Fp(cl_)e Fr(if)h(it)h(is)f(in)m(trinsic)g(part)g(of) -150 4222 y(a)i(t)m(yp)s(ename)e(\(as)i(in)f Fp(cl_I_to_int)e(\(\))p -Fr(\).)-30 4386 y(When)d(dev)m(eloping)h(other)f(libraries,)h(please)g -(k)m(eep)f(in)g(mind)e(not)i(to)g(imp)s(ort)f(the)h(namespace)f -Fp(cln)g Fr(in)h(one)g(of)g(y)m(our)-30 4496 y(public)e(header)g -(\014les)h(b)m(y)g(sa)m(ying)g Fp(using)29 b(namespace)f(cln;)p -Fr(.)37 b(This)23 b(w)m(ould)h(propagate)g(to)h(other)f(applications)h -(and)-30 4605 y(can)31 b(cause)g(name)e(clashes)i(there.)-30 -4871 y Fs(11.3)68 b(Include)45 b(\014les)-30 5066 y Fr(Here)31 -b(is)f(a)h(summary)c(of)k(the)f(include)h(\014les)f(and)g(their)g(con)m -(ten)m(ts.)-30 5230 y Fp()450 5340 y Fr(General)h -(de\014nitions,)f(reference)h(coun)m(ting,)h(garbage)f(collection.)p -eop -%%Page: 46 48 -46 47 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(46)-30 299 y Fp()450 -408 y Fr(The)30 b(class)h(cl)p 920 408 28 4 v 33 w(n)m(um)m(b)s(er.)-30 -573 y Fp()450 682 y Fr(F)-8 b(unctions)31 -b(for)f(class)h(cl)p 1288 682 V 34 w(N,)f(the)h(complex)f(n)m(um)m(b)s -(ers.)-30 847 y Fp()450 956 y Fr(F)-8 b(unctions)31 -b(for)f(class)h(cl)p 1288 956 V 34 w(R,)f(the)h(real)g(n)m(um)m(b)s -(ers.)-30 1121 y Fp()450 1230 y Fr(F)-8 -b(unctions)31 b(for)f(class)h(cl)p 1288 1230 V 34 w(F,)f(the)h -(\015oats.)-30 1395 y Fp()450 1504 y Fr(F)-8 -b(unctions)31 b(for)f(class)h(cl)p 1288 1504 V 34 w(SF,)f(the)h -(short-\015oats.)-30 1669 y Fp()450 1778 -y Fr(F)-8 b(unctions)31 b(for)f(class)h(cl)p 1288 1778 -V 34 w(FF,)g(the)f(single-\015oats.)-30 1943 y Fp()450 -2052 y Fr(F)-8 b(unctions)31 b(for)f(class)h(cl)p 1288 -2052 V 34 w(DF,)g(the)f(double-\015oats.)-30 2217 y Fp() -450 2326 y Fr(F)-8 b(unctions)31 b(for)f(class)h(cl)p -1288 2326 V 34 w(LF,)f(the)h(long-\015oats.)-30 2491 -y Fp()450 2600 y Fr(F)-8 b(unctions)31 -b(for)f(class)h(cl)p 1288 2600 V 34 w(RA,)f(the)h(rational)g(n)m(um)m -(b)s(ers.)-30 2765 y Fp()450 2874 y Fr(F)-8 -b(unctions)31 b(for)f(class)h(cl)p 1288 2874 V 34 w(I,)f(the)h(in)m -(tegers.)-30 3039 y Fp()450 3148 y Fr(Input/Output.)-30 -3313 y Fp()450 3422 y Fr(Input/Output)d(for)j(class)g -(cl)p 1461 3422 V 33 w(N,)g(the)f(complex)g(n)m(um)m(b)s(ers.)-30 -3587 y Fp()450 3696 y Fr(Input/Output)e(for)j(class)g -(cl)p 1461 3696 V 33 w(R,)g(the)f(real)h(n)m(um)m(b)s(ers.)-30 -3861 y Fp()450 3970 y Fr(Input/Output)d(for)j(class)g -(cl)p 1461 3970 V 33 w(F,)g(the)g(\015oats.)-30 4134 -y Fp()450 4244 y Fr(Input/Output)d(for)j(class)g(cl)p -1461 4244 V 33 w(SF,)f(the)h(short-\015oats.)-30 4408 -y Fp()450 4518 y Fr(Input/Output)d(for)j(class)g(cl)p -1461 4518 V 33 w(FF,)g(the)g(single-\015oats.)-30 4682 -y Fp()450 4792 y Fr(Input/Output)d(for)j(class)g(cl)p -1461 4792 V 33 w(DF,)g(the)g(double-\015oats.)-30 4956 -y Fp()450 5066 y Fr(Input/Output)d(for)j(class)g(cl)p -1461 5066 V 33 w(LF,)g(the)f(long-\015oats.)-30 5230 -y Fp()450 5340 y Fr(Input/Output)e(for)j(class)g(cl) -p 1461 5340 V 33 w(RA,)g(the)f(rational)i(n)m(um)m(b)s(ers.)p -eop -%%Page: 47 49 -47 48 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(47)-30 299 y Fp()450 -408 y Fr(Input/Output)28 b(for)j(class)g(cl)p 1461 408 -28 4 v 33 w(I,)f(the)h(in)m(tegers.)-30 573 y Fp()450 -682 y Fr(Flags)h(for)e(customizing)g(input)g(op)s(erations.)-30 -847 y Fp()450 956 y Fr(Flags)i(for)e(customizing)g -(output)g(op)s(erations.)-30 1121 y Fp()450 -1230 y(malloc_hook)p Fr(,)e Fp(free_hook)p Fr(.)-30 1395 -y Fp()450 1504 y(cl_abort)p Fr(.)-30 1669 -y Fp()450 1778 y Fr(Conditions/exceptions.)-30 -1943 y Fp()450 2052 y Fr(Strings.)-30 2217 -y Fp()450 2326 y Fr(Sym)m(b)s(ols.)-30 -2491 y Fp()450 2600 y Fr(Prop)s(ert)m(y)i(lists.)-30 -2765 y Fp()450 2874 y Fr(General)h(rings.)-30 -3039 y Fp()450 3148 y Fr(The)f(n)m(ull)g(ring.)-30 -3313 y Fp()450 3422 y Fr(The)g(ring)g(of)h(complex) -f(n)m(um)m(b)s(ers.)-30 3587 y Fp()450 -3696 y Fr(The)g(ring)g(of)h(real)g(n)m(um)m(b)s(ers.)-30 -3861 y Fp()450 3970 y Fr(The)f(ring)g(of)h -(rational)g(n)m(um)m(b)s(ers.)-30 4134 y Fp()450 -4244 y Fr(The)f(ring)g(of)h(in)m(tegers.)-30 4408 y Fp -()450 4518 y Fr(Num)m(b)s(er)d(threory)i(functions.) --30 4682 y Fp()450 4792 y Fr(Mo)s(dular)g(in)m -(tegers.)-30 4956 y Fp()450 5066 y Fr(V)-8 b(ectors.)-30 -5230 y Fp()450 5340 y Fr(General)31 b(v)m(ectors.)p -eop -%%Page: 48 50 -48 49 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(48)-30 299 y Fp()450 -408 y Fr(General)31 b(v)m(ectors)h(o)m(v)m(er)g(cl)p -1363 408 28 4 v 33 w(n)m(um)m(b)s(er.)-30 573 y Fp() -450 682 y Fr(General)f(v)m(ectors)h(o)m(v)m(er)g(cl)p -1363 682 V 33 w(N.)-30 847 y Fp()450 956 -y Fr(General)f(v)m(ectors)h(o)m(v)m(er)g(cl)p 1363 956 -V 33 w(R.)-30 1121 y Fp()450 1230 -y Fr(General)f(v)m(ectors)h(o)m(v)m(er)g(cl)p 1363 1230 -V 33 w(RA.)-30 1395 y Fp()450 1504 -y Fr(General)f(v)m(ectors)h(o)m(v)m(er)g(cl)p 1363 1504 -V 33 w(I.)-30 1669 y Fp()450 1778 -y Fr(General)f(v)m(ectors)h(of)f(mo)s(dular)d(in)m(tegers.)-30 -1943 y Fp()450 2052 y Fr(Simple)h(v)m(ectors.)-30 -2217 y Fp()450 2326 y Fr(Simple)g(v)m(ectors)j(o)m(v)m -(er)g(cl)p 1322 2326 V 33 w(n)m(um)m(b)s(er.)-30 2491 -y Fp()450 2600 y Fr(Simple)d(v)m(ectors)j(o)m(v)m(er) -g(cl)p 1322 2600 V 33 w(N.)-30 2765 y Fp()450 -2874 y Fr(Simple)d(v)m(ectors)j(o)m(v)m(er)g(cl)p 1322 -2874 V 33 w(R.)-30 3039 y Fp()450 -3148 y Fr(Simple)d(v)m(ectors)j(o)m(v)m(er)g(cl)p 1322 -3148 V 33 w(RA.)-30 3313 y Fp()450 -3422 y Fr(Simple)d(v)m(ectors)j(o)m(v)m(er)g(cl)p 1322 -3422 V 33 w(I.)-30 3587 y Fp()450 3696 -y Fr(Simple)d(v)m(ectors)j(of)e(general)i(ring)e(elemen)m(ts.)-30 -3861 y Fp()450 3970 y Fr(Univ)-5 b(ariate)32 -b(p)s(olynomials.)-30 4134 y Fp()450 -4244 y Fr(Univ)-5 b(ariate)32 b(p)s(olynomials)d(o)m(v)m(er)j(the)f(in) -m(tegers.)-30 4408 y Fp()450 -4518 y Fr(Univ)-5 b(ariate)32 b(p)s(olynomials)d(o)m(v)m(er)j(the)f -(rational)g(n)m(um)m(b)s(ers.)-30 4682 y Fp()450 -4792 y Fr(Univ)-5 b(ariate)32 b(p)s(olynomials)d(o)m(v)m(er)j(the)f -(real)g(n)m(um)m(b)s(ers.)-30 4956 y Fp()450 -5066 y Fr(Univ)-5 b(ariate)32 b(p)s(olynomials)d(o)m(v)m(er)j(the)f -(complex)f(n)m(um)m(b)s(ers.)-30 5230 y Fp()450 -5340 y Fr(Univ)-5 b(ariate)32 b(p)s(olynomials)d(o)m(v)m(er)j(mo)s -(dular)c(in)m(teger)k(rings.)p eop -%%Page: 49 51 -49 50 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(49)-30 299 y Fp()450 -408 y Fr(Timing)29 b(facilities.)-30 576 y Fp()450 -686 y Fr(Includes)h(all)h(of)f(the)h(ab)s(o)m(v)m(e.)-30 -965 y Fs(11.4)68 b(An)44 b(Example)-30 1166 y Fr(A)30 -b(function)h(whic)m(h)f(computes)f(the)i(n)m(th)f(Fib)s(onacci)h(n)m -(um)m(b)s(er)d(can)j(b)s(e)f(written)g(as)h(follo)m(ws.)210 -1303 y Fp(#include)46 b()210 1407 y(#include)g -()210 1511 y(using)g(namespace)g(cln;)210 -1718 y(//)h(Returns)f(F_n,)h(computed)e(as)i(the)g(nearest)f(integer)g -(to)210 1822 y(//)h(\(\(1+sqrt\(5\)\)/2\)^n/sqrt\(5\))o(.)42 -b(Assume)k(n>=0.)210 1926 y(const)g(cl_I)h(fibonacci)e(\(int)i(n\))210 -2030 y({)592 2133 y(//)g(Need)g(a)g(precision)e(of)j -(\(\(1+sqrt\(5\)\)/2\)^-n.)592 2237 y(cl_float_format_t)43 -b(prec)k(=)g(cl_float_format\(\(int\)\(0.)o(2089)o(8764)o(1*n)o(+5\)\)) -o(;)592 2341 y(cl_R)f(sqrt5)h(=)g(sqrt\(cl_float\(5,prec\)\);)592 -2445 y(cl_R)f(phi)h(=)h(\(1+sqrt5\)/2;)592 2548 y(return)e(round1\()g -(expt\(phi,n\)/sqrt5)d(\);)210 2652 y(})-30 2795 y Fr(Let's)31 -b(explain)g(what)f(is)g(going)i(on)e(in)g(detail.)-30 -2938 y(The)k(include)h(\014le)f Fp()d -Fr(is)j(necessary)h(b)s(ecause)g(the)g(t)m(yp)s(e)g Fp(cl_I)e -Fr(is)i(used)f(in)g(the)h(function,)h(and)-30 3048 y(the)31 -b(include)g(\014le)g Fp()c Fr(is)k(needed)g(for)f(the)i(t)m -(yp)s(e)f Fp(cl_R)e Fr(and)i(the)g(\015oating)h(p)s(oin)m(t)f(n)m(um)m -(b)s(er)d(functions.)-30 3157 y(The)37 b(order)g(of)h(the)f(include)h -(\014les)f(do)s(es)g(not)h(matter.)62 b(In)37 b(order)g(not)h(to)g -(write)g(out)g Fp(cln::)p Fl(fo)s(o)i Fr(w)m(e)e(can)g(safely)-30 -3267 y(imp)s(ort)29 b(the)h(whole)h(namespace)f Fp(cln)p -Fr(.)-30 3410 y(Then)23 b(comes)i(the)f(function)h(declaration.)40 -b(The)24 b(argumen)m(t)g(is)g(an)h Fp(int)p Fr(,)g(the)f(result)h(an)f -(in)m(teger.)40 b(The)24 b(return)g(t)m(yp)s(e)-30 3520 -y(is)33 b(de\014ned)e(as)i(`)p Fp(const)c(cl_I)p Fr(',)j(not)h(simply)e -(`)p Fp(cl_I)p Fr(',)i(b)s(ecause)f(that)h(allo)m(ws)h(the)f(compiler)f -(to)h(detect)h(t)m(yp)s(os)f(lik)m(e)-30 3629 y(`)p Fp(fibonacci\(n\)) -27 b(=)j(100)p Fr('.)40 b(It)29 b(w)m(ould)f(b)s(e)h(p)s(ossible)f(to)i -(declare)f(the)h(return)d(t)m(yp)s(e)i(as)g Fp(const)g(cl_R)f -Fr(\(real)i(n)m(um)m(b)s(er\))-30 3739 y(or)36 b(ev)m(en)g -Fp(const)29 b(cl_N)35 b Fr(\(complex)h(n)m(um)m(b)s(er\).)55 -b(W)-8 b(e)37 b(use)f(the)g(most)f(sp)s(ecialized)i(p)s(ossible)e -(return)g(t)m(yp)s(e)h(b)s(ecause)-30 3848 y(functions)26 -b(whic)m(h)g(call)h(`)p Fp(fibonacci)p Fr(')d(will)j(b)s(e)e(able)i(to) -g(pro\014t)f(from)e(the)j(compiler's)f(t)m(yp)s(e)g(analysis:)39 -b(Adding)26 b(t)m(w)m(o)-30 3958 y(in)m(tegers)g(is)e(sligh)m(tly)i -(more)e(e\016cien)m(t)i(than)e(adding)g(the)h(same)f(ob)5 -b(jects)25 b(declared)g(as)g(complex)f(n)m(um)m(b)s(ers,)g(b)s(ecause) --30 4068 y(it)34 b(needs)f(less)h(t)m(yp)s(e)f(dispatc)m(h.)51 -b(Also,)35 b(when)d(linking)i(to)g(CLN)f(as)h(a)g(non-shared)e(library) --8 b(,)35 b(this)e(minimizes)f(the)-30 4177 y(size)f(of)g(the)f -(resulting)h(executable)h(program.)-30 4320 y(The)f(result)g(will)h(b)s -(e)f(computed)f(as)i(expt\(phi,n\)/sqrt\(5\),)h(rounded)d(to)j(the)e -(nearest)h(in)m(teger.)46 b(In)31 b(order)g(to)h(get)-30 -4430 y(a)c(correct)h(result,)g(the)f(absolute)h(error)e(should)g(b)s(e) -g(less)i(than)e(1/2,)j(i.e.)41 b(the)28 b(relativ)m(e)i(error)e(should) -f(b)s(e)g(less)h(than)-30 4539 y(sqrt\(5\)/\(2*expt\(phi,n\)\).)65 -b(T)-8 b(o)38 b(this)g(end,)h(the)e(\014rst)g(line)h(computes)f(a)h -(\015oating)g(p)s(oin)m(t)g(precision)g(for)f(sqrt\(5\))-30 -4649 y(and)30 b(phi.)-30 4792 y(Then)41 b(sqrt\(5\))h(is)g(computed)e -(b)m(y)i(\014rst)e(con)m(v)m(erting)k(the)e(in)m(teger)h(5)f(to)g(a)g -(\015oating)g(p)s(oin)m(t)g(n)m(um)m(b)s(er)d(and)i(than)-30 -4902 y(taking)i(the)f(square)g(ro)s(ot.)76 b(The)42 b(con)m(v)m(erse,)k -(\014rst)c(taking)h(the)f(square)g(ro)s(ot)g(of)g(5,)k(and)c(then)f -(con)m(v)m(erting)j(to)-30 5011 y(the)c(desired)f(precision,)j(w)m -(ould)e(not)g(w)m(ork)f(in)h(CLN:)f(The)g(square)h(ro)s(ot)g(w)m(ould)f -(b)s(e)g(computed)f(to)j(a)f(default)-30 5121 y(precision)g(\(normally) -f(single-\015oat)j(precision\),)h(and)c(the)h(follo)m(wing)i(con)m(v)m -(ersion)f(could)f(not)g(help)f(ab)s(out)h(the)-30 5230 -y(lac)m(king)h(accuracy)-8 b(.)68 b(This)39 b(is)g(b)s(ecause)g(CLN)g -(is)g(not)g(a)g(sym)m(b)s(olic)g(computer)f(algebra)i(system)e(and)h -(do)s(es)g(not)-30 5340 y(represen)m(t)30 b(sqrt\(5\))i(in)e(a)h(non-n) -m(umeric)d(w)m(a)m(y)-8 b(.)p eop -%%Page: 50 52 -50 51 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(50)-30 299 y(The)29 b(t)m(yp)s(e)i -Fp(cl_R)d Fr(for)i(sqrt5)g(and,)g(in)g(the)g(follo)m(wing)h(line,)g -(phi)e(is)h(the)h(only)f(p)s(ossible)f(c)m(hoice.)43 -b(Y)-8 b(ou)30 b(cannot)h(write)-30 408 y Fp(cl_F)26 -b Fr(b)s(ecause)h(the)g(C)p Fp(++)g Fr(compiler)f(can)i(only)f(infer)g -(that)g Fp(cl_float\(5,prec\))c Fr(is)k(a)h(real)f(n)m(um)m(b)s(er.)38 -b(Y)-8 b(ou)27 b(cannot)-30 518 y(write)k Fp(cl_N)e Fr(b)s(ecause)h(a)h -(`)p Fp(round1)p Fr(')e(do)s(es)h(not)h(exist)g(for)f(general)h -(complex)f(n)m(um)m(b)s(ers.)-30 651 y(When)21 b(the)g(function)g -(returns,)h(all)g(the)f(lo)s(cal)h(v)-5 b(ariables)22 -b(in)f(the)g(function)g(are)g(automatically)i(reclaimed)e(\(garbage)-30 -761 y(collected\).)43 b(Only)30 b(the)h(result)f(surviv)m(es)g(and)g -(gets)h(passed)f(to)h(the)g(caller.)-30 894 y(The)d(\014le)h -Fp(fibonacci.cc)c Fr(in)j(the)h(sub)s(directory)e Fp(examples)f -Fr(con)m(tains)k(this)f(implemen)m(tation)f(together)i(with)e(an)-30 -1003 y(ev)m(en)j(faster)g(algorithm.)-30 1257 y Fs(11.5)68 -b(Debugging)46 b(supp)t(ort)-30 1448 y Fr(When)30 b(debugging)g(a)h -(CLN)f(application)i(with)e(GNU)h Fp(gdb)p Fr(,)f(t)m(w)m(o)h -(facilities)i(are)e(a)m(v)-5 b(ailable)33 b(from)28 b(the)j(library:)45 -1581 y Fq(\017)60 b Fr(The)36 b(library)g(do)s(es)g(t)m(yp)s(e)h(c)m -(hec)m(ks,)j(range)d(c)m(hec)m(ks,)i(consistency)f(c)m(hec)m(ks)g(at)f -(man)m(y)f(places.)60 b(When)36 b(one)h(of)150 1691 y(these)44 -b(fails,)j(the)c(function)g Fp(cl_abort\(\))e Fr(is)i(called.)81 -b(Its)43 b(default)g(implemen)m(tation)g(is)g(to)h(p)s(erform)d(an)150 -1800 y Fp(exit\(1\))p Fr(,)32 b(so)i(y)m(ou)g(w)m(on't)g(ha)m(v)m(e)h -(a)f(core)g(dump.)47 b(But)34 b(for)f(debugging,)h(it)g(is)g(b)s(est)f -(to)h(set)g(a)g(breakp)s(oin)m(t)f(at)150 1910 y(this)d(function:)390 -2037 y Fp(\(gdb\))46 b(break)h(cl_abort)150 2170 y Fr(When)30 -b(this)g(breakp)s(oin)m(t)h(is)f(hit,)h(lo)s(ok)g(at)g(the)f(stac)m -(k's)i(bac)m(ktrace:)390 2298 y Fp(\(gdb\))46 b(where)45 -2431 y Fq(\017)60 b Fr(The)32 b(debugger's)g(normal)g -Fp(print)f Fr(command)f(do)s(esn't)j(kno)m(w)f(ab)s(out)h(CLN's)f(t)m -(yp)s(es)g(and)g(therefore)h(prin)m(ts)150 2540 y(mostly)j(useless)g -(hexadecimal)h(addresses.)58 b(CLN)35 b(o\013ers)i(a)g(function)f -Fp(cl_print)p Fr(,)f(callable)k(from)34 b(the)j(de-)150 -2650 y(bugger,)29 b(for)f(prin)m(ting)g(n)m(um)m(b)s(er)d(ob)5 -b(jects.)41 b(In)28 b(order)f(to)i(get)g(this)f(function,)h(y)m(ou)f -(ha)m(v)m(e)i(to)f(de\014ne)e(the)h(macro)150 2760 y(`)p -Fp(CL_DEBUG)p Fr(')21 b(and)h(then)g(include)g(all)i(the)f(header)f -(\014les)h(for)f(whic)m(h)g(y)m(ou)h(w)m(an)m(t)h Fp(cl_print)c -Fr(debugging)i(supp)s(ort.)150 2869 y(F)-8 b(or)31 b(example:)390 -2996 y Fp(#define)46 b(CL_DEBUG)390 3100 y(#include)g() -150 3233 y Fr(No)m(w,)30 b(if)e(y)m(ou)g(ha)m(v)m(e)i(in)d(y)m(our)h -(program)f(a)i(v)-5 b(ariable)29 b Fp(cl_string)f(s)p -Fr(,)g(and)g(insp)s(ect)g(it)g(under)f Fp(gdb)p Fr(,)h(the)g(output)150 -3343 y(ma)m(y)i(lo)s(ok)h(lik)m(e)h(this:)390 3470 y -Fp(\(gdb\))46 b(print)h(s)390 3574 y($7)g(=)h({)43 -b(=)48 b({)f(=)h({pointer)d(=)j(0x8055b60,)d(heappointer)f(=)k -(0x8055b60,)485 3678 y(word)f(=)h(134568800}},)c(})390 -3782 y(\(gdb\))i(call)h(cl_print\(s\))390 3885 y(\(cl_string\))e("")390 -3989 y($8)i(=)h(134568800)150 4122 y Fr(Note)38 b(that)f(the)g(output)f -(of)h Fp(cl_print)d Fr(go)s(es)j(to)g(the)g(program's)f(error)g -(output,)i(not)e(to)i(gdb's)e(standard)150 4232 y(output.)150 -4365 y(Note,)43 b(ho)m(w)m(ev)m(er,)f(that)d(the)g(ab)s(o)m(v)m(e)i -(facilit)m(y)f(do)s(es)f(not)g(w)m(ork)g(with)f(all)i(CLN)f(t)m(yp)s -(es,)i(only)e(with)f(n)m(um)m(b)s(er)150 4475 y(ob)5 -b(jects)27 b(and)e(similar.)38 b(Therefore)26 b(CLN)f(o\013ers)i(a)f -(mem)m(b)s(er)d(function)j Fp(debug_print\(\))c Fr(on)j(all)i(CLN)f(t)m -(yp)s(es.)150 4584 y(The)h(same)g(macro)g(`)p Fp(CL_DEBUG)p -Fr(')f(is)h(needed)h(for)f(this)g(mem)m(b)s(er)e(function)i(to)i(b)s(e) -e(implemen)m(ted.)38 b(Under)27 b Fp(gdb)p Fr(,)150 4694 -y(y)m(ou)k(call)g(it)g(lik)m(e)h(this:)390 4821 y Fp(\(gdb\))46 -b(print)h(s)390 4925 y($7)g(=)h({)43 b(=)48 -b({)f(=)h({pointer)d(=)j(0x8055b60,)d(heappointer)f(=)k(0x8055b60,)485 -5029 y(word)f(=)h(134568800}},)c(})390 5132 y(\(gdb\))i(call)h -(s.debug_print\(\))390 5236 y(\(cl_string\))e("")390 -5340 y(\(gdb\))h(define)g(cprint)p eop -%%Page: 51 53 -51 52 bop -30 -116 a Fr(Chapter)30 b(11:)41 b(Using)31 -b(the)f(library)2681 b(51)390 299 y Fp(>call)46 b -(\($1\).debug_print\(\))390 403 y(>end)390 506 y(\(gdb\))g(cprint)g(s) -390 610 y(\(cl_string\))f("")150 745 y Fr(Unfortunately)-8 -b(,)31 b(this)g(feature)f(do)s(es)g(not)h(seem)f(to)h(w)m(ork)f(under)f -(all)i(circumstances.)p eop -%%Page: 52 54 -52 53 bop -30 -116 a Fr(Chapter)30 b(12:)41 b(Customizing)2863 -b(52)-30 299 y Fo(12)80 b(Customizing)-30 656 y Fs(12.1)68 -b(Error)46 b(handling)-30 848 y Fr(When)30 b(a)h(fatal)g(error)f(o)s -(ccurs,)g(an)g(error)g(message)g(is)g(output)g(to)h(the)f(standard)g -(error)g(output)f(stream,)h(and)g(the)-30 958 y(function)c -Fp(cl_abort)e Fr(is)i(called.)41 b(The)26 b(default)g(v)m(ersion)h(of)g -(this)f(function)g(\(pro)m(vided)g(in)g(the)h(library\))f(terminates) --30 1068 y(the)i(application.)41 b(T)-8 b(o)29 b(catc)m(h)h(suc)m(h)d -(a)i(fatal)g(error,)f(y)m(ou)h(need)e(to)i(de\014ne)f(the)g(function)f -Fp(cl_abort)f Fr(y)m(ourself,)j(with)-30 1177 y(the)i(protot)m(yp)s(e) -210 1306 y Fp(#include)46 b()210 1410 y(void)h(cl_abort)e -(\(void\);)-30 1544 y Fr(This)30 b(function)g(m)m(ust)f(not)i(return)e -(con)m(trol)j(to)f(its)f(caller.)-30 1802 y Fs(12.2)68 -b(Floating-p)t(oin)l(t)47 b(under\015o)l(w)-30 1994 y -Fr(Floating)32 b(p)s(oin)m(t)e(under\015o)m(w)e(denotes)j(the)f -(situation)h(when)e(a)h(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(er)d(is)i -(to)h(b)s(e)e(created)i(whic)m(h)-30 2104 y(is)k(so)g(close)g(to)h -Fp(0)e Fr(that)h(its)g(exp)s(onen)m(t)g(is)g(to)s(o)g(lo)m(w)g(to)h(b)s -(e)e(represen)m(ted)g(in)m(ternally)-8 b(.)55 b(By)35 -b(default,)h(this)f(causes)g(a)-30 2213 y(fatal)d(error.)40 -b(If)30 b(y)m(ou)h(set)f(the)h(global)h(v)-5 b(ariable)210 -2342 y Fp(cl_boolean)45 b(cl_inhibit_floating_poin)o(t_un)o(derf)o(low) --30 2477 y Fr(to)40 b Fp(cl_true)p Fr(,)f(the)g(error)g(will)g(b)s(e)f -(inhibited,)j(and)d(a)h(\015oating-p)s(oin)m(t)i(zero)e(will)h(b)s(e)e -(generated)i(instead.)66 b(The)-30 2586 y(default)31 -b(v)-5 b(alue)30 b(of)h Fp(cl_inhibit_floating_poin)o(t_un)o(der)o -(flow)24 b Fr(is)30 b Fp(cl_false)p Fr(.)-30 2844 y Fs(12.3)68 -b(Customizing)46 b(I/O)-30 3036 y Fr(The)31 b(output)g(of)g(the)g -(function)g Fp(fprint)f Fr(ma)m(y)h(b)s(e)f(customized)h(b)m(y)g(c)m -(hanging)i(the)e(v)-5 b(alue)32 b(of)f(the)h(global)g(v)-5 -b(ariable)-30 3146 y Fp(default_print_flags)p Fr(.)-30 -3403 y Fs(12.4)68 b(Customizing)46 b(the)f(memory)h(allo)t(cator)-30 -3596 y Fr(Ev)m(ery)28 b(memory)e(allo)s(cation)k(of)e(CLN)g(is)g(done)f -(through)g(the)h(function)g(p)s(oin)m(ter)g Fp(malloc_hook)p -Fr(.)37 b(F)-8 b(reeing)29 b(of)f(this)-30 3705 y(memory)33 -b(is)j(done)f(through)g(the)g(function)g(p)s(oin)m(ter)h -Fp(free_hook)p Fr(.)53 b(The)35 b(default)g(v)m(ersions)h(of)f(these)h -(functions,)-30 3815 y(pro)m(vided)27 b(in)h(the)f(library)-8 -b(,)29 b(call)g Fp(malloc)d Fr(and)h Fp(free)f Fr(and)h(c)m(hec)m(k)i -(the)f Fp(malloc)e Fr(result)h(against)i Fp(NULL)p Fr(.)39 -b(If)27 b(y)m(ou)h(w)m(an)m(t)-30 3924 y(to)i(pro)m(vide)f(another)h -(memory)d(allo)s(cator,)32 b(y)m(ou)e(need)f(to)h(de\014ne)e(the)i(v)-5 -b(ariables)30 b Fp(malloc_hook)c Fr(and)i Fp(free_hook)-30 -4034 y Fr(y)m(ourself,)j(lik)m(e)h(this:)210 4163 y Fp(#include)46 -b()210 4267 y(namespace)f(cln)i({)592 4370 -y(void*)f(\(*malloc_hook\))e(\(size_t)i(size\))g(=)i(...)o(;)592 -4474 y(void)e(\(*free_hook\))f(\(void*)h(ptr\))285 b(=)48 -b(...)o(;)210 4578 y(})-30 4712 y Fr(The)30 b Fp(cl_malloc_hook)c -Fr(function)k(m)m(ust)g(not)g(return)g(a)g Fp(NULL)g -Fr(p)s(oin)m(ter.)-30 4847 y(It)e(is)f(not)h(p)s(ossible)f(to)h(c)m -(hange)h(the)e(memory)f(allo)s(cator)j(at)f(run)m(time,)f(b)s(ecause)h -(it)g(is)f(already)h(called)h(at)f(program)-30 4956 y(startup)i(b)m(y)g -(the)h(constructors)f(of)h(some)f(global)h(v)-5 b(ariables.)p -eop -%%Page: 53 55 -53 54 bop -30 -116 a Fr(Index)3646 b(53)-30 299 y Fo(Index)-30 -614 y Fs(A)-30 737 y Fd(abs)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)38 b Fb(12)-30 829 y(abstract)26 b(class)g Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)50 b Fb(6)-30 921 y Fd(acos)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)36 b Fb(18)-30 1013 y Fd(acosh)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)35 b Fb(19)-30 1105 y(adv)n(o)r(cacy)24 b Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)50 b Fb(43)-30 1197 y(Arc)n(himedes')25 -b(constan)n(t)17 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 -b Fb(19)-30 1289 y Fd(As\(\)\(\))6 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)32 b Fb(9)-30 1381 y Fd(ash)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)38 b Fb(22)-30 1473 y Fd(asin)8 b Fc(.)13 -b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(18)-30 1565 -y Fd(asin)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 -b Fb(18)-30 1657 y Fd(asinh)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 -b Fb(19)-30 1749 y Fd(atan)8 b Fc(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)34 b Fb(18)-30 1841 y Fd(atan)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)36 b Fb(18)-30 1933 y Fd(atanh)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)35 b Fb(19)-30 2180 y Fs(B)-30 2303 y Fd(basering)27 -b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)49 b Fb(40)-30 2395 y Fd(binomial)27 -b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)49 b Fb(23)-30 2487 y Fd(boole)27 -b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(21)-30 2579 -y Fd(boole_1)23 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fb(21)-30 -2671 y Fd(boole_2)23 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 -b Fb(21)-30 2763 y Fd(boole_and)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 2855 y Fd(boole_andc1)16 b Fc(.)f(.)d(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b -Fb(21)-30 2947 y Fd(boole_andc2)16 b Fc(.)f(.)d(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 b Fb(21)-30 -3039 y Fd(boole_c1)22 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b -Fb(21)-30 3131 y Fd(boole_c2)22 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 -b Fb(21)-30 3222 y Fd(boole_clr)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 3314 y Fd(boole_eqv)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 3406 y Fd(boole_nand)17 b Fc(.)e(.)d(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fb(21)-30 3498 y Fd(boole_nor)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 3590 y Fd(boole_orc1)17 b Fc(.)e(.)d(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fb(21)-30 3682 y Fd(boole_orc2)17 b Fc(.)e(.)d(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fb(21)-30 3774 y Fd(boole_set)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 3866 y Fd(boole_xor)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 -b Fb(21)-30 4114 y Fs(C)-30 4236 y Fd(canonhom)27 b(\(\))8 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fb(33,)26 b(35,)h(40)-30 4328 y(Catalan's)h(constan)n(t)10 -b Fc(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)36 -b Fb(20)-30 4420 y Fd(catalanconst)28 b(\(\))17 b Fc(.)c(.)f(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(20)-30 -4512 y Fd(ceiling1)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fb(14)-30 -4604 y Fd(ceiling2)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fb(15)-30 -4696 y(Cheb)n(yshev)25 b(p)r(olynomial)16 b Fc(.)c(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)42 b Fb(42)-30 4788 y Fd(cis)26 b(\(\))12 -b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(18)-30 4880 -y Fd(cl_abort)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fb(52)-30 4972 -y Fd(cl_byte)23 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fb(21)-30 -5064 y Fd(CL_DEBUG)22 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b -Fb(50)-30 5156 y Fd(cl_DF)8 b Fc(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)33 b Fb(7)-30 5248 y Fd(cl_DF_fdiv_t)15 b Fc(.)g(.)d(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b -Fb(15)-30 5340 y Fd(cl_F)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 -b Fb(6,)26 b(7)2032 614 y Fd(cl_F_fdiv_t)16 b Fc(.)f(.)d(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 -b Fb(15)2032 707 y Fd(cl_FF)8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)34 b Fb(7)2032 799 y Fd(cl_FF_fdiv_t)15 b Fc(.)g(.)d(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 -b Fb(15)2032 891 y Fd(cl_float)28 b(\(\))23 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)48 b Fb(25)2032 984 y Fd(cl_float_format)29 b(\(\))13 -b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 -b Fb(25)2032 1076 y Fd(cl_float_format_t)7 b Fc(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 -b Fb(25)2032 1168 y Fd(cl_I_to_int)28 b(\(\))20 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 -b Fb(9)2032 1261 y Fd(cl_I_to_long)29 b(\(\))18 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 -b Fb(9)2032 1353 y Fd(cl_I_to_uint)29 b(\(\))18 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 -b Fb(9)2032 1445 y Fd(cl_I_to_ulong)29 b(\(\))17 b Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)43 -b Fb(9)2032 1538 y Fd(cl_idecoded_float)7 b Fc(.)17 b(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fb(24)2032 -1630 y Fd(cl_LF)8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)34 -b Fb(7)2032 1722 y Fd(cl_LF_fdiv_t)15 b Fc(.)g(.)d(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 b Fb(15)2032 -1815 y Fd(cl_modint_ring)12 b Fc(.)j(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(34)2032 1907 y Fd(cl_N)9 -b Fc(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fb(6)2032 -1999 y Fd(cl_number)22 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46 b -Fb(6)2032 2092 y Fd(cl_R)9 b Fc(.)k(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)35 b Fb(6)2032 2184 y Fd(cl_R_fdiv_t)16 b Fc(.)f(.)d(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 -b Fb(15)2032 2276 y Fd(cl_RA)8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)34 b Fb(6)2032 2369 y Fd(cl_SF)8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)34 b Fb(7)2032 2461 y Fd(cl_SF_fdiv_t)15 -b Fc(.)g(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)40 b Fb(15)2032 2553 y Fd(cl_string)21 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)45 b Fb(37)2032 2646 y Fd(cl_symbol)21 b -Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)45 b Fb(37)2032 2738 y Fd(coeff)27 -b(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fb(41)2032 2830 -y Fd(compare)27 b(\(\))6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(13)2032 -2923 y(comparison)24 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(13)2032 -3015 y(compatibilit)n(y)10 b Fc(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fb(45)2032 3107 -y(compiler)26 b(options)9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(45)2032 3200 y Fd(complex)27 -b(\(\))6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(12)2032 3292 y(complex)25 -b(n)n(um)n(b)r(er)20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)47 b Fb(6,)27 b(8)2032 3384 y Fd(conjugate)h(\(\))22 -b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)47 b Fb(12)2032 3477 y(con)n(v)n(ersion)15 b -Fc(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)41 b Fb(8,)26 b(25)2032 3569 y Fd(cos)h(\(\))12 -b Fc(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(18)2032 3661 -y Fd(cos_sin)27 b(\(\))6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(18)2032 -3754 y Fd(cos_sin_t)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b Fb(18)2032 -3846 y Fd(cosh)27 b(\(\))10 b Fc(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fb(19)2032 3938 y Fd(cosh_sinh)28 b(\(\))22 b Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -47 b Fb(19)2032 4031 y Fd(cosh_sinh_t)16 b Fc(.)f(.)d(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 -b Fb(19)2032 4123 y Fd(create)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(40)2032 4215 y(customizing)15 b Fc(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)41 b -Fb(52)2032 4478 y Fs(D)2032 4601 y Fd(debug_print)28 -b(\(\))18 b Fc(.)c(.)e(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)44 b Fb(50)2032 4694 y(debugging)7 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)32 b Fb(50)2032 4786 y Fd(decode_float)d(\(\))17 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 -b Fb(24)2032 4878 y Fd(decoded_dfloat)12 b Fc(.)j(.)e(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(24)2032 -4971 y Fd(decoded_ffloat)12 b Fc(.)j(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(24)2032 5063 y Fd(decoded_float)13 -b Fc(.)j(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)39 b Fb(24)2032 5155 y Fd(decoded_lfloat)12 b Fc(.)j(.)e(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(24)2032 -5248 y Fd(decoded_sfloat)12 b Fc(.)j(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(24)2032 5340 y Fd -(default_float_format)26 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 -b Fb(25)p eop -%%Page: 54 56 -54 55 bop -30 -116 a Fr(Index)3646 b(54)-30 299 y Fd -(default_print_flags)27 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -48 b Fb(52)-30 391 y Fd(default_random_state)26 b Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(26)-30 483 -y Fd(degree)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fb(41)-30 -575 y Fd(denominator)28 b(\(\))18 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fb(12)-30 667 -y Fd(deposit_field)29 b(\(\))16 b Fc(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)41 b Fb(22)-30 759 y Fd(deriv)27 -b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(41)-30 851 -y Fd(div)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(35)-30 943 y Fd(double_approx)29 b(\(\))17 b Fc(.)12 -b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)42 -b Fb(9)-30 1035 y Fd(doublefactorial)29 b(\(\))13 b Fc(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fb(23)-30 1127 y -Fd(dpb)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(22)-30 1389 y Fs(E)-30 1512 y Fd(equal)27 b(\(\))20 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)45 b Fb(33,)27 b(37)-30 1604 y Fd(equal_hashcode)i(\(\))14 -b Fc(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 -b Fb(13)-30 1696 y(Euler's)27 b(constan)n(t)15 b Fc(.)d(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fb(20)-30 -1788 y Fd(eulerconst)28 b(\(\))20 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fb(20)-30 -1880 y Fd(evenp)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 -b Fb(22)-30 1972 y(exact)26 b(n)n(um)n(b)r(er)20 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)48 b Fb(6)-30 2064 y Fd(exp)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)38 b Fb(17)-30 2156 y Fd(exp1)27 b(\(\))10 -b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fb(17)-30 2248 y -Fd(expt)27 b(\(\))14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)40 b Fb(11,)26 b(17,)h(35)-30 -2340 y Fd(expt_pos)g(\(\))20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)45 b Fb(11,)27 b(33,)f(35,)h(41)-30 2432 y Fd(exquo)g(\(\))9 -b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(11)-30 2694 y Fs(F)-30 -2817 y Fd(factorial)28 b(\(\))21 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(23)-30 -2909 y Fd(fceiling)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fb(15)-30 -3001 y Fd(fceiling2)28 b(\(\))21 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(15)-30 -3093 y Fd(ffloor)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(15)-30 3185 y Fd(ffloor2)27 b(\(\))6 b Fc(.)13 b(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 -b Fb(15)-30 3277 y(Fib)r(onacci)27 b(n)n(um)n(b)r(er)18 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 -b Fb(49)-30 3369 y Fd(finalize)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 -b Fb(41)-30 3461 y Fd(find_modint_ring)29 b(\(\))11 b -Fc(.)i(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fb(34)-30 -3553 y Fd(find_univpoly_ring)30 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)34 b Fb(40)-30 3645 y Fd(float_approx)28 -b(\(\))18 b Fc(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)44 b Fb(9)-30 3737 y Fd(float_digits)28 b(\(\))17 -b Fc(.)c(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 -b Fb(24)-30 3829 y Fd(float_epsilon)29 b(\(\))16 b Fc(.)c(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fb(25)-30 -3921 y Fd(float_exponent)29 b(\(\))14 b Fc(.)f(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(24)-30 4013 y Fd -(float_negative_epsilon)31 b(\(\))21 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)47 -b Fb(25)-30 4105 y Fd(float_precision)29 b(\(\))13 b -Fc(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 -b Fb(24)-30 4197 y Fd(float_radix)28 b(\(\))18 b Fc(.)13 -b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 -b Fb(24)-30 4289 y Fd(float_sign)28 b(\(\))20 b Fc(.)13 -b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 -b Fb(24)-30 4381 y(\015oating-p)r(oin)n(t)26 b(n)n(um)n(b)r(er)12 -b Fc(.)e(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(7)-30 4473 y Fd(floor1)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(14)-30 4565 y Fd(floor2)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(15)-30 4657 y Fd(fprint)27 b(\(\))11 b Fc(.)i(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fb(33,)26 b(36,)h(41)-30 -4749 y Fd(free_hook)h(\(\))21 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(52)-30 -4841 y Fd(fround)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(15)-30 4933 y Fd(fround2)27 b(\(\))6 b Fc(.)13 b(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 -b Fb(15)-30 5024 y Fd(ftruncate)c(\(\))21 b Fc(.)13 b(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 -b Fb(15)2032 299 y Fd(ftruncate2)28 b(\(\))20 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 -b Fb(15)2032 545 y Fs(G)2032 667 y Fb(garbage)27 b(collection)14 -b Fc(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b -Fb(43,)27 b(44)2032 759 y Fd(gcd)g(\(\))12 b Fc(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)38 b Fb(23)2032 851 y(GMP)8 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)33 b Fb(1,)27 b(4)2032 1110 y Fs(H)2032 1232 y Fb(header)f(\014les)7 -b Fc(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)33 b Fb(45)2032 1324 y Fd(hermite)27 -b(\(\))6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(42)2032 1416 y(Hermite)25 -b(p)r(olynomial)7 b Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)32 b Fb(42)2032 1675 y Fs(I)2032 1797 y Fd(imagpart)c(\(\))23 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)48 b Fb(12)2032 1889 y(include)26 b(\014les)17 -b Fc(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)43 b Fb(45)2032 1980 y(Input/Output)14 -b Fc(.)c(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)40 b Fb(28)2032 2072 y(installation)9 b Fc(.)14 -b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)35 b Fb(4)2032 2164 y Fd(instanceof)28 -b(\(\))20 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)46 b Fb(33)2032 2256 y(in)n(teger)10 -b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)36 b Fb(6)2032 -2347 y Fd(integer_decode_float)30 b(\(\))24 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)49 b Fb(24)2032 2439 y Fd(integer_length)29 -b(\(\))14 b Fc(.)f(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 -b Fb(22)2032 2531 y Fd(isqrt)27 b(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 -b Fb(16)2032 2792 y Fs(L)2032 2914 y Fd(laguerre)28 b(\(\))23 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)48 b Fb(42)2032 3006 y(Laguerre)27 b(p)r(olynomial)13 -b Fc(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 -b Fb(42)2032 3098 y Fd(lcm)27 b(\(\))12 b Fc(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)38 b Fb(23)2032 3190 y Fd(ldb)27 b(\(\))12 b Fc(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)38 b Fb(22)2032 3281 y Fd(ldb_test)28 b(\(\))23 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)48 b Fb(22)2032 3373 y Fd(least_negative_float)30 -b(\(\))24 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)49 b Fb(25)2032 -3465 y Fd(least_positive_float)30 b(\(\))24 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)49 b Fb(25)2032 3557 y(Legende)26 -b(p)r(olynomial)e Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -49 b Fb(42)2032 3648 y Fd(legendre)28 b(\(\))23 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)48 b Fb(42)2032 3740 y Fd(length)27 b(\(\))8 b Fc(.)13 -b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)h(.)33 b Fb(37)2032 3832 y Fd(ln)26 b(\(\))13 -b Fc(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fb(17)2032 -3924 y Fd(log)27 b(\(\))12 b Fc(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(17)2032 4015 y Fd(logand)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(21)2032 4107 y Fd(logandc1)28 b(\(\))23 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)48 b Fb(21)2032 4199 y Fd(logandc2)28 b(\(\))23 b -Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)48 b Fb(21)2032 4291 y Fd(logbitp)27 b(\(\))6 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)32 b Fb(21)2032 4382 y Fd(logcount)c(\(\))23 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)48 b Fb(21)2032 4474 y Fd(logeqv)27 b(\(\))8 -b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)33 b Fb(21)2032 4566 y Fd(logior)27 -b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fb(21)2032 4658 -y Fd(lognand)27 b(\(\))6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(21)2032 -4749 y Fd(lognor)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(21)2032 4841 y Fd(lognot)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(20)2032 4933 y Fd(logorc1)27 b(\(\))6 b Fc(.)13 -b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)32 b Fb(21)2032 5024 y Fd(logorc2)27 b(\(\))6 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)32 b Fb(21)p eop -%%Page: 55 57 -55 56 bop -30 -116 a Fr(Index)3646 b(55)-30 299 y Fd(logp)27 -b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fb(23)-30 -391 y Fd(logtest)27 b(\(\))6 b Fc(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)32 -b Fb(21)-30 483 y Fd(logxor)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(21)-30 747 y Fs(M)-30 870 y Fd(make)9 b Fc(.)k(.)g(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)35 b Fb(3)-30 962 y Fd(malloc_hook)28 -b(\(\))18 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)44 b Fb(52)-30 1054 y Fd(mask_field)28 b(\(\))20 -b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)46 b Fb(22)-30 1147 y Fd(max)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)38 b Fb(13)-30 1239 y Fd(min)26 b(\(\))12 -b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(13)-30 1331 -y Fd(minus)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b -Fb(33)-30 1423 y Fd(minus1)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(11)-30 1515 y Fd(minusp)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(13)-30 1607 y Fd(mod)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)38 b Fb(16)-30 1700 y(mo)r(difying)26 b(op)r(erators)c -Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 -b Fb(27)-30 1792 y(mo)r(dular)25 b(in)n(teger)20 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 -b Fb(34)-30 1884 y Fd(modulus)23 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 -b Fb(34)-30 1976 y Fd(monomial)27 b(\(\))d Fc(.)12 b(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 -b Fb(40)-30 2068 y(Mon)n(tgomery)25 b(m)n(ultiplication)9 -b Fc(.)k(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(34)-30 2161 y Fd -(most_negative_float)30 b(\(\))7 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)33 b Fb(25)-30 2253 y Fd(most_positive_float)d(\(\))7 -b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fb(25)-30 -2345 y Fd(mul)26 b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(33)-30 2594 y Fs(N)-30 2717 y Fb(namespace)10 b -Fc(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)36 b Fb(2,)26 b(45)-30 2809 y Fd(numerator)i(\(\))21 -b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)47 b Fb(12)-30 3058 y Fs(O)-30 3181 y Fd(oddp)27 -b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fb(22)-30 -3273 y Fd(one)26 b(\(\))15 b Fc(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fb(33,)26 b(35,)h(40)-30 -3365 y Fd(operator)g(!=)f(\(\))c Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 -b Fb(13,)27 b(34,)f(36,)h(41)-30 3457 y Fd(operator)g(&)f(\(\))9 -b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)34 b Fb(21)-30 3550 y Fd(operator)27 b(&=)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)-30 3642 y Fd(operator)27 b(\(\))f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(41)-30 3734 y Fd(operator)27 b(*)f(\(\))12 -b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b -Fb(11,)26 b(35,)h(41)-30 3826 y Fd(operator)g(*=)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)-30 3918 y Fd(operator)27 b(-)f(\(\))12 -b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b -Fb(11,)26 b(35,)h(41)-30 4010 y Fd(operator)g(--)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)-30 4103 y Fd(operator)27 b(-=)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)-30 4195 y Fd(operator)27 b(/)f(\(\))9 -b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)34 b Fb(11)-30 4287 y Fd(operator)27 b(/=)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)-30 4379 y Fd(operator)27 b(==)f(\(\))c -Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(13,)27 b(34,)f(36,)h(41)-30 -4471 y Fd(operator)g([])f(\(\))7 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fb(37)-30 -4564 y Fd(operator)27 b(|)f(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(21)-30 -4656 y Fd(operator)27 b(|=)f(\(\))7 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fb(27)-30 -4748 y Fd(operator)27 b(~)f(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(20)-30 -4840 y Fd(operator)27 b(+)f(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)38 b Fb(11,)26 b(35,)h(41)-30 4932 y Fd(operator)g(+=)f -(\(\))7 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)33 b Fb(27)-30 5024 y Fd(operator)27 b(++)f(\(\))7 -b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)33 b Fb(27)2032 299 y Fd(operator)28 b(>)d(\(\))9 -b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)34 b Fb(13)2032 391 y Fd(operator)28 b(>=)e(\(\))7 -b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)33 b Fb(13)2032 483 y Fd(operator)28 b(>>)e(\(\))18 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 -b Fb(22,)27 b(36)2032 576 y Fd(operator)h(>>=)e(\(\))e -Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 -b Fb(27)2032 668 y Fd(operator)28 b(^)d(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fb(21)2032 760 y Fd(operator)28 b(^=)e(\(\))7 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 -b Fb(27)2032 853 y Fd(operator)28 b(<)d(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fb(13)2032 945 y Fd(operator)28 b(<=)e(\(\))7 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 -b Fb(13)2032 1037 y Fd(operator)28 b(<<)e(\(\))21 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(22,)27 b(35,)f(36,)h(41)2032 -1129 y Fd(operator)h(<<=)e(\(\))e Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fb(27)2032 1222 y Fd(ord2)27 -b(\(\))10 b Fc(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fb(22)2032 -1471 y Fs(P)2032 1594 y Fd(phase)27 b(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)35 b Fb(17)2032 1686 y(pi)18 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)44 b Fb(19)2032 1779 y Fd(pi)26 b(\(\))13 -b Fc(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fb(19)2032 -1871 y Fd(plus)27 b(\(\))10 b Fc(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fb(33)2032 1963 y Fd(plus1)27 b(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 -b Fb(11)2032 2055 y Fd(plusp)27 b(\(\))9 b Fc(.)k(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 -b Fb(13)2032 2148 y(p)r(olynomial)10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)36 -b Fb(38)2032 2240 y(p)r(ortabilit)n(y)17 b Fc(.)c(.)f(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)43 -b Fb(43)2032 2332 y Fd(power2p)27 b(\(\))6 b Fc(.)13 -b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)32 b Fb(23)2032 2425 y(prin)n(ting)8 b Fc(.)k(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)33 b Fb(28)2032 2686 y Fs(R)2032 2810 y Fd(random)27 -b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fb(35)2032 2902 -y Fd(random_F)28 b(\(\))23 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(26)2032 -2994 y Fd(random_I)28 b(\(\))23 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(26)2032 -3087 y Fd(random_R)28 b(\(\))23 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(26)2032 -3179 y Fd(random_state)15 b Fc(.)g(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40 b Fb(26)2032 3271 -y Fd(random32)28 b(\(\))23 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(26)2032 -3364 y Fd(rational)28 b(\(\))23 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(26)2032 -3456 y(rational)27 b(n)n(um)n(b)r(er)17 b Fc(.)11 b(.)h(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)44 b Fb(6)2032 -3548 y Fd(rationalize)28 b(\(\))18 b Fc(.)c(.)e(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(26)2032 3640 -y(reading)17 b Fc(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fb(28)2032 -3733 y(real)27 b(n)n(um)n(b)r(er)13 b Fc(.)d(.)i(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 -b Fb(6)2032 3825 y Fd(realpart)28 b(\(\))23 b Fc(.)12 -b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)48 b Fb(12)2032 3917 y Fd(recip)27 b(\(\))20 b Fc(.)13 -b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)45 b Fb(11,)27 b(35)2032 4009 y(reference)g(coun)n(ting)17 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 -b Fb(43)2032 4102 y Fd(rem)27 b(\(\))12 b Fc(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)38 b Fb(16)2032 4194 y(represen)n(tation)12 b Fc(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 -b Fb(28)2032 4286 y Fd(retract)27 b(\(\))6 b Fc(.)13 -b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)32 b Fb(35)2032 4379 y(Riemann's)25 b(zeta)11 -b Fc(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)37 b Fb(20)2032 4471 y(ring)21 b Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)46 b Fb(34)2032 4563 y Fd(ring)27 b(\(\))21 -b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)47 b Fb(35,)27 b(41)2032 4655 y Fd(rootp)g(\(\))9 -b Fc(.)k(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fb(16)2032 4748 y Fd(round1)27 -b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fb(14)2032 4840 -y Fd(round2)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b -Fb(15)2032 4932 y(rounding)10 b Fc(.)i(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 -b Fb(13)2032 5024 y(rounding)26 b(error)7 b Fc(.)13 b(.)f(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 -b Fb(7)p eop -%%Page: 56 58 -56 57 bop -30 -116 a Fr(Index)3646 b(56)-30 299 y Fb(Rubik's)25 -b(cub)r(e)14 b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(8)-30 548 y Fs(S)-30 -672 y Fd(scale_float)28 b(\(\))18 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fb(23)-30 764 -y(Sc)n(h\177)-38 b(onhage-Strassen)26 b(m)n(ultiplication)14 -b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)41 -b Fb(1,)26 b(44)-30 857 y Fd(sed)10 b Fc(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)36 b Fb(3)-30 949 y Fd(set_coeff)28 b(\(\))21 -b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)47 b Fb(40)-30 1042 y Fd(signum)27 b(\(\))8 b -Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)h(.)33 b Fb(12)-30 1134 y Fd(sin)26 b(\(\))12 -b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(17)-30 1226 -y Fd(sinh)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 -b Fb(19)-30 1319 y Fd(sqrt)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -36 b Fb(16)-30 1411 y Fd(sqrtp)27 b(\(\))9 b Fc(.)j(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 -b Fb(16)-30 1503 y Fd(square)27 b(\(\))22 b Fc(.)12 b(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)48 b Fb(11,)27 b(33,)f(35,)h(41)-30 -1596 y(string)8 b Fc(.)13 b(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 -b Fb(37)-30 1688 y Fd(strlen)27 b(\(\))8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(37)-30 1781 y(sym)n(b)r(ol)22 b Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 -b Fb(37)-30 1873 y(sym)n(b)r(olic)25 b(t)n(yp)r(e)17 -b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)43 b Fb(37)-30 2135 y Fs(T)-30 2259 y Fd(tan)26 -b(\(\))12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(18)-30 -2351 y Fd(tanh)27 b(\(\))10 b Fc(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 -b Fb(19)-30 2444 y Fd(The\(\)\(\))24 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -48 b Fb(9)2032 299 y(transcenden)n(tal)26 b(functions)c -Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(17)2032 -390 y Fd(truncate1)28 b(\(\))22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(14)2032 -482 y Fd(truncate2)28 b(\(\))22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(15)2032 -573 y Fd(tschebychev)28 b(\(\))18 b Fc(.)c(.)e(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(42)2032 832 y -Fs(U)2032 954 y Fd(uminus)27 b(\(\))8 b Fc(.)13 b(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 -b Fb(33)2032 1045 y(under\015o)n(w)14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 -b Fb(52)2032 1136 y(univ)l(ariate)26 b(p)r(olynomial)11 -b Fc(.)i(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b -Fb(38)2032 1393 y Fs(W)2032 1515 y Fd(WANT_OBFUSCATING_OPERATORS)13 -b Fc(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)38 b Fb(27)2032 1759 y Fs(X)2032 -1880 y Fd(xgcd)27 b(\(\))10 b Fc(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 -b Fb(23)2032 2139 y Fs(Z)2032 2261 y Fd(zero)27 b(\(\))14 -b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)40 b Fb(33,)26 b(34,)h(40)2032 2352 y Fd(zerop)g(\(\))d -Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 -b Fb(13,)27 b(33,)f(36,)h(41)2032 2444 y Fd(zeta)g(\(\))10 -b Fc(.)j(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fb(20)p eop -%%Page: -1 59 --1 58 bop 3905 -116 a Fr(i)-30 299 y Fo(T)-13 b(able)54 -b(of)g(Con)l(ten)l(ts)-30 641 y Fs(1)135 b(In)l(tro)t(duction)39 -b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.) -h(.)f(.)84 b Fs(1)-30 911 y(2)135 b(Installation)13 b -Fa(.)22 b(.)d(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)g(.)h(.)f(.)58 b Fs(3)269 1048 y Fr(2.1)92 b(Prerequisites)24 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)53 b Fr(3)568 1157 y(2.1.1)93 b(C)p Fp(++)29 b Fr(compiler)22 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fr(3)568 1267 -y(2.1.2)93 b(Mak)m(e)31 b(utilit)m(y)22 b Fe(.)17 b(.)e(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)52 b Fr(3)568 1377 y(2.1.3)93 b(Sed)29 b(utilit)m(y)16 -b Fe(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)45 b Fr(3)269 -1486 y(2.2)92 b(Building)30 b(the)h(library)13 b Fe(.)h(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)42 b Fr(3)568 1596 y(2.2.1)93 -b(Using)30 b(the)h(GNU)g(MP)f(Library)c Fe(.)15 b(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)57 b Fr(4)269 1705 y(2.3)92 b(Installing)31 -b(the)g(library)17 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 -b Fr(4)269 1815 y(2.4)92 b(Cleaning)31 b(up)17 b Fe(.)d(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 -b Fr(5)-30 2057 y Fs(3)135 b(Ordinary)45 b(n)l(um)l(b)t(er)f(t)l(yp)t -(es)29 b Fa(.)20 b(.)g(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)74 b Fs(6)269 -2194 y Fr(3.1)92 b(Exact)31 b(n)m(um)m(b)s(ers)22 b Fe(.)13 -b(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 -b Fr(6)269 2304 y(3.2)92 b(Floating-p)s(oin)m(t)33 b(n)m(um)m(b)s(ers) -23 b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fr(7)269 2413 -y(3.3)92 b(Complex)29 b(n)m(um)m(b)s(ers)c Fe(.)15 b(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)57 b Fr(8)269 2523 y(3.4)92 b(Con)m(v)m -(ersions)20 b Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)50 b Fr(8)-30 2765 y Fs(4)135 b(F)-11 -b(unctions)44 b(on)h(n)l(um)l(b)t(ers)37 b Fa(.)19 b(.)h(.)f(.)h(.)f(.) -h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)h(.)82 b Fs(10)269 2902 y Fr(4.1)92 b(Constructing)30 -b(n)m(um)m(b)s(ers)d Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 -b Fr(10)568 3012 y(4.1.1)93 b(Constructing)30 b(in)m(tegers)10 -b Fe(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)40 b Fr(10)568 3122 y(4.1.2)93 b(Constructing)30 -b(rational)h(n)m(um)m(b)s(ers)20 b Fe(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)49 b Fr(10)568 3231 y(4.1.3)93 b(Constructing)30 b(\015oating-p)s -(oin)m(t)h(n)m(um)m(b)s(ers)14 b Fe(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fr(10)568 -3341 y(4.1.4)93 b(Constructing)30 b(complex)g(n)m(um)m(b)s(ers)11 -b Fe(.)h(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fr(10)269 3450 -y(4.2)92 b(Elemen)m(tary)30 b(functions)25 b Fe(.)15 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fr(11)269 3560 y(4.3)92 -b(Elemen)m(tary)30 b(rational)i(functions)c Fe(.)15 b(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)57 b -Fr(12)269 3670 y(4.4)92 b(Elemen)m(tary)30 b(complex)g(functions)19 -b Fe(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)49 b Fr(12)269 3779 y(4.5)92 b(Comparisons)21 b Fe(.)14 -b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 -b Fr(13)269 3889 y(4.6)92 b(Rounding)29 b(functions)18 -b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Fr(13)269 -3998 y(4.7)92 b(Ro)s(ots)11 b Fe(.)k(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 -b Fr(16)269 4108 y(4.8)92 b(T)-8 b(ranscenden)m(tal)31 -b(functions)17 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fr(17)568 4218 -y(4.8.1)93 b(Exp)s(onen)m(tial)30 b(and)g(logarithmic)h(functions)17 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)46 b Fr(17)568 4327 y(4.8.2)93 b(T)-8 b(rigonometric)30 -b(functions)c Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)55 b Fr(17)568 4437 y(4.8.3)93 b(Hyp)s(erb)s(olic)29 -b(functions)23 b Fe(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)53 b Fr(19)568 4546 y(4.8.4)93 b(Euler)29 -b(gamma)20 b Fe(.)14 b(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)49 b Fr(20)568 -4656 y(4.8.5)93 b(Riemann)29 b(zeta)13 b Fe(.)j(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 -b Fr(20)269 4765 y(4.9)92 b(F)-8 b(unctions)31 b(on)f(in)m(tegers)c -Fe(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fr(20)568 4875 -y(4.9.1)93 b(Logical)32 b(functions)13 b Fe(.)h(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 -b Fr(20)568 4985 y(4.9.2)93 b(Num)m(b)s(er)28 b(theoretic)k(functions) -20 b Fe(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 -b Fr(23)568 5094 y(4.9.3)93 b(Com)m(binatorial)30 b(functions)21 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 -b Fr(23)269 5204 y(4.10)92 b(F)-8 b(unctions)31 b(on)g(\015oating-p)s -(oin)m(t)g(n)m(um)m(b)s(ers)25 b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)56 b Fr(23)269 5313 y(4.11)92 b(Con)m(v)m(ersion)31 -b(functions)12 b Fe(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)41 b -Fr(25)p eop -%%Page: -2 60 --2 59 bop 3879 -116 a Fr(ii)568 83 y(4.11.1)93 b(Con)m(v)m(ersion)31 -b(to)g(\015oating-p)s(oin)m(t)h(n)m(um)m(b)s(ers)17 b -Fe(.)c(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)47 b Fr(25)568 193 y(4.11.2)93 b(Con)m(v)m(ersion)31 -b(to)g(rational)h(n)m(um)m(b)s(ers)21 b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -53 b Fr(26)269 302 y(4.12)92 b(Random)29 b(n)m(um)m(b)s(er)f -(generators)e Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)53 b Fr(26)269 412 y(4.13)92 b(Obfuscating)30 -b(op)s(erators)g Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)59 b Fr(27)-30 -652 y Fs(5)135 b(Input/Output)26 b Fa(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.) -f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)71 b Fs(28)269 789 -y Fr(5.1)92 b(In)m(ternal)31 b(and)e(prin)m(ted)h(represen)m(tation)g -Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 -b Fr(28)269 898 y(5.2)92 b(Input)29 b(functions)14 b -Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44 -b Fr(29)269 1008 y(5.3)92 b(Output)29 b(functions)21 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 -b Fr(30)-30 1248 y Fs(6)135 b(Rings)22 b Fa(.)e(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)67 -b Fs(33)-30 1516 y(7)135 b(Mo)t(dular)44 b(in)l(tegers)27 -b Fa(.)22 b(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)72 -b Fs(34)269 1653 y Fr(7.1)92 b(Mo)s(dular)30 b(in)m(teger)i(rings)18 -b Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)47 b Fr(34)269 1762 -y(7.2)92 b(F)-8 b(unctions)31 b(on)f(mo)s(dular)e(in)m(tegers)16 -b Fe(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)46 b Fr(34)-30 2002 y Fs(8)135 b(Sym)l(b)t(olic)45 -b(data)g(t)l(yp)t(es)28 b Fa(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h -(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -73 b Fs(37)269 2139 y Fr(8.1)92 b(Strings)9 b Fe(.)14 -b(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)38 b Fr(37)269 2249 y(8.2)92 b(Sym)m(b)s(ols)24 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)55 b Fr(37)-30 2489 y Fs(9)135 b(Univ)-7 -b(ariate)46 b(p)t(olynomials)40 b Fa(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)83 -b Fs(38)269 2626 y Fr(9.1)92 b(Univ)-5 b(ariate)32 b(p)s(olynomial)d -(rings)c Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)54 b Fr(38)269 2736 y(9.2)92 b(F)-8 -b(unctions)31 b(on)f(univ)-5 b(ariate)31 b(p)s(olynomials)d -Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 -b Fr(40)269 2845 y(9.3)92 b(Sp)s(ecial)31 b(p)s(olynomials)13 -b Fe(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fr(42)-30 -3085 y Fs(10)135 b(In)l(ternals)20 b Fa(.)g(.)g(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)64 b -Fs(43)269 3222 y Fr(10.1)92 b(Wh)m(y)31 b(C)p Fp(++)f -Fr(?)d Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)57 b Fr(43)269 3332 y(10.2)92 b(Memory)30 b(e\016ciency)25 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fr(43)269 -3442 y(10.3)92 b(Sp)s(eed)30 b(e\016ciency)e Fe(.)15 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fr(43)269 -3551 y(10.4)92 b(Garbage)32 b(collection)14 b Fe(.)k(.)d(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)44 b Fr(44)-30 3791 y Fs(11)135 b(Using)46 -b(the)f(library)25 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h -(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) -h(.)69 b Fs(45)269 3928 y Fr(11.1)92 b(Compiler)30 b(options)21 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b -Fr(45)269 4038 y(11.2)92 b(Compatibilit)m(y)31 b(to)g(old)g(CLN)f(v)m -(ersions)17 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 -b Fr(45)269 4147 y(11.3)92 b(Include)30 b(\014les)18 -b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)47 -b Fr(45)269 4257 y(11.4)92 b(An)30 b(Example)d Fe(.)15 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 -b Fr(49)269 4367 y(11.5)92 b(Debugging)32 b(supp)s(ort)23 -b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)54 b Fr(50)-30 -4607 y Fs(12)135 b(Customizing)39 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)83 b Fs(52)269 4744 -y Fr(12.1)92 b(Error)30 b(handling)24 b Fe(.)15 b(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fr(52)269 4853 y(12.2)92 -b(Floating-p)s(oin)m(t)33 b(under\015o)m(w)19 b Fe(.)14 -b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)49 b Fr(52)269 4963 y(12.3)92 b(Customizing)30 -b(I/O)25 b Fe(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 -b Fr(52)269 5072 y(12.4)92 b(Customizing)30 b(the)h(memory)d(allo)s -(cator)16 b Fe(.)i(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 -b Fr(52)-30 5313 y Fs(Index)30 b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f -(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)74 b Fs(53)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/cln_1.html b/doc/cln_1.html deleted file mode 100644 index 2b5c237..0000000 --- a/doc/cln_1.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 1. Introduction - - -Go to the first, previous, next, last section, table of contents. -


- - -

1. Introduction

- -

-CLN is a library for computations with all kinds of numbers. -It has a rich set of number classes: - - - -

- -

-The subtypes of the complex numbers among these are exactly the -types of numbers known to the Common Lisp language. Therefore -CLN can be used for Common Lisp implementations, giving -`CLN' another meaning: it becomes an abbreviation of -"Common Lisp Numbers". - - -

-The CLN package implements - - - -

- -

-CLN is a C++ library. Using C++ as an implementation language provides - - - -

- -

-CLN is memory efficient: - - - -

- -

-CLN is speed efficient: - - - -

- -

-CLN aims at being easily integrated into larger software packages: - - - -

- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_10.html b/doc/cln_10.html deleted file mode 100644 index f66fa70..0000000 --- a/doc/cln_10.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 10. Internals - - -Go to the first, previous, next, last section, table of contents. -


- - -

10. Internals

- - - -

10.1 Why C++ ?

-

- - - -

-Using C++ as an implementation language provides - - - -

- -

-With these language features, there is no need for two separate languages, -one for the implementation of the library and one in which the library's users -can program. This means that a prototype implementation of an algorithm -can be integrated into the library immediately after it has been tested and -debugged. No need to rewrite it in a low-level language after having prototyped -in a high-level language. - - - - -

10.2 Memory efficiency

- -

-In order to save memory allocations, CLN implements: - - - -

- - - -

10.3 Speed efficiency

- -

-Speed efficiency is obtained by the combination of the following tricks -and algorithms: - - - -

- - - -

10.4 Garbage collection

-

- - - -

-All the number classes are reference count classes: They only contain a pointer -to an object in the heap. Upon construction, assignment and destruction of -number objects, only the objects' reference count are manipulated. - - -

-Memory occupied by number objects are automatically reclaimed as soon as -their reference count drops to zero. - - -

-For number rings, another strategy is implemented: There is a cache of, -for example, the modular integer rings. A modular integer ring is destroyed -only if its reference count dropped to zero and the cache is about to be -resized. The effect of this strategy is that recently used rings remain -cached, whereas undue memory consumption through cached rings is avoided. - - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_11.html b/doc/cln_11.html deleted file mode 100644 index 2ff22a4..0000000 --- a/doc/cln_11.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 11. Using the library - - -Go to the first, previous, next, last section, table of contents. -


- - -

11. Using the library

- -

-For the following discussion, we will assume that you have installed -the CLN source in $CLN_DIR and built it in $CLN_TARGETDIR. -For example, for me it's CLN_DIR="$HOME/cln" and -CLN_TARGETDIR="$HOME/cln/linuxelf". You might define these as -environment variables, or directly substitute the appropriate values. - - - - -

11.1 Compiler options

-

- - - -

-Until you have installed CLN in a public place, the following options are -needed: - - -

-When you compile CLN application code, add the flags - -

-   -I$CLN_DIR/include -I$CLN_TARGETDIR/include
-
- -

-to the C++ compiler's command line (make variable CFLAGS or CXXFLAGS). -When you link CLN application code to form an executable, add the flags - -

-   $CLN_TARGETDIR/src/libcln.a
-
- -

-to the C/C++ compiler's command line (make variable LIBS). - - -

-If you did a make install, the include files are installed in a -public directory (normally /usr/local/include), hence you don't -need special flags for compiling. The library has been installed to a -public directory as well (normally /usr/local/lib), hence when -linking a CLN application it is sufficient to give the flag -lcln. - - - - -

11.2 Compatibility to old CLN versions

-

- - - - -

-As of CLN version 1.1 all non-macro identifiers were hidden in namespace -cln in order to avoid potential name clashes with other C++ -libraries. If you have an old application, you will have to manually -port it to the new scheme. The following principles will help during -the transition: - -

- -

-When developing other libraries, please keep in mind not to import the -namespace cln in one of your public header files by saying -using namespace cln;. This would propagate to other applications -and can cause name clashes there. - - - - -

11.3 Include files

-

- - - - -

-Here is a summary of the include files and their contents. - - -

- -
<cln/object.h> -
-General definitions, reference counting, garbage collection. -
<cln/number.h> -
-The class cl_number. -
<cln/complex.h> -
-Functions for class cl_N, the complex numbers. -
<cln/real.h> -
-Functions for class cl_R, the real numbers. -
<cln/float.h> -
-Functions for class cl_F, the floats. -
<cln/sfloat.h> -
-Functions for class cl_SF, the short-floats. -
<cln/ffloat.h> -
-Functions for class cl_FF, the single-floats. -
<cln/dfloat.h> -
-Functions for class cl_DF, the double-floats. -
<cln/lfloat.h> -
-Functions for class cl_LF, the long-floats. -
<cln/rational.h> -
-Functions for class cl_RA, the rational numbers. -
<cln/integer.h> -
-Functions for class cl_I, the integers. -
<cln/io.h> -
-Input/Output. -
<cln/complex_io.h> -
-Input/Output for class cl_N, the complex numbers. -
<cln/real_io.h> -
-Input/Output for class cl_R, the real numbers. -
<cln/float_io.h> -
-Input/Output for class cl_F, the floats. -
<cln/sfloat_io.h> -
-Input/Output for class cl_SF, the short-floats. -
<cln/ffloat_io.h> -
-Input/Output for class cl_FF, the single-floats. -
<cln/dfloat_io.h> -
-Input/Output for class cl_DF, the double-floats. -
<cln/lfloat_io.h> -
-Input/Output for class cl_LF, the long-floats. -
<cln/rational_io.h> -
-Input/Output for class cl_RA, the rational numbers. -
<cln/integer_io.h> -
-Input/Output for class cl_I, the integers. -
<cln/input.h> -
-Flags for customizing input operations. -
<cln/output.h> -
-Flags for customizing output operations. -
<cln/malloc.h> -
-malloc_hook, free_hook. -
<cln/abort.h> -
-cl_abort. -
<cln/condition.h> -
-Conditions/exceptions. -
<cln/string.h> -
-Strings. -
<cln/symbol.h> -
-Symbols. -
<cln/proplist.h> -
-Property lists. -
<cln/ring.h> -
-General rings. -
<cln/null_ring.h> -
-The null ring. -
<cln/complex_ring.h> -
-The ring of complex numbers. -
<cln/real_ring.h> -
-The ring of real numbers. -
<cln/rational_ring.h> -
-The ring of rational numbers. -
<cln/integer_ring.h> -
-The ring of integers. -
<cln/numtheory.h> -
-Number threory functions. -
<cln/modinteger.h> -
-Modular integers. -
<cln/V.h> -
-Vectors. -
<cln/GV.h> -
-General vectors. -
<cln/GV_number.h> -
-General vectors over cl_number. -
<cln/GV_complex.h> -
-General vectors over cl_N. -
<cln/GV_real.h> -
-General vectors over cl_R. -
<cln/GV_rational.h> -
-General vectors over cl_RA. -
<cln/GV_integer.h> -
-General vectors over cl_I. -
<cln/GV_modinteger.h> -
-General vectors of modular integers. -
<cln/SV.h> -
-Simple vectors. -
<cln/SV_number.h> -
-Simple vectors over cl_number. -
<cln/SV_complex.h> -
-Simple vectors over cl_N. -
<cln/SV_real.h> -
-Simple vectors over cl_R. -
<cln/SV_rational.h> -
-Simple vectors over cl_RA. -
<cln/SV_integer.h> -
-Simple vectors over cl_I. -
<cln/SV_ringelt.h> -
-Simple vectors of general ring elements. -
<cln/univpoly.h> -
-Univariate polynomials. -
<cln/univpoly_integer.h> -
-Univariate polynomials over the integers. -
<cln/univpoly_rational.h> -
-Univariate polynomials over the rational numbers. -
<cln/univpoly_real.h> -
-Univariate polynomials over the real numbers. -
<cln/univpoly_complex.h> -
-Univariate polynomials over the complex numbers. -
<cln/univpoly_modint.h> -
-Univariate polynomials over modular integer rings. -
<cln/timing.h> -
-Timing facilities. -
<cln/cln.h> -
-Includes all of the above. -
- - - -

11.4 An Example

- -

-A function which computes the nth Fibonacci number can be written as follows. - - - - -

-#include <cln/integer.h>
-#include <cln/real.h>
-using namespace cln;
-
-// Returns F_n, computed as the nearest integer to
-// ((1+sqrt(5))/2)^n/sqrt(5). Assume n>=0.
-const cl_I fibonacci (int n)
-{
-        // Need a precision of ((1+sqrt(5))/2)^-n.
-        cl_float_format_t prec = cl_float_format((int)(0.208987641*n+5));
-        cl_R sqrt5 = sqrt(cl_float(5,prec));
-        cl_R phi = (1+sqrt5)/2;
-        return round1( expt(phi,n)/sqrt5 );
-}
-
- -

-Let's explain what is going on in detail. - - -

-The include file <cln/integer.h> is necessary because the type -cl_I is used in the function, and the include file <cln/real.h> -is needed for the type cl_R and the floating point number functions. -The order of the include files does not matter. In order not to write out -cln::foo we can safely import the whole namespace cln. - - -

-Then comes the function declaration. The argument is an int, the -result an integer. The return type is defined as `const cl_I', not -simply `cl_I', because that allows the compiler to detect typos like -`fibonacci(n) = 100'. It would be possible to declare the return -type as const cl_R (real number) or even const cl_N (complex -number). We use the most specialized possible return type because functions -which call `fibonacci' will be able to profit from the compiler's type -analysis: Adding two integers is slightly more efficient than adding the -same objects declared as complex numbers, because it needs less type -dispatch. Also, when linking to CLN as a non-shared library, this minimizes -the size of the resulting executable program. - - -

-The result will be computed as expt(phi,n)/sqrt(5), rounded to the nearest -integer. In order to get a correct result, the absolute error should be less -than 1/2, i.e. the relative error should be less than sqrt(5)/(2*expt(phi,n)). -To this end, the first line computes a floating point precision for sqrt(5) -and phi. - - -

-Then sqrt(5) is computed by first converting the integer 5 to a floating point -number and than taking the square root. The converse, first taking the square -root of 5, and then converting to the desired precision, would not work in -CLN: The square root would be computed to a default precision (normally -single-float precision), and the following conversion could not help about -the lacking accuracy. This is because CLN is not a symbolic computer algebra -system and does not represent sqrt(5) in a non-numeric way. - - -

-The type cl_R for sqrt5 and, in the following line, phi is the only -possible choice. You cannot write cl_F because the C++ compiler can -only infer that cl_float(5,prec) is a real number. You cannot write -cl_N because a `round1' does not exist for general complex -numbers. - - -

-When the function returns, all the local variables in the function are -automatically reclaimed (garbage collected). Only the result survives and -gets passed to the caller. - - -

-The file fibonacci.cc in the subdirectory examples -contains this implementation together with an even faster algorithm. - - - - -

11.5 Debugging support

-

- - - -

-When debugging a CLN application with GNU gdb, two facilities are -available from the library: - - - -

- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_12.html b/doc/cln_12.html deleted file mode 100644 index 5c86ada..0000000 --- a/doc/cln_12.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 12. Customizing - - -Go to the first, previous, next, last section, table of contents. -


- - -

12. Customizing

-

- - - - - -

12.1 Error handling

- -

-When a fatal error occurs, an error message is output to the standard error -output stream, and the function cl_abort is called. The default -version of this function (provided in the library) terminates the application. -To catch such a fatal error, you need to define the function cl_abort -yourself, with the prototype - -

-#include <cln/abort.h>
-void cl_abort (void);
-
- -

- -This function must not return control to its caller. - - - - -

12.2 Floating-point underflow

-

- - - -

-Floating point underflow denotes the situation when a floating-point number -is to be created which is so close to 0 that its exponent is too -low to be represented internally. By default, this causes a fatal error. -If you set the global variable - -

-cl_boolean cl_inhibit_floating_point_underflow
-
- -

-to cl_true, the error will be inhibited, and a floating-point zero -will be generated instead. The default value of -cl_inhibit_floating_point_underflow is cl_false. - - - - -

12.3 Customizing I/O

- -

-The output of the function fprint may be customized by changing the -value of the global variable default_print_flags. - - - - - -

12.4 Customizing the memory allocator

- -

-Every memory allocation of CLN is done through the function pointer -malloc_hook. Freeing of this memory is done through the function -pointer free_hook. The default versions of these functions, -provided in the library, call malloc and free and check -the malloc result against NULL. -If you want to provide another memory allocator, you need to define -the variables malloc_hook and free_hook yourself, -like this: - -

-#include <cln/malloc.h>
-namespace cln {
-        void* (*malloc_hook) (size_t size) = ...;
-        void (*free_hook) (void* ptr)      = ...;
-}
-
- -

- - -The cl_malloc_hook function must not return a NULL pointer. - - -

-It is not possible to change the memory allocator at runtime, because -it is already called at program startup by the constructors of some -global variables. - - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_13.html b/doc/cln_13.html deleted file mode 100644 index d485564..0000000 --- a/doc/cln_13.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - -CLN, a Class Library for Numbers - Index - - -Go to the first, previous, next, last section, table of contents. -


- - -

Index

- -

-Jump to: -

- - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_2.html b/doc/cln_2.html deleted file mode 100644 index 16bfa17..0000000 --- a/doc/cln_2.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 2. Installation - - -Go to the first, previous, next, last section, table of contents. -


- - -

2. Installation

- -

-This section describes how to install the CLN package on your system. - - - - -

2.1 Prerequisites

- - - -

2.1.1 C++ compiler

- -

-To build CLN, you need a C++ compiler. -Actually, you need GNU g++ 2.90 or newer, the EGCS compilers will -do. -I recommend GNU g++ 2.95 or newer. - - -

-The following C++ features are used: -classes, member functions, overloading of functions and operators, -constructors and destructors, inline, const, multiple inheritance, -templates and namespaces. - - -

-The following C++ features are not used: -new, delete, virtual inheritance, exceptions. - - -

-CLN relies on semi-automatic ordering of initializations -of static and global variables, a feature which I could -implement for GNU g++ only. - - - - -

2.1.2 Make utility

-

- - - -

-To build CLN, you also need to have GNU make installed. - - - - -

2.1.3 Sed utility

-

- - - -

-To build CLN on HP-UX, you also need to have GNU sed installed. -This is because the libtool script, which creates the CLN library, relies -on sed, and the vendor's sed utility on these systems is too -limited. - - - - -

2.2 Building the library

- -

-As with any autoconfiguring GNU software, installation is as easy as this: - - - -

-$ ./configure
-$ make
-$ make check
-
- -

-If on your system, `make' is not GNU make, you have to use -`gmake' instead of `make' above. - - -

-The configure command checks out some features of your system and -C++ compiler and builds the Makefiles. The make command -builds the library. This step may take 4 hours on an average workstation. -The make check runs some test to check that no important subroutine -has been miscompiled. - - -

-The configure command accepts options. To get a summary of them, try - - - -

-$ ./configure --help
-
- -

-Some of the options are explained in detail in the `INSTALL.generic' file. - - -

-You can specify the C compiler, the C++ compiler and their options through -the following environment variables when running configure: - - -

- -
CC -
-Specifies the C compiler. - -
CFLAGS -
-Flags to be given to the C compiler when compiling programs (not when linking). - -
CXX -
-Specifies the C++ compiler. - -
CXXFLAGS -
-Flags to be given to the C++ compiler when compiling programs (not when linking). -
- -

-Examples: - - - -

-$ CC="gcc" CFLAGS="-O" CXX="g++" CXXFLAGS="-O" ./configure
-$ CC="gcc -V egcs-2.91.60" CFLAGS="-O -g" \
-  CXX="g++ -V egcs-2.91.60" CXXFLAGS="-O -g" ./configure
-$ CC="gcc -V 2.95.2" CFLAGS="-O2 -fno-exceptions" \
-  CXX="g++ -V 2.95.2" CFLAGS="-O2 -fno-exceptions" ./configure
-
- -

-Note that for these environment variables to take effect, you have to set -them (assuming a Bourne-compatible shell) on the same line as the -configure command. If you made the settings in earlier shell -commands, you have to export the environment variables before -calling configure. In a csh shell, you have to use the -`setenv' command for setting each of the environment variables. - - -

-Currently CLN works only with the GNU g++ compiler, and only in -optimizing mode. So you should specify at least -O in the CXXFLAGS, -or no CXXFLAGS at all. (If CXXFLAGS is not set, CLN will use -O.) - - -

-If you use g++ version 2.8.x or egcs-2.91.x (a.k.a. egcs-1.1) or -gcc-2.95.x, I recommend adding `-fno-exceptions' to the CXXFLAGS. -This will likely generate better code. - - -

-If you use g++ version egcs-2.91.x (egcs-1.1) or gcc-2.95.x on Sparc, -add either `-O', `-O1' or `-O2 -fno-schedule-insns' to the -CXXFLAGS. With full `-O2', g++ miscompiles the division routines. -Also, if you have g++ version egcs-1.1.1 or older on Sparc, you must -specify `--disable-shared' because g++ would miscompile parts of -the library. - - -

-By default, both a shared and a static library are built. You can build -CLN as a static (or shared) library only, by calling configure with -the option `--disable-shared' (or `--disable-static'). While -shared libraries are usually more convenient to use, they may not work -on all architectures. Try disabling them if you run into linker -problems. Also, they are generally somewhat slower than static -libraries so runtime-critical applications should be linked statically. - - - - -

2.2.1 Using the GNU MP Library

-

- - - -

-Starting with version 1.1, CLN may be configured to make use of a -preinstalled gmp library. Please make sure that you have at -least gmp version 3.0 installed since earlier versions are -unsupported and likely not to work. Enabling this feature by calling -configure with the option `--with-gmp' is known to be quite -a boost for CLN's performance. - - -

-If you have installed the gmp library and its header file in -some place where your compiler cannot find it by default, you must help -configure by setting CPPFLAGS and LDFLAGS. Here is -an example: - - - -

-$ CC="gcc" CFLAGS="-O2" CXX="g++" CXXFLAGS="-O2 -fno-exceptions" \
-  CPPFLAGS="-I/opt/gmp/include" LDFLAGS="-L/opt/gmp/lib" ./configure --with-gmp
-
- - - -

2.3 Installing the library

-

- - - -

-As with any autoconfiguring GNU software, installation is as easy as this: - - - -

-$ make install
-
- -

-The `make install' command installs the library and the include files -into public places (`/usr/local/lib/' and `/usr/local/include/', -if you haven't specified a --prefix option to configure). -This step may require superuser privileges. - - -

-If you have already built the library and wish to install it, but didn't -specify --prefix=... at configure time, just re-run -configure, giving it the same options as the first time, plus -the --prefix=... option. - - - - -

2.4 Cleaning up

- -

-You can remove system-dependent files generated by make through - - - -

-$ make clean
-
- -

-You can remove all files generated by make, thus reverting to a -virgin distribution of CLN, through - - - -

-$ make distclean
-
- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_3.html b/doc/cln_3.html deleted file mode 100644 index 154d8d6..0000000 --- a/doc/cln_3.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 3. Ordinary number types - - -Go to the first, previous, next, last section, table of contents. -


- - -

3. Ordinary number types

- -

-CLN implements the following class hierarchy: - - - -

-                        Number
-                      cl_number
-                    <cln/number.h>
-                          |
-                          |
-                 Real or complex number
-                        cl_N
-                    <cln/complex.h>
-                          |
-                          |
-                     Real number
-                        cl_R
-                     <cln/real.h>
-                          |
-      +-------------------+-------------------+
-      |                                       |
-Rational number                     Floating-point number
-    cl_RA                                   cl_F
-<cln/rational.h>                         <cln/float.h>
-      |                                       |
-      |                +--------------+--------------+--------------+
-   Integer             |              |              |              |
-    cl_I          Short-Float    Single-Float   Double-Float    Long-Float
-<cln/integer.h>      cl_SF          cl_FF          cl_DF          cl_LF
-                 <cln/sfloat.h> <cln/ffloat.h> <cln/dfloat.h> <cln/lfloat.h>
-
- -

- - -The base class cl_number is an abstract base class. -It is not useful to declare a variable of this type except if you want -to completely disable compile-time type checking and use run-time type -checking instead. - - -

- - - -The class cl_N comprises real and complex numbers. There is -no special class for complex numbers since complex numbers with imaginary -part 0 are automatically converted to real numbers. - - -

- -The class cl_R comprises real numbers of different kinds. It is an -abstract class. - - -

- - - -The class cl_RA comprises exact real numbers: rational numbers, including -integers. There is no special class for non-integral rational numbers -since rational numbers with denominator 1 are automatically converted -to integers. - - -

- -The class cl_F implements floating-point approximations to real numbers. -It is an abstract class. - - - - -

3.1 Exact numbers

-

- - - -

-Some numbers are represented as exact numbers: there is no loss of information -when such a number is converted from its mathematical value to its internal -representation. On exact numbers, the elementary operations (+, --, *, /, comparisons, ...) compute the completely -correct result. - - -

-In CLN, the exact numbers are: - - - -

- -

-Rational numbers are always normalized to the form -numerator/denominator where the numerator and denominator -are coprime integers and the denominator is positive. If the resulting -denominator is 1, the rational number is converted to an integer. - - -

-Small integers (typically in the range -2^30...2^30-1, -for 32-bit machines) are especially efficient, because they consume no heap -allocation. Otherwise the distinction between these immediate integers -(called "fixnums") and heap allocated integers (called "bignums") -is completely transparent. - - - - -

3.2 Floating-point numbers

-

- - - -

-Not all real numbers can be represented exactly. (There is an easy mathematical -proof for this: Only a countable set of numbers can be stored exactly in -a computer, even if one assumes that it has unlimited storage. But there -are uncountably many real numbers.) So some approximation is needed. -CLN implements ordinary floating-point numbers, with mantissa and exponent. - - -

- -The elementary operations (+, -, *, /, ...) -only return approximate results. For example, the value of the expression -(cl_F) 0.3 + (cl_F) 0.4 prints as `0.70000005', not as -`0.7'. Rounding errors like this one are inevitable when computing -with floating-point numbers. - - -

-Nevertheless, CLN rounds the floating-point results of the operations +, --, *, /, sqrt according to the "round-to-even" -rule: It first computes the exact mathematical result and then returns the -floating-point number which is nearest to this. If two floating-point numbers -are equally distant from the ideal result, the one with a 0 in its least -significant mantissa bit is chosen. - - -

-Similarly, testing floating point numbers for equality `x == y' -is gambling with random errors. Better check for `abs(x - y) < epsilon' -for some well-chosen epsilon. - - -

-Floating point numbers come in four flavors: - - - -

- -

-Of course, computations with long floats are more expensive than those -with smaller floating-point formats. - - -

-CLN does not implement features like NaNs, denormalized numbers and -gradual underflow. If the exponent range of some floating-point type -is too limited for your application, choose another floating-point type -with larger exponent range. - - -

- -As a user of CLN, you can forget about the differences between the -four floating-point types and just declare all your floating-point -variables as being of type cl_F. This has the advantage that -when you change the precision of some computation (say, from cl_DF -to cl_LF), you don't have to change the code, only the precision -of the initial values. Also, many transcendental functions have been -declared as returning a cl_F when the argument is a cl_F, -but such declarations are missing for the types cl_SF, cl_FF, -cl_DF, cl_LF. (Such declarations would be wrong if -the floating point contagion rule happened to change in the future.) - - - - -

3.3 Complex numbers

-

- - - -

-Complex numbers, as implemented by the class cl_N, have a real -part and an imaginary part, both real numbers. A complex number whose -imaginary part is the exact number 0 is automatically converted -to a real number. - - -

-Complex numbers can arise from real numbers alone, for example -through application of sqrt or transcendental functions. - - - - -

3.4 Conversions

-

- - - -

-Conversions from any class to any its superclasses ("base classes" in -C++ terminology) is done automatically. - - -

-Conversions from the C built-in types `long' and `unsigned long' -are provided for the classes cl_I, cl_RA, cl_R, -cl_N and cl_number. - - -

-Conversions from the C built-in types `int' and `unsigned int' -are provided for the classes cl_I, cl_RA, cl_R, -cl_N and cl_number. However, these conversions emphasize -efficiency. Their range is therefore limited: - - - -

- -

-In a declaration like `cl_I x = 10;' the C++ compiler is able to -do the conversion of 10 from `int' to `cl_I' at compile time -already. On the other hand, code like `cl_I x = 1000000000;' is -in error. -So, if you want to be sure that an `int' whose magnitude is not guaranteed -to be < 2^29 is correctly converted to a `cl_I', first convert it to a -`long'. Similarly, if a large `unsigned int' is to be converted to a -`cl_I', first convert it to an `unsigned long'. - - -

-Conversions from the C built-in type `float' are provided for the classes -cl_FF, cl_F, cl_R, cl_N and cl_number. - - -

-Conversions from the C built-in type `double' are provided for the classes -cl_DF, cl_F, cl_R, cl_N and cl_number. - - -

-Conversions from `const char *' are provided for the classes -cl_I, cl_RA, -cl_SF, cl_FF, cl_DF, cl_LF, cl_F, -cl_R, cl_N. -The easiest way to specify a value which is outside of the range of the -C++ built-in types is therefore to specify it as a string, like this: - - -

-   cl_I order_of_rubiks_cube_group = "43252003274489856000";
-
- -

-Note that this conversion is done at runtime, not at compile-time. - - -

-Conversions from cl_I to the C built-in types `int', -`unsigned int', `long', `unsigned long' are provided through -the functions - - -

- -
int cl_I_to_int (const cl_I& x) -
- -
unsigned int cl_I_to_uint (const cl_I& x) -
- -
long cl_I_to_long (const cl_I& x) -
- -
unsigned long cl_I_to_ulong (const cl_I& x) -
- -Returns x as element of the C type ctype. If x is not -representable in the range of ctype, a runtime error occurs. -
- -

-Conversions from the classes cl_I, cl_RA, -cl_SF, cl_FF, cl_DF, cl_LF, cl_F and -cl_R -to the C built-in types `float' and `double' are provided through -the functions - - -

- -
float float_approx (const type& x) -
- -
double double_approx (const type& x) -
- -Returns an approximation of x of C type ctype. -If abs(x) is too close to 0 (underflow), 0 is returned. -If abs(x) is too large (overflow), an IEEE infinity is returned. -
- -

-Conversions from any class to any of its subclasses ("derived classes" in -C++ terminology) are not provided. Instead, you can assert and check -that a value belongs to a certain subclass, and return it as element of that -class, using the `As' and `The' macros. - -As(type)(value) checks that value belongs to -type and returns it as such. - -The(type)(value) assumes that value belongs to -type and returns it as such. It is your responsibility to ensure -that this assumption is valid. -Example: - - - -

-   cl_I x = ...;
-   if (!(x >= 0)) abort();
-   cl_I ten_x = The(cl_I)(expt(10,x)); // If x >= 0, 10^x is an integer.
-                // In general, it would be a rational number.
-
- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_4.html b/doc/cln_4.html deleted file mode 100644 index 43ff034..0000000 --- a/doc/cln_4.html +++ /dev/null @@ -1,2018 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 4. Functions on numbers - - -Go to the first, previous, next, last section, table of contents. -


- - -

4. Functions on numbers

- -

-Each of the number classes declares its mathematical operations in the -corresponding include file. For example, if your code operates with -objects of type cl_I, it should #include <cln/integer.h>. - - - - -

4.1 Constructing numbers

- -

-Here is how to create number objects "from nothing". - - - - -

4.1.1 Constructing integers

- -

-cl_I objects are most easily constructed from C integers and from -strings. See section 3.4 Conversions. - - - - -

4.1.2 Constructing rational numbers

- -

-cl_RA objects can be constructed from strings. The syntax -for rational numbers is described in section 5.1 Internal and printed representation. -Another standard way to produce a rational number is through application -of `operator /' or `recip' on integers. - - - - -

4.1.3 Constructing floating-point numbers

- -

-cl_F objects with low precision are most easily constructed from -C `float' and `double'. See section 3.4 Conversions. - - -

-To construct a cl_F with high precision, you can use the conversion -from `const char *', but you have to specify the desired precision -within the string. (See section 5.1 Internal and printed representation.) -Example: - -

-   cl_F e = "0.271828182845904523536028747135266249775724709369996e+1_40";
-
- -

-will set `e' to the given value, with a precision of 40 decimal digits. - - -

-The programmatic way to construct a cl_F with high precision is -through the cl_float conversion function, see -section 4.11.1 Conversion to floating-point numbers. For example, to compute -e to 40 decimal places, first construct 1.0 to 40 decimal places -and then apply the exponential function: - -

-   cl_float_format_t precision = cl_float_format(40);
-   cl_F e = exp(cl_float(1,precision));
-
- - - -

4.1.4 Constructing complex numbers

- -

-Non-real cl_N objects are normally constructed through the function - -

-   cl_N complex (const cl_R& realpart, const cl_R& imagpart)
-
- -

-See section 4.4 Elementary complex functions. - - - - -

4.2 Elementary functions

- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type operator + (const type&, const type&) -
- -Addition. - -
type operator - (const type&, const type&) -
- -Subtraction. - -
type operator - (const type&) -
-Returns the negative of the argument. - -
type plus1 (const type& x) -
- -Returns x + 1. - -
type minus1 (const type& x) -
- -Returns x - 1. - -
type operator * (const type&, const type&) -
- -Multiplication. - -
type square (const type& x) -
- -Returns x * x. -
- -

-Each of the classes cl_N, cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type operator / (const type&, const type&) -
- -Division. - -
type recip (const type&) -
- -Returns the reciprocal of the argument. -
- -

-The class cl_I doesn't define a `/' operation because -in the C/C++ language this operator, applied to integral types, -denotes the `floor' or `truncate' operation (which one of these, -is implementation dependent). (See section 4.6 Rounding functions.) -Instead, cl_I defines an "exact quotient" function: - - -

- -
cl_I exquo (const cl_I& x, const cl_I& y) -
- -Checks that y divides x, and returns the quotient x/y. -
- -

-The following exponentiation functions are defined: - - -

- -
cl_I expt_pos (const cl_I& x, const cl_I& y) -
- -
cl_RA expt_pos (const cl_RA& x, const cl_I& y) -
-y must be > 0. Returns x^y. - -
cl_RA expt (const cl_RA& x, const cl_I& y) -
- -
cl_R expt (const cl_R& x, const cl_I& y) -
-
cl_N expt (const cl_N& x, const cl_I& y) -
-Returns x^y. -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type abs (const type& x) -
- -Returns the absolute value of x. -This is x if x >= 0, and -x if x <= 0. -
- -

-The class cl_N implements this as follows: - - -

- -
cl_R abs (const cl_N x) -
-Returns the absolute value of x. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type signum (const type& x) -
- -Returns the sign of x, in the same number format as x. -This is defined as x / abs(x) if x is non-zero, and -x if x is zero. If x is real, the value is either -0 or 1 or -1. -
- - - -

4.3 Elementary rational functions

- -

-Each of the classes cl_RA, cl_I defines the following operations: - - -

- -
cl_I numerator (const type& x) -
- -Returns the numerator of x. - -
cl_I denominator (const type& x) -
- -Returns the denominator of x. -
- -

-The numerator and denominator of a rational number are normalized in such -a way that they have no factor in common and the denominator is positive. - - - - -

4.4 Elementary complex functions

- -

-The class cl_N defines the following operation: - - -

- -
cl_N complex (const cl_R& a, const cl_R& b) -
- -Returns the complex number a+bi, that is, the complex number with -real part a and imaginary part b. -
- -

-Each of the classes cl_N, cl_R defines the following operations: - - -

- -
cl_R realpart (const type& x) -
- -Returns the real part of x. - -
cl_R imagpart (const type& x) -
- -Returns the imaginary part of x. - -
type conjugate (const type& x) -
- -Returns the complex conjugate of x. -
- -

-We have the relations - - - -

- - - -

4.5 Comparisons

-

- - - -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
bool operator == (const type&, const type&) -
- -
bool operator != (const type&, const type&) -
- -Comparison, as in C and C++. - -
uint32 equal_hashcode (const type&) -
- -Returns a 32-bit hash code that is the same for any two numbers which are -the same according to ==. This hash code depends on the number's value, -not its type or precision. - -
cl_boolean zerop (const type& x) -
- -Compare against zero: x == 0 -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_signean compare (const type& x, const type& y) -
- -Compares x and y. Returns +1 if x>y, --1 if x<y, 0 if x=y. - -
bool operator <= (const type&, const type&) -
- -
bool operator < (const type&, const type&) -
- -
bool operator >= (const type&, const type&) -
- -
bool operator > (const type&, const type&) -
- -Comparison, as in C and C++. - -
cl_boolean minusp (const type& x) -
- -Compare against zero: x < 0 - -
cl_boolean plusp (const type& x) -
- -Compare against zero: x > 0 - -
type max (const type& x, const type& y) -
- -Return the maximum of x and y. - -
type min (const type& x, const type& y) -
- -Return the minimum of x and y. -
- -

-When a floating point number and a rational number are compared, the float -is first converted to a rational number using the function rational. -Since a floating point number actually represents an interval of real numbers, -the result might be surprising. -For example, (cl_F)(cl_R)"1/3" == (cl_R)"1/3" returns false because -there is no floating point number whose value is exactly 1/3. - - - - -

4.6 Rounding functions

-

- - - -

-When a real number is to be converted to an integer, there is no "best" -rounding. The desired rounding function depends on the application. -The Common Lisp and ISO Lisp standards offer four rounding functions: - - -

- -
floor(x) -
-This is the largest integer <=x. - -
ceiling(x) -
-This is the smallest integer >=x. - -
truncate(x) -
-Among the integers between 0 and x (inclusive) the one nearest to x. - -
round(x) -
-The integer nearest to x. If x is exactly halfway between two -integers, choose the even one. -
- -

-These functions have different advantages: - - -

-floor and ceiling are translation invariant: -floor(x+n) = floor(x) + n and ceiling(x+n) = ceiling(x) + n -for every x and every integer n. - - -

-On the other hand, truncate and round are symmetric: -truncate(-x) = -truncate(x) and round(-x) = -round(x), -and furthermore round is unbiased: on the "average", it rounds -down exactly as often as it rounds up. - - -

-The functions are related like this: - - - -

- -

-Each of the classes cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_I floor1 (const type& x) -
- -Returns floor(x). -
cl_I ceiling1 (const type& x) -
- -Returns ceiling(x). -
cl_I truncate1 (const type& x) -
- -Returns truncate(x). -
cl_I round1 (const type& x) -
- -Returns round(x). -
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
cl_I floor1 (const type& x, const type& y) -
-Returns floor(x/y). -
cl_I ceiling1 (const type& x, const type& y) -
-Returns ceiling(x/y). -
cl_I truncate1 (const type& x, const type& y) -
-Returns truncate(x/y). -
cl_I round1 (const type& x, const type& y) -
-Returns round(x/y). -
- -

-These functions are called `floor1', ... here instead of -`floor', ..., because on some systems, system dependent include -files define `floor' and `ceiling' as macros. - - -

-In many cases, one needs both the quotient and the remainder of a division. -It is more efficient to compute both at the same time than to perform -two divisions, one for quotient and the next one for the remainder. -The following functions therefore return a structure containing both -the quotient and the remainder. The suffix `2' indicates the number -of "return values". The remainder is defined as follows: - - - -

- -

-and similarly for the other three operations. - - -

-Each of the classes cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
struct type_div_t { cl_I quotient; type remainder; }; -
-
type_div_t floor2 (const type& x) -
-
type_div_t ceiling2 (const type& x) -
-
type_div_t truncate2 (const type& x) -
-
type_div_t round2 (const type& x) -
-
- -

-Each of the classes cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
struct type_div_t { cl_I quotient; type remainder; }; -
-
type_div_t floor2 (const type& x, const type& y) -
- -
type_div_t ceiling2 (const type& x, const type& y) -
- -
type_div_t truncate2 (const type& x, const type& y) -
- -
type_div_t round2 (const type& x, const type& y) -
- -
- -

-Sometimes, one wants the quotient as a floating-point number (of the -same format as the argument, if the argument is a float) instead of as -an integer. The prefix `f' indicates this. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - -

- -
type ffloor (const type& x) -
- -
type fceiling (const type& x) -
- -
type ftruncate (const type& x) -
- -
type fround (const type& x) -
- -
- -

-and similarly for class cl_R, but with return type cl_F. - - -

-The class cl_R defines the following operations: - - -

- -
cl_F ffloor (const type& x, const type& y) -
-
cl_F fceiling (const type& x, const type& y) -
-
cl_F ftruncate (const type& x, const type& y) -
-
cl_F fround (const type& x, const type& y) -
-
- -

-These functions also exist in versions which return both the quotient -and the remainder. The suffix `2' indicates this. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations: - - - - - - - -

- -
struct type_fdiv_t { type quotient; type remainder; }; -
-
type_fdiv_t ffloor2 (const type& x) -
- -
type_fdiv_t fceiling2 (const type& x) -
- -
type_fdiv_t ftruncate2 (const type& x) -
- -
type_fdiv_t fround2 (const type& x) -
- -
-

-and similarly for class cl_R, but with quotient type cl_F. - - - -

-The class cl_R defines the following operations: - - -

- -
struct type_fdiv_t { cl_F quotient; cl_R remainder; }; -
-
type_fdiv_t ffloor2 (const type& x, const type& y) -
-
type_fdiv_t fceiling2 (const type& x, const type& y) -
-
type_fdiv_t ftruncate2 (const type& x, const type& y) -
-
type_fdiv_t fround2 (const type& x, const type& y) -
-
- -

-Other applications need only the remainder of a division. -The remainder of `floor' and `ffloor' is called `mod' -(abbreviation of "modulo"). The remainder `truncate' and -`ftruncate' is called `rem' (abbreviation of "remainder"). - - - -

- -

-If x and y are both >= 0, mod(x,y) = rem(x,y) >= 0. -In general, mod(x,y) has the sign of y or is zero, -and rem(x,y) has the sign of x or is zero. - - -

-The classes cl_R, cl_I define the following operations: - - -

- -
type mod (const type& x, const type& y) -
- -
type rem (const type& x, const type& y) -
- -
- - - -

4.7 Roots

- -

-Each of the classes cl_R, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operation: - - -

- -
type sqrt (const type& x) -
- -x must be >= 0. This function returns the square root of x, -normalized to be >= 0. If x is the square of a rational number, -sqrt(x) will be a rational number, else it will return a -floating-point approximation. -
- -

-The classes cl_RA, cl_I define the following operation: - - -

- -
cl_boolean sqrtp (const type& x, type* root) -
- -This tests whether x is a perfect square. If so, it returns true -and the exact square root in *root, else it returns false. -
- -

-Furthermore, for integers, similarly: - - -

- -
cl_boolean isqrt (const type& x, type* root) -
- -x should be >= 0. This function sets *root to -floor(sqrt(x)) and returns the same value as sqrtp: -the boolean value (expt(*root,2) == x). -
- -

-For nth roots, the classes cl_RA, cl_I -define the following operation: - - -

- -
cl_boolean rootp (const type& x, const cl_I& n, type* root) -
- -x must be >= 0. n must be > 0. -This tests whether x is an nth power of a rational number. -If so, it returns true and the exact root in *root, else it returns -false. -
- -

-The only square root function which accepts negative numbers is the one -for class cl_N: - - -

- -
cl_N sqrt (const cl_N& z) -
- -Returns the square root of z, as defined by the formula -sqrt(z) = exp(log(z)/2). Conversion to a floating-point type -or to a complex number are done if necessary. The range of the result is the -right half plane realpart(sqrt(z)) >= 0 -including the positive imaginary axis and 0, but excluding -the negative imaginary axis. -The result is an exact number only if z is an exact number. -
- - - -

4.8 Transcendental functions

-

- - - -

-The transcendental functions return an exact result if the argument -is exact and the result is exact as well. Otherwise they must return -inexact numbers even if the argument is exact. -For example, cos(0) = 1 returns the rational number 1. - - - - -

4.8.1 Exponential and logarithmic functions

- -
- -
cl_R exp (const cl_R& x) -
- -
cl_N exp (const cl_N& x) -
-Returns the exponential function of x. This is e^x where -e is the base of the natural logarithms. The range of the result -is the entire complex plane excluding 0. - -
cl_R ln (const cl_R& x) -
- -x must be > 0. Returns the (natural) logarithm of x. - -
cl_N log (const cl_N& x) -
- -Returns the (natural) logarithm of x. If x is real and positive, -this is ln(x). In general, log(x) = log(abs(x)) + i*phase(x). -The range of the result is the strip in the complex plane --pi < imagpart(log(x)) <= pi. - -
cl_R phase (const cl_N& x) -
- -Returns the angle part of x in its polar representation as a -complex number. That is, phase(x) = atan(realpart(x),imagpart(x)). -This is also the imaginary part of log(x). -The range of the result is the interval -pi < phase(x) <= pi. -The result will be an exact number only if zerop(x) or -if x is real and positive. - -
cl_R log (const cl_R& a, const cl_R& b) -
-a and b must be > 0. Returns the logarithm of a with -respect to base b. log(a,b) = ln(a)/ln(b). -The result can be exact only if a = 1 or if a and b -are both rational. - -
cl_N log (const cl_N& a, const cl_N& b) -
-Returns the logarithm of a with respect to base b. -log(a,b) = log(a)/log(b). - -
cl_N expt (const cl_N& x, const cl_N& y) -
- -Exponentiation: Returns x^y = exp(y*log(x)). -
- -

-The constant e = exp(1) = 2.71828... is returned by the following functions: - - -

- -
cl_F exp1 (cl_float_format_t f) -
- -Returns e as a float of format f. - -
cl_F exp1 (const cl_F& y) -
-Returns e in the float format of y. - -
cl_F exp1 (void) -
-Returns e as a float of format default_float_format. -
- - - -

4.8.2 Trigonometric functions

- -
- -
cl_R sin (const cl_R& x) -
- -Returns sin(x). The range of the result is the interval --1 <= sin(x) <= 1. - -
cl_N sin (const cl_N& z) -
-Returns sin(z). The range of the result is the entire complex plane. - -
cl_R cos (const cl_R& x) -
- -Returns cos(x). The range of the result is the interval --1 <= cos(x) <= 1. - -
cl_N cos (const cl_N& x) -
-Returns cos(z). The range of the result is the entire complex plane. - -
struct cos_sin_t { cl_R cos; cl_R sin; }; -
- -
cos_sin_t cos_sin (const cl_R& x) -
-Returns both sin(x) and cos(x). This is more efficient than - -computing them separately. The relation cos^2 + sin^2 = 1 will -hold only approximately. - -
cl_R tan (const cl_R& x) -
- -
cl_N tan (const cl_N& x) -
-Returns tan(x) = sin(x)/cos(x). - -
cl_N cis (const cl_R& x) -
- -
cl_N cis (const cl_N& x) -
-Returns exp(i*x). The name `cis' means "cos + i sin", because -e^(i*x) = cos(x) + i*sin(x). - - - -
cl_N asin (const cl_N& z) -
-Returns arcsin(z). This is defined as -arcsin(z) = log(iz+sqrt(1-z^2))/i and satisfies -arcsin(-z) = -arcsin(z). -The range of the result is the strip in the complex domain --pi/2 <= realpart(arcsin(z)) <= pi/2, excluding the numbers -with realpart = -pi/2 and imagpart < 0 and the numbers -with realpart = pi/2 and imagpart > 0. - -
cl_N acos (const cl_N& z) -
- -Returns arccos(z). This is defined as -arccos(z) = pi/2 - arcsin(z) = log(z+i*sqrt(1-z^2))/i -and satisfies arccos(-z) = pi - arccos(z). -The range of the result is the strip in the complex domain -0 <= realpart(arcsin(z)) <= pi, excluding the numbers -with realpart = 0 and imagpart < 0 and the numbers -with realpart = pi and imagpart > 0. - - - -
cl_R atan (const cl_R& x, const cl_R& y) -
-Returns the angle of the polar representation of the complex number -x+iy. This is atan(y/x) if x>0. The range of -the result is the interval -pi < atan(x,y) <= pi. The result will -be an exact number only if x > 0 and y is the exact 0. -WARNING: In Common Lisp, this function is called as (atan y x), -with reversed order of arguments. - -
cl_R atan (const cl_R& x) -
-Returns arctan(x). This is the same as atan(1,x). The range -of the result is the interval -pi/2 < atan(x) < pi/2. The result -will be an exact number only if x is the exact 0. - -
cl_N atan (const cl_N& z) -
-Returns arctan(z). This is defined as -arctan(z) = (log(1+iz)-log(1-iz)) / 2i and satisfies -arctan(-z) = -arctan(z). The range of the result is -the strip in the complex domain --pi/2 <= realpart(arctan(z)) <= pi/2, excluding the numbers -with realpart = -pi/2 and imagpart >= 0 and the numbers -with realpart = pi/2 and imagpart <= 0. - -
- -

- - -Archimedes' constant pi = 3.14... is returned by the following functions: - - -

- -
cl_F pi (cl_float_format_t f) -
- -Returns pi as a float of format f. - -
cl_F pi (const cl_F& y) -
-Returns pi in the float format of y. - -
cl_F pi (void) -
-Returns pi as a float of format default_float_format. -
- - - -

4.8.3 Hyperbolic functions

- -
- -
cl_R sinh (const cl_R& x) -
- -Returns sinh(x). - -
cl_N sinh (const cl_N& z) -
-Returns sinh(z). The range of the result is the entire complex plane. - -
cl_R cosh (const cl_R& x) -
- -Returns cosh(x). The range of the result is the interval -cosh(x) >= 1. - -
cl_N cosh (const cl_N& z) -
-Returns cosh(z). The range of the result is the entire complex plane. - -
struct cosh_sinh_t { cl_R cosh; cl_R sinh; }; -
- -
cosh_sinh_t cosh_sinh (const cl_R& x) -
- -Returns both sinh(x) and cosh(x). This is more efficient than -computing them separately. The relation cosh^2 - sinh^2 = 1 will -hold only approximately. - -
cl_R tanh (const cl_R& x) -
- -
cl_N tanh (const cl_N& x) -
-Returns tanh(x) = sinh(x)/cosh(x). - -
cl_N asinh (const cl_N& z) -
- -Returns arsinh(z). This is defined as -arsinh(z) = log(z+sqrt(1+z^2)) and satisfies -arsinh(-z) = -arsinh(z). -The range of the result is the strip in the complex domain --pi/2 <= imagpart(arsinh(z)) <= pi/2, excluding the numbers -with imagpart = -pi/2 and realpart > 0 and the numbers -with imagpart = pi/2 and realpart < 0. - -
cl_N acosh (const cl_N& z) -
- -Returns arcosh(z). This is defined as -arcosh(z) = 2*log(sqrt((z+1)/2)+sqrt((z-1)/2)). -The range of the result is the half-strip in the complex domain --pi < imagpart(arcosh(z)) <= pi, realpart(arcosh(z)) >= 0, -excluding the numbers with realpart = 0 and -pi < imagpart < 0. - -
cl_N atanh (const cl_N& z) -
- -Returns artanh(z). This is defined as -artanh(z) = (log(1+z)-log(1-z)) / 2 and satisfies -artanh(-z) = -artanh(z). The range of the result is -the strip in the complex domain --pi/2 <= imagpart(artanh(z)) <= pi/2, excluding the numbers -with imagpart = -pi/2 and realpart <= 0 and the numbers -with imagpart = pi/2 and realpart >= 0. -
- - - -

4.8.4 Euler gamma

-

- - - -

-Euler's constant C = 0.577... is returned by the following functions: - - -

- -
cl_F eulerconst (cl_float_format_t f) -
- -Returns Euler's constant as a float of format f. - -
cl_F eulerconst (const cl_F& y) -
-Returns Euler's constant in the float format of y. - -
cl_F eulerconst (void) -
-Returns Euler's constant as a float of format default_float_format. -
- -

-Catalan's constant G = 0.915... is returned by the following functions: - - - -

- -
cl_F catalanconst (cl_float_format_t f) -
- -Returns Catalan's constant as a float of format f. - -
cl_F catalanconst (const cl_F& y) -
-Returns Catalan's constant in the float format of y. - -
cl_F catalanconst (void) -
-Returns Catalan's constant as a float of format default_float_format. -
- - - -

4.8.5 Riemann zeta

-

- - - -

-Riemann's zeta function at an integral point s>1 is returned by the -following functions: - - -

- -
cl_F zeta (int s, cl_float_format_t f) -
- -Returns Riemann's zeta function at s as a float of format f. - -
cl_F zeta (int s, const cl_F& y) -
-Returns Riemann's zeta function at s in the float format of y. - -
cl_F zeta (int s) -
-Returns Riemann's zeta function at s as a float of format -default_float_format. -
- - - -

4.9 Functions on integers

- - - -

4.9.1 Logical functions

- -

-Integers, when viewed as in two's complement notation, can be thought as -infinite bit strings where the bits' values eventually are constant. -For example, - -

-    17 = ......00010001
-    -6 = ......11111010
-
- -

-The logical operations view integers as such bit strings and operate -on each of the bit positions in parallel. - - -

- -
cl_I lognot (const cl_I& x) -
- -
cl_I operator ~ (const cl_I& x) -
- -Logical not, like ~x in C. This is the same as -1-x. - -
cl_I logand (const cl_I& x, const cl_I& y) -
- -
cl_I operator & (const cl_I& x, const cl_I& y) -
- -Logical and, like x & y in C. - -
cl_I logior (const cl_I& x, const cl_I& y) -
- -
cl_I operator | (const cl_I& x, const cl_I& y) -
- -Logical (inclusive) or, like x | y in C. - -
cl_I logxor (const cl_I& x, const cl_I& y) -
- -
cl_I operator ^ (const cl_I& x, const cl_I& y) -
- -Exclusive or, like x ^ y in C. - -
cl_I logeqv (const cl_I& x, const cl_I& y) -
- -Bitwise equivalence, like ~(x ^ y) in C. - -
cl_I lognand (const cl_I& x, const cl_I& y) -
- -Bitwise not and, like ~(x & y) in C. - -
cl_I lognor (const cl_I& x, const cl_I& y) -
- -Bitwise not or, like ~(x | y) in C. - -
cl_I logandc1 (const cl_I& x, const cl_I& y) -
- -Logical and, complementing the first argument, like ~x & y in C. - -
cl_I logandc2 (const cl_I& x, const cl_I& y) -
- -Logical and, complementing the second argument, like x & ~y in C. - -
cl_I logorc1 (const cl_I& x, const cl_I& y) -
- -Logical or, complementing the first argument, like ~x | y in C. - -
cl_I logorc2 (const cl_I& x, const cl_I& y) -
- -Logical or, complementing the second argument, like x | ~y in C. -
- -

-These operations are all available though the function -

- -
cl_I boole (cl_boole op, const cl_I& x, const cl_I& y) -
- -
-

-where op must have one of the 16 values (each one stands for a function -which combines two bits into one bit): boole_clr, boole_set, -boole_1, boole_2, boole_c1, boole_c2, -boole_and, boole_ior, boole_xor, boole_eqv, -boole_nand, boole_nor, boole_andc1, boole_andc2, -boole_orc1, boole_orc2. - - - - - - - - - - - - - - - - - -

-Other functions that view integers as bit strings: - - -

- -
cl_boolean logtest (const cl_I& x, const cl_I& y) -
- -Returns true if some bit is set in both x and y, i.e. if -logand(x,y) != 0. - -
cl_boolean logbitp (const cl_I& n, const cl_I& x) -
- -Returns true if the nth bit (from the right) of x is set. -Bit 0 is the least significant bit. - -
uintL logcount (const cl_I& x) -
- -Returns the number of one bits in x, if x >= 0, or -the number of zero bits in x, if x < 0. -
- -

-The following functions operate on intervals of bits in integers. -The type - -

-struct cl_byte { uintL size; uintL position; };
-
- -

- -represents the bit interval containing the bits -position...position+size-1 of an integer. -The constructor cl_byte(size,position) constructs a cl_byte. - - -

- -
cl_I ldb (const cl_I& n, const cl_byte& b) -
- -extracts the bits of n described by the bit interval b -and returns them as a nonnegative integer with b.size bits. - -
cl_boolean ldb_test (const cl_I& n, const cl_byte& b) -
- -Returns true if some bit described by the bit interval b is set in -n. - -
cl_I dpb (const cl_I& newbyte, const cl_I& n, const cl_byte& b) -
- -Returns n, with the bits described by the bit interval b -replaced by newbyte. Only the lowest b.size bits of -newbyte are relevant. -
- -

-The functions ldb and dpb implicitly shift. The following -functions are their counterparts without shifting: - - -

- -
cl_I mask_field (const cl_I& n, const cl_byte& b) -
- -returns an integer with the bits described by the bit interval b -copied from the corresponding bits in n, the other bits zero. - -
cl_I deposit_field (const cl_I& newbyte, const cl_I& n, const cl_byte& b) -
- -returns an integer where the bits described by the bit interval b -come from newbyte and the other bits come from n. -
- -

-The following relations hold: - - - -

- -

-The following operations on integers as bit strings are efficient shortcuts -for common arithmetic operations: - - -

- -
cl_boolean oddp (const cl_I& x) -
- -Returns true if the least significant bit of x is 1. Equivalent to -mod(x,2) != 0. - -
cl_boolean evenp (const cl_I& x) -
- -Returns true if the least significant bit of x is 0. Equivalent to -mod(x,2) == 0. - -
cl_I operator << (const cl_I& x, const cl_I& n) -
- -Shifts x by n bits to the left. n should be >=0. -Equivalent to x * expt(2,n). - -
cl_I operator >> (const cl_I& x, const cl_I& n) -
- -Shifts x by n bits to the right. n should be >=0. -Bits shifted out to the right are thrown away. -Equivalent to floor(x / expt(2,n)). - -
cl_I ash (const cl_I& x, const cl_I& y) -
- -Shifts x by y bits to the left (if y>=0) or -by -y bits to the right (if y<=0). In other words, this -returns floor(x * expt(2,y)). - -
uintL integer_length (const cl_I& x) -
- -Returns the number of bits (excluding the sign bit) needed to represent x -in two's complement notation. This is the smallest n >= 0 such that --2^n <= x < 2^n. If x > 0, this is the unique n > 0 such that -2^(n-1) <= x < 2^n. - -
uintL ord2 (const cl_I& x) -
- -x must be non-zero. This function returns the number of 0 bits at the -right of x in two's complement notation. This is the largest n >= 0 -such that 2^n divides x. - -
uintL power2p (const cl_I& x) -
- -x must be > 0. This function checks whether x is a power of 2. -If x = 2^(n-1), it returns n. Else it returns 0. -(See also the function logp.) -
- - - -

4.9.2 Number theoretic functions

- -
- -
uint32 gcd (uint32 a, uint32 b) -
- -
cl_I gcd (const cl_I& a, const cl_I& b) -
-This function returns the greatest common divisor of a and b, -normalized to be >= 0. - -
cl_I xgcd (const cl_I& a, const cl_I& b, cl_I* u, cl_I* v) -
- -This function ("extended gcd") returns the greatest common divisor g of -a and b and at the same time the representation of g -as an integral linear combination of a and b: -u and v with u*a+v*b = g, g >= 0. -u and v will be normalized to be of smallest possible absolute -value, in the following sense: If a and b are non-zero, and -abs(a) != abs(b), u and v will satisfy the inequalities -abs(u) <= abs(b)/(2*g), abs(v) <= abs(a)/(2*g). - -
cl_I lcm (const cl_I& a, const cl_I& b) -
- -This function returns the least common multiple of a and b, -normalized to be >= 0. - -
cl_boolean logp (const cl_I& a, const cl_I& b, cl_RA* l) -
- -
cl_boolean logp (const cl_RA& a, const cl_RA& b, cl_RA* l) -
-a must be > 0. b must be >0 and != 1. If log(a,b) is -rational number, this function returns true and sets *l = log(a,b), else -it returns false. -
- - - -

4.9.3 Combinatorial functions

- -
- -
cl_I factorial (uintL n) -
- -n must be a small integer >= 0. This function returns the factorial -n! = 1*2*...*n. - -
cl_I doublefactorial (uintL n) -
- -n must be a small integer >= 0. This function returns the -doublefactorial n!! = 1*3*...*n or -n!! = 2*4*...*n, respectively. - -
cl_I binomial (uintL n, uintL k) -
- -n and k must be small integers >= 0. This function returns the -binomial coefficient -(n choose k) = n! / k! (n-k)! -for 0 <= k <= n, 0 else. -
- - - -

4.10 Functions on floating-point numbers

- -

-Recall that a floating-point number consists of a sign s, an -exponent e and a mantissa m. The value of the number is -(-1)^s * 2^e * m. - - -

-Each of the classes -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines the following operations. - - -

- -
type scale_float (const type& x, sintL delta) -
- -
type scale_float (const type& x, const cl_I& delta) -
-Returns x*2^delta. This is more efficient than an explicit multiplication -because it copies x and modifies the exponent. -
- -

-The following functions provide an abstract interface to the underlying -representation of floating-point numbers. - - -

- -
sintL float_exponent (const type& x) -
- -Returns the exponent e of x. -For x = 0.0, this is 0. For x non-zero, this is the unique -integer with 2^(e-1) <= abs(x) < 2^e. - -
sintL float_radix (const type& x) -
- -Returns the base of the floating-point representation. This is always 2. - -
type float_sign (const type& x) -
- -Returns the sign s of x as a float. The value is 1 for -x >= 0, -1 for x < 0. - -
uintL float_digits (const type& x) -
- -Returns the number of mantissa bits in the floating-point representation -of x, including the hidden bit. The value only depends on the type -of x, not on its value. - -
uintL float_precision (const type& x) -
- -Returns the number of significant mantissa bits in the floating-point -representation of x. Since denormalized numbers are not supported, -this is the same as float_digits(x) if x is non-zero, and -0 if x = 0. -
- -

-The complete internal representation of a float is encoded in the type - - - - - -decoded_float (or decoded_sfloat, decoded_ffloat, -decoded_dfloat, decoded_lfloat, respectively), defined by - -

-struct decoded_typefloat {
-        type mantissa; cl_I exponent; type sign;
-};
-
- -

-and returned by the function - - -

- -
decoded_typefloat decode_float (const type& x) -
- -For x non-zero, this returns (-1)^s, e, m with -x = (-1)^s * 2^e * m and 0.5 <= m < 1.0. For x = 0, -it returns (-1)^s=1, e=0, m=0. -e is the same as returned by the function float_exponent. -
- -

-A complete decoding in terms of integers is provided as type - - -

-struct cl_idecoded_float {
-        cl_I mantissa; cl_I exponent; cl_I sign;
-};
-
- -

-by the following function: - - -

- -
cl_idecoded_float integer_decode_float (const type& x) -
- -For x non-zero, this returns (-1)^s, e, m with -x = (-1)^s * 2^e * m and m an integer with float_digits(x) -bits. For x = 0, it returns (-1)^s=1, e=0, m=0. -WARNING: The exponent e is not the same as the one returned by -the functions decode_float and float_exponent. -
- -

-Some other function, implemented only for class cl_F: - - -

- -
cl_F float_sign (const cl_F& x, const cl_F& y) -
- -This returns a floating point number whose precision and absolute value -is that of y and whose sign is that of x. If x is -zero, it is treated as positive. Same for y. -
- - - -

4.11 Conversion functions

-

- - - - - -

4.11.1 Conversion to floating-point numbers

- -

-The type cl_float_format_t describes a floating-point format. - - - -

- -
cl_float_format_t cl_float_format (uintL n) -
- -Returns the smallest float format which guarantees at least n -decimal digits in the mantissa (after the decimal point). - -
cl_float_format_t cl_float_format (const cl_F& x) -
-Returns the floating point format of x. - -
cl_float_format_t default_float_format -
- -Global variable: the default float format used when converting rational numbers -to floats. -
- -

-To convert a real number to a float, each of the types -cl_R, cl_F, cl_I, cl_RA, -int, unsigned int, float, double -defines the following operations: - - -

- -
cl_F cl_float (const type&x, cl_float_format_t f) -
- -Returns x as a float of format f. -
cl_F cl_float (const type&x, const cl_F& y) -
-Returns x in the float format of y. -
cl_F cl_float (const type&x) -
-Returns x as a float of format default_float_format if -it is an exact number, or x itself if it is already a float. -
- -

-Of course, converting a number to a float can lose precision. - - -

-Every floating-point format has some characteristic numbers: - - -

- -
cl_F most_positive_float (cl_float_format_t f) -
- -Returns the largest (most positive) floating point number in float format f. - -
cl_F most_negative_float (cl_float_format_t f) -
- -Returns the smallest (most negative) floating point number in float format f. - -
cl_F least_positive_float (cl_float_format_t f) -
- -Returns the least positive floating point number (i.e. > 0 but closest to 0) -in float format f. - -
cl_F least_negative_float (cl_float_format_t f) -
- -Returns the least negative floating point number (i.e. < 0 but closest to 0) -in float format f. - -
cl_F float_epsilon (cl_float_format_t f) -
- -Returns the smallest floating point number e > 0 such that 1+e != 1. - -
cl_F float_negative_epsilon (cl_float_format_t f) -
- -Returns the smallest floating point number e > 0 such that 1-e != 1. -
- - - -

4.11.2 Conversion to rational numbers

- -

-Each of the classes cl_R, cl_RA, cl_F -defines the following operation: - - -

- -
cl_RA rational (const type& x) -
- -Returns the value of x as an exact number. If x is already -an exact number, this is x. If x is a floating-point number, -the value is a rational number whose denominator is a power of 2. -
- -

-In order to convert back, say, (cl_F)(cl_R)"1/3" to 1/3, there is -the function - - -

- -
cl_RA rationalize (const cl_R& x) -
- -If x is a floating-point number, it actually represents an interval -of real numbers, and this function returns the rational number with -smallest denominator (and smallest numerator, in magnitude) -which lies in this interval. -If x is already an exact number, this function returns x. -
- -

-If x is any float, one has - - - -

- - - -

4.12 Random number generators

- -

-A random generator is a machine which produces (pseudo-)random numbers. -The include file <cln/random.h> defines a class random_state -which contains the state of a random generator. If you make a copy -of the random number generator, the original one and the copy will produce -the same sequence of random numbers. - - -

-The following functions return (pseudo-)random numbers in different formats. -Calling one of these modifies the state of the random number generator in -a complicated but deterministic way. - - -

-The global variable - - - -

-random_state default_random_state
-
- -

-contains a default random number generator. It is used when the functions -below are called without random_state argument. - - -

- -
uint32 random32 (random_state& randomstate) -
-
uint32 random32 () -
- -Returns a random unsigned 32-bit number. All bits are equally random. - -
cl_I random_I (random_state& randomstate, const cl_I& n) -
-
cl_I random_I (const cl_I& n) -
- -n must be an integer > 0. This function returns a random integer x -in the range 0 <= x < n. - -
cl_F random_F (random_state& randomstate, const cl_F& n) -
-
cl_F random_F (const cl_F& n) -
- -n must be a float > 0. This function returns a random floating-point -number of the same format as n in the range 0 <= x < n. - -
cl_R random_R (random_state& randomstate, const cl_R& n) -
-
cl_R random_R (const cl_R& n) -
- -Behaves like random_I if n is an integer and like random_F -if n is a float. -
- - - -

4.13 Obfuscating operators

-

- - - -

-The modifying C/C++ operators +=, -=, *=, /=, -&=, |=, ^=, <<=, >>= -are not available by default because their -use tends to make programs unreadable. It is trivial to get away without -them. However, if you feel that you absolutely need these operators -to get happy, then add - -

-#define WANT_OBFUSCATING_OPERATORS
-
- -

- -to the beginning of your source files, before the inclusion of any CLN -include files. This flag will enable the following operators: - - -

-For the classes cl_N, cl_R, cl_RA, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF: - - -

- -
type& operator += (type&, const type&) -
- -
type& operator -= (type&, const type&) -
- -
type& operator *= (type&, const type&) -
- -
type& operator /= (type&, const type&) -
- -
- -

-For the class cl_I: - - -

- -
type& operator += (type&, const type&) -
-
type& operator -= (type&, const type&) -
-
type& operator *= (type&, const type&) -
-
type& operator &= (type&, const type&) -
- -
type& operator |= (type&, const type&) -
- -
type& operator ^= (type&, const type&) -
- -
type& operator <<= (type&, const type&) -
- -
type& operator >>= (type&, const type&) -
- -
- -

-For the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF: - - -

- -
type& operator ++ (type& x) -
- -The prefix operator ++x. - -
void operator ++ (type& x, int) -
-The postfix operator x++. - -
type& operator -- (type& x) -
- -The prefix operator --x. - -
void operator -- (type& x, int) -
-The postfix operator x--. -
- -

-Note that by using these obfuscating operators, you wouldn't gain efficiency: -In CLN `x += y;' is exactly the same as `x = x+y;', not more -efficient. - - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_5.html b/doc/cln_5.html deleted file mode 100644 index 42ea42d..0000000 --- a/doc/cln_5.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 5. Input/Output - - -Go to the first, previous, next, last section, table of contents. -


- - -

5. Input/Output

-

- - - - - -

5.1 Internal and printed representation

-

- - - -

-All computations deal with the internal representations of the numbers. - - -

-Every number has an external representation as a sequence of ASCII characters. -Several external representations may denote the same number, for example, -"20.0" and "20.000". - - -

-Converting an internal to an external representation is called "printing", - -converting an external to an internal representation is called "reading". - -In CLN, it is always true that conversion of an internal to an external -representation and then back to an internal representation will yield the -same internal representation. Symbolically: read(print(x)) == x. -This is called "print-read consistency". - - -

-Different types of numbers have different external representations (case -is insignificant): - - -

- -
Integers -
-External representation: sign{digit}+. The reader also accepts the -Common Lisp syntaxes sign{digit}+. with a trailing dot -for decimal integers -and the #nR, #b, #o, #x prefixes. - -
Rational numbers -
-External representation: sign{digit}+/{digit}+. -The #nR, #b, #o, #x prefixes are allowed -here as well. - -
Floating-point numbers -
-External representation: sign{digit}*exponent or -sign{digit}*.{digit}*exponent or -sign{digit}*.{digit}+. A precision specifier -of the form _prec may be appended. There must be at least -one digit in the non-exponent part. The exponent has the syntax -expmarker expsign {digit}+. -The exponent marker is - - -
    -
  • - -`s' for short-floats, -
  • - -`f' for single-floats, -
  • - -`d' for double-floats, -
  • - -`L' for long-floats, -
- -or `e', which denotes a default float format. The precision specifying -suffix has the syntax _prec where prec denotes the number of -valid mantissa digits (in decimal, excluding leading zeroes), cf. also -function `cl_float_format'. - -
Complex numbers -
-External representation: - -
    -
  • - -In algebraic notation: realpart+imagparti. Of course, -if imagpart is negative, its printed representation begins with -a `-', and the `+' between realpart and imagpart -may be omitted. Note that this notation cannot be used when the imagpart -is rational and the rational number's base is >18, because the `i' -is then read as a digit. -
  • - -In Common Lisp notation: #C(realpart imagpart). -
- -
- - - -

5.2 Input functions

- -

-Including <cln/io.h> defines a type cl_istream, which is -the type of the first argument to all input functions. cl_istream -is the same as std::istream&. - - -

-The variable - -

- -

-contains the standard input stream. - - -

-These are the simple input functions: - - -

- -
int freadchar (cl_istream stream) -
-Reads a character from stream. Returns cl_EOF (not a `char'!) -if the end of stream was encountered or an error occurred. - -
int funreadchar (cl_istream stream, int c) -
-Puts back c onto stream. c must be the result of the -last freadchar operation on stream. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines, in <cln/type_io.h>, the following input function: - - -

- -
cl_istream operator>> (cl_istream stream, type& result) -
-Reads a number from stream and stores it in the result. -
- -

-The most flexible input functions, defined in <cln/type_io.h>, -are the following: - - -

- -
cl_N read_complex (cl_istream stream, const cl_read_flags& flags) -
-
cl_R read_real (cl_istream stream, const cl_read_flags& flags) -
-
cl_F read_float (cl_istream stream, const cl_read_flags& flags) -
-
cl_RA read_rational (cl_istream stream, const cl_read_flags& flags) -
-
cl_I read_integer (cl_istream stream, const cl_read_flags& flags) -
-Reads a number from stream. The flags are parameters which -affect the input syntax. Whitespace before the number is silently skipped. - -
cl_N read_complex (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_R read_real (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_F read_float (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_RA read_rational (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-
cl_I read_integer (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse) -
-Reads a number from a string in memory. The flags are parameters which -affect the input syntax. The string starts at string and ends at -string_limit (exclusive limit). string_limit may also be -NULL, denoting the entire string, i.e. equivalent to -string_limit = string + strlen(string). If end_of_parse is -NULL, the string in memory must contain exactly one number and nothing -more, else a fatal error will be signalled. If end_of_parse -is not NULL, *end_of_parse will be assigned a pointer past -the last parsed character (i.e. string_limit if nothing came after -the number). Whitespace is not allowed. -
- -

-The structure cl_read_flags contains the following fields: - - -

- -
cl_read_syntax_t syntax -
-The possible results of the read operation. Possible values are -syntax_number, syntax_real, syntax_rational, -syntax_integer, syntax_float, syntax_sfloat, -syntax_ffloat, syntax_dfloat, syntax_lfloat. - -
cl_read_lsyntax_t lsyntax -
-Specifies the language-dependent syntax variant for the read operation. -Possible values are - -
- -
lsyntax_standard -
-accept standard algebraic notation only, no complex numbers, -
lsyntax_algebraic -
-accept the algebraic notation x+yi for complex numbers, -
lsyntax_commonlisp -
-accept the #b, #o, #x syntaxes for binary, octal, -hexadecimal numbers, -#baseR for rational numbers in a given base, -#c(realpart imagpart) for complex numbers, -
lsyntax_all -
-accept all of these extensions. -
- -
unsigned int rational_base -
-The base in which rational numbers are read. - -
cl_float_format_t float_flags.default_float_format -
-The float format used when reading floats with exponent marker `e'. - -
cl_float_format_t float_flags.default_lfloat_format -
-The float format used when reading floats with exponent marker `l'. - -
cl_boolean float_flags.mantissa_dependent_float_format -
-When this flag is true, floats specified with more digits than corresponding -to the exponent marker they contain, but without _nnn suffix, will get a -precision corresponding to their number of significant digits. -
- - - -

5.3 Output functions

- -

-Including <cln/io.h> defines a type cl_ostream, which is -the type of the first argument to all output functions. cl_ostream -is the same as std::ostream&. - - -

-The variable - -

- -

-contains the standard output stream. - - -

-The variable - -

- -

-contains the standard error output stream. - - -

-These are the simple output functions: - - -

- -
void fprintchar (cl_ostream stream, char c) -
-Prints the character x literally on the stream. - -
void fprint (cl_ostream stream, const char * string) -
-Prints the string literally on the stream. - -
void fprintdecimal (cl_ostream stream, int x) -
-
void fprintdecimal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in decimal on the stream. - -
void fprintbinary (cl_ostream stream, const cl_I& x) -
-Prints the integer x in binary (base 2, without prefix) -on the stream. - -
void fprintoctal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in octal (base 8, without prefix) -on the stream. - -
void fprinthexadecimal (cl_ostream stream, const cl_I& x) -
-Prints the integer x in hexadecimal (base 16, without prefix) -on the stream. -
- -

-Each of the classes cl_N, cl_R, cl_RA, cl_I, -cl_F, cl_SF, cl_FF, cl_DF, cl_LF -defines, in <cln/type_io.h>, the following output functions: - - -

- -
void fprint (cl_ostream stream, const type& x) -
-
cl_ostream operator<< (cl_ostream stream, const type& x) -
-Prints the number x on the stream. The output may depend -on the global printer settings in the variable default_print_flags. -The ostream flags and settings (flags, width and locale) are -ignored. -
- -

-The most flexible output function, defined in <cln/type_io.h>, -are the following: - -

-void print_complex  (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_N& z);
-void print_real     (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_R& z);
-void print_float    (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_F& z);
-void print_rational (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_RA& z);
-void print_integer  (cl_ostream stream, const cl_print_flags& flags,
-                     const cl_I& z);
-
- -

-Prints the number x on the stream. The flags are -parameters which affect the output. - - -

-The structure type cl_print_flags contains the following fields: - - -

- -
unsigned int rational_base -
-The base in which rational numbers are printed. Default is 10. - -
cl_boolean rational_readably -
-If this flag is true, rational numbers are printed with radix specifiers in -Common Lisp syntax (#nR or #b or #o or #x -prefixes, trailing dot). Default is false. - -
cl_boolean float_readably -
-If this flag is true, type specific exponent markers have precedence over 'E'. -Default is false. - -
cl_float_format_t default_float_format -
-Floating point numbers of this format will be printed using the 'E' exponent -marker. Default is cl_float_format_ffloat. - -
cl_boolean complex_readably -
-If this flag is true, complex numbers will be printed using the Common Lisp -syntax #C(realpart imagpart). Default is false. - -
cl_string univpoly_varname -
-Univariate polynomials with no explicit indeterminate name will be printed -using this variable name. Default is "x". -
- -

-The global variable default_print_flags contains the default values, -used by the function fprint. - - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_6.html b/doc/cln_6.html deleted file mode 100644 index efab2fe..0000000 --- a/doc/cln_6.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 6. Rings - - -Go to the first, previous, next, last section, table of contents. -


- - -

6. Rings

- -

-CLN has a class of abstract rings. - - - -

-                         Ring
-                       cl_ring
-                     <cln/ring.h>
-
- -

-Rings can be compared for equality: - - -

- -
bool operator== (const cl_ring&, const cl_ring&) -
-
bool operator!= (const cl_ring&, const cl_ring&) -
-These compare two rings for equality. -
- -

-Given a ring R, the following members can be used. - - -

- -
void R->fprint (cl_ostream stream, const cl_ring_element& x) -
- -
cl_boolean R->equal (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->zero () -
- -
cl_boolean R->zerop (const cl_ring_element& x) -
- -
cl_ring_element R->plus (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->minus (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->uminus (const cl_ring_element& x) -
- -
cl_ring_element R->one () -
- -
cl_ring_element R->canonhom (const cl_I& x) -
- -
cl_ring_element R->mul (const cl_ring_element& x, const cl_ring_element& y) -
- -
cl_ring_element R->square (const cl_ring_element& x) -
- -
cl_ring_element R->expt_pos (const cl_ring_element& x, const cl_I& y) -
- -
- -

-The following rings are built-in. - - -

- -
cl_null_ring cl_0_ring -
-The null ring, containing only zero. - -
cl_complex_ring cl_C_ring -
-The ring of complex numbers. This corresponds to the type cl_N. - -
cl_real_ring cl_R_ring -
-The ring of real numbers. This corresponds to the type cl_R. - -
cl_rational_ring cl_RA_ring -
-The ring of rational numbers. This corresponds to the type cl_RA. - -
cl_integer_ring cl_I_ring -
-The ring of integers. This corresponds to the type cl_I. -
- -

-Type tests can be performed for any of cl_C_ring, cl_R_ring, -cl_RA_ring, cl_I_ring: - - -

- -
cl_boolean instanceof (const cl_number& x, const cl_number_ring& R) -
- -Tests whether the given number is an element of the number ring R. -
- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_7.html b/doc/cln_7.html deleted file mode 100644 index 50d7716..0000000 --- a/doc/cln_7.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 7. Modular integers - - -Go to the first, previous, next, last section, table of contents. -


- - -

7. Modular integers

-

- - - - - -

7.1 Modular integer rings

-

- - - -

-CLN implements modular integers, i.e. integers modulo a fixed integer N. -The modulus is explicitly part of every modular integer. CLN doesn't -allow you to (accidentally) mix elements of different modular rings, -e.g. (3 mod 4) + (2 mod 5) will result in a runtime error. -(Ideally one would imagine a generic data type cl_MI(N), but C++ -doesn't have generic types. So one has to live with runtime checks.) - - -

-The class of modular integer rings is - - - -

-                         Ring
-                       cl_ring
-                     <cln/ring.h>
-                          |
-                          |
-                 Modular integer ring
-                    cl_modint_ring
-                  <cln/modinteger.h>
-
- -

- - - -

-and the class of all modular integers (elements of modular integer rings) is - - - -

-                    Modular integer
-                         cl_MI
-                   <cln/modinteger.h>
-
- -

-Modular integer rings are constructed using the function - - -

- -
cl_modint_ring find_modint_ring (const cl_I& N) -
- -This function returns the modular ring `Z/NZ'. It takes care -of finding out about special cases of N, like powers of two -and odd numbers for which Montgomery multiplication will be a win, - -and precomputes any necessary auxiliary data for computing modulo N. -There is a cache table of rings, indexed by N (or, more precisely, -by abs(N)). This ensures that the precomputation costs are reduced -to a minimum. -
- -

-Modular integer rings can be compared for equality: - - -

- -
bool operator== (const cl_modint_ring&, const cl_modint_ring&) -
- -
bool operator!= (const cl_modint_ring&, const cl_modint_ring&) -
- -These compare two modular integer rings for equality. Two different calls -to find_modint_ring with the same argument necessarily return the -same ring because it is memoized in the cache table. -
- - - -

7.2 Functions on modular integers

- -

-Given a modular integer ring R, the following members can be used. - - -

- -
cl_I R->modulus -
- -This is the ring's modulus, normalized to be nonnegative: abs(N). - -
cl_MI R->zero() -
- -This returns 0 mod N. - -
cl_MI R->one() -
- -This returns 1 mod N. - -
cl_MI R->canonhom (const cl_I& x) -
- -This returns x mod N. - -
cl_I R->retract (const cl_MI& x) -
- -This is a partial inverse function to R->canonhom. It returns the -standard representative (>=0, <N) of x. - -
cl_MI R->random(random_state& randomstate) -
-
cl_MI R->random() -
- -This returns a random integer modulo N. -
- -

-The following operations are defined on modular integers. - - -

- -
cl_modint_ring x.ring () -
- -Returns the ring to which the modular integer x belongs. - -
cl_MI operator+ (const cl_MI&, const cl_MI&) -
- -Returns the sum of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI operator- (const cl_MI&, const cl_MI&) -
- -Returns the difference of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI operator- (const cl_MI&) -
-Returns the negative of a modular integer. - -
cl_MI operator* (const cl_MI&, const cl_MI&) -
- -Returns the product of two modular integers. One of the arguments may also -be a plain integer. - -
cl_MI square (const cl_MI&) -
- -Returns the square of a modular integer. - -
cl_MI recip (const cl_MI& x) -
- -Returns the reciprocal x^-1 of a modular integer x. x -must be coprime to the modulus, otherwise an error message is issued. - -
cl_MI div (const cl_MI& x, const cl_MI& y) -
- -Returns the quotient x*y^-1 of two modular integers x, y. -y must be coprime to the modulus, otherwise an error message is issued. - -
cl_MI expt_pos (const cl_MI& x, const cl_I& y) -
- -y must be > 0. Returns x^y. - -
cl_MI expt (const cl_MI& x, const cl_I& y) -
- -Returns x^y. If y is negative, x must be coprime to the -modulus, else an error message is issued. - -
cl_MI operator<< (const cl_MI& x, const cl_I& y) -
- -Returns x*2^y. - -
cl_MI operator>> (const cl_MI& x, const cl_I& y) -
- -Returns x*2^-y. When y is positive, the modulus must be odd, -or an error message is issued. - -
bool operator== (const cl_MI&, const cl_MI&) -
- -
bool operator!= (const cl_MI&, const cl_MI&) -
- -Compares two modular integers, belonging to the same modular integer ring, -for equality. - -
cl_boolean zerop (const cl_MI& x) -
- -Returns true if x is 0 mod N. -
- -

-The following output functions are defined (see also the chapter on -input/output). - - -

- -
void fprint (cl_ostream stream, const cl_MI& x) -
- -
cl_ostream operator<< (cl_ostream stream, const cl_MI& x) -
- -Prints the modular integer x on the stream. The output may depend -on the global printer settings in the variable default_print_flags. -
- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_8.html b/doc/cln_8.html deleted file mode 100644 index 22c6343..0000000 --- a/doc/cln_8.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 8. Symbolic data types - - -Go to the first, previous, next, last section, table of contents. -


- - -

8. Symbolic data types

-

- - - -

-CLN implements two symbolic (non-numeric) data types: strings and symbols. - - - - -

8.1 Strings

-

- - - - -

-The class - - - -

-                      String
-                     cl_string
-                   <cln/string.h>
-
- -

-implements immutable strings. - - -

-Strings are constructed through the following constructors: - - -

- -
cl_string (const char * s) -
-Returns an immutable copy of the (zero-terminated) C string s. - -
cl_string (const char * ptr, unsigned long len) -
-Returns an immutable copy of the len characters at -ptr[0], ..., ptr[len-1]. NUL characters are allowed. -
- -

-The following functions are available on strings: - - -

- -
operator = -
-Assignment from cl_string and const char *. - -
s.length() -
- -
strlen(s) -
- -Returns the length of the string s. - -
s[i] -
- -Returns the ith character of the string s. -i must be in the range 0 <= i < s.length(). - -
bool equal (const cl_string& s1, const cl_string& s2) -
- -Compares two strings for equality. One of the arguments may also be a -plain const char *. -
- - - -

8.2 Symbols

-

- - - - -

-Symbols are uniquified strings: all symbols with the same name are shared. -This means that comparison of two symbols is fast (effectively just a pointer -comparison), whereas comparison of two strings must in the worst case walk -both strings until their end. -Symbols are used, for example, as tags for properties, as names of variables -in polynomial rings, etc. - - -

-Symbols are constructed through the following constructor: - - -

- -
cl_symbol (const cl_string& s) -
-Looks up or creates a new symbol with a given name. -
- -

-The following operations are available on symbols: - - -

- -
cl_string (const cl_symbol& sym) -
-Conversion to cl_string: Returns the string which names the symbol -sym. - -
bool equal (const cl_symbol& sym1, const cl_symbol& sym2) -
- -Compares two symbols for equality. This is very fast. -
- -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_9.html b/doc/cln_9.html deleted file mode 100644 index 4e5ae21..0000000 --- a/doc/cln_9.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - -CLN, a Class Library for Numbers - 9. Univariate polynomials - - -Go to the first, previous, next, last section, table of contents. -


- - -

9. Univariate polynomials

-

- - - - - - -

9.1 Univariate polynomial rings

- -

-CLN implements univariate polynomials (polynomials in one variable) over an -arbitrary ring. The indeterminate variable may be either unnamed (and will be -printed according to default_print_flags.univpoly_varname, which -defaults to `x') or carry a given name. The base ring and the -indeterminate are explicitly part of every polynomial. CLN doesn't allow you to -(accidentally) mix elements of different polynomial rings, e.g. -(a^2+1) * (b^3-1) will result in a runtime error. (Ideally this should -return a multivariate polynomial, but they are not yet implemented in CLN.) - - -

-The classes of univariate polynomial rings are - - - -

-                           Ring
-                         cl_ring
-                       <cln/ring.h>
-                            |
-                            |
-                 Univariate polynomial ring
-                      cl_univpoly_ring
-                      <cln/univpoly.h>
-                            |
-           +----------------+-------------------+
-           |                |                   |
- Complex polynomial ring    |    Modular integer polynomial ring
- cl_univpoly_complex_ring   |        cl_univpoly_modint_ring
- <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
-                            |
-           +----------------+
-           |                |
-   Real polynomial ring     |
-   cl_univpoly_real_ring    |
-   <cln/univpoly_real.h>    |
-                            |
-           +----------------+
-           |                |
- Rational polynomial ring   |
- cl_univpoly_rational_ring  |
- <cln/univpoly_rational.h>  |
-                            |
-           +----------------+
-           |
- Integer polynomial ring
- cl_univpoly_integer_ring
- <cln/univpoly_integer.h>
-
- -

-and the corresponding classes of univariate polynomials are - - - -

-                   Univariate polynomial
-                          cl_UP
-                      <cln/univpoly.h>
-                            |
-           +----------------+-------------------+
-           |                |                   |
-   Complex polynomial       |      Modular integer polynomial
-        cl_UP_N             |                cl_UP_MI
- <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
-                            |
-           +----------------+
-           |                |
-     Real polynomial        |
-        cl_UP_R             |
-  <cln/univpoly_real.h>     |
-                            |
-           +----------------+
-           |                |
-   Rational polynomial      |
-        cl_UP_RA            |
- <cln/univpoly_rational.h>  |
-                            |
-           +----------------+
-           |
-   Integer polynomial
-        cl_UP_I
- <cln/univpoly_integer.h>
-
- -

-Univariate polynomial rings are constructed using the functions - - -

- -
cl_univpoly_ring find_univpoly_ring (const cl_ring& R) -
-
cl_univpoly_ring find_univpoly_ring (const cl_ring& R, const cl_symbol& varname) -
-This function returns the polynomial ring `R[X]', unnamed or named. -R may be an arbitrary ring. This function takes care of finding out -about special cases of R, such as the rings of complex numbers, -real numbers, rational numbers, integers, or modular integer rings. -There is a cache table of rings, indexed by R and varname. -This ensures that two calls of this function with the same arguments will -return the same polynomial ring. - -
cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R) -
- -
cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R, const cl_symbol& varname) -
-
cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R) -
-
cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R, const cl_symbol& varname) -
-
cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R) -
-
cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R, const cl_symbol& varname) -
-
cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R) -
-
cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R, const cl_symbol& varname) -
-
cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R) -
-
cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R, const cl_symbol& varname) -
-These functions are equivalent to the general find_univpoly_ring, -only the return type is more specific, according to the base ring's type. -
- - - -

9.2 Functions on univariate polynomials

- -

-Given a univariate polynomial ring R, the following members can be used. - - -

- -
cl_ring R->basering() -
- -This returns the base ring, as passed to `find_univpoly_ring'. - -
cl_UP R->zero() -
- -This returns 0 in R, a polynomial of degree -1. - -
cl_UP R->one() -
- -This returns 1 in R, a polynomial of degree <= 0. - -
cl_UP R->canonhom (const cl_I& x) -
- -This returns x in R, a polynomial of degree <= 0. - -
cl_UP R->monomial (const cl_ring_element& x, uintL e) -
- -This returns a sparse polynomial: x * X^e, where X is the -indeterminate. - -
cl_UP R->create (sintL degree) -
- -Creates a new polynomial with a given degree. The zero polynomial has degree --1. After creating the polynomial, you should put in the coefficients, -using the set_coeff member function, and then call the finalize -member function. -
- -

-The following are the only destructive operations on univariate polynomials. - - -

- -
void set_coeff (cl_UP& x, uintL index, const cl_ring_element& y) -
- -This changes the coefficient of X^index in x to be y. -After changing a polynomial and before applying any "normal" operation on it, -you should call its finalize member function. - -
void finalize (cl_UP& x) -
- -This function marks the endpoint of destructive modifications of a polynomial. -It normalizes the internal representation so that subsequent computations have -less overhead. Doing normal computations on unnormalized polynomials may -produce wrong results or crash the program. -
- -

-The following operations are defined on univariate polynomials. - - -

- -
cl_univpoly_ring x.ring () -
- -Returns the ring to which the univariate polynomial x belongs. - -
cl_UP operator+ (const cl_UP&, const cl_UP&) -
- -Returns the sum of two univariate polynomials. - -
cl_UP operator- (const cl_UP&, const cl_UP&) -
- -Returns the difference of two univariate polynomials. - -
cl_UP operator- (const cl_UP&) -
-Returns the negative of a univariate polynomial. - -
cl_UP operator* (const cl_UP&, const cl_UP&) -
- -Returns the product of two univariate polynomials. One of the arguments may -also be a plain integer or an element of the base ring. - -
cl_UP square (const cl_UP&) -
- -Returns the square of a univariate polynomial. - -
cl_UP expt_pos (const cl_UP& x, const cl_I& y) -
- -y must be > 0. Returns x^y. - -
bool operator== (const cl_UP&, const cl_UP&) -
- -
bool operator!= (const cl_UP&, const cl_UP&) -
- -Compares two univariate polynomials, belonging to the same univariate -polynomial ring, for equality. - -
cl_boolean zerop (const cl_UP& x) -
- -Returns true if x is 0 in R. - -
sintL degree (const cl_UP& x) -
- -Returns the degree of the polynomial. The zero polynomial has degree -1. - -
cl_ring_element coeff (const cl_UP& x, uintL index) -
- -Returns the coefficient of X^index in the polynomial x. - -
cl_ring_element x (const cl_ring_element& y) -
- -Evaluation: If x is a polynomial and y belongs to the base ring, -then `x(y)' returns the value of the substitution of y into -x. - -
cl_UP deriv (const cl_UP& x) -
- -Returns the derivative of the polynomial x with respect to the -indeterminate X. -
- -

-The following output functions are defined (see also the chapter on -input/output). - - -

- -
void fprint (cl_ostream stream, const cl_UP& x) -
- -
cl_ostream operator<< (cl_ostream stream, const cl_UP& x) -
- -Prints the univariate polynomial x on the stream. The output may -depend on the global printer settings in the variable -default_print_flags. -
- - - -

9.3 Special polynomials

- -

-The following functions return special polynomials. - - -

- -
cl_UP_I tschebychev (sintL n) -
- - -Returns the n-th Chebyshev polynomial (n >= 0). - -
cl_UP_I hermite (sintL n) -
- - -Returns the n-th Hermite polynomial (n >= 0). - -
cl_UP_RA legendre (sintL n) -
- - -Returns the n-th Legendre polynomial (n >= 0). - -
cl_UP_I laguerre (sintL n) -
- - -Returns the n-th Laguerre polynomial (n >= 0). -
- -

-Information how to derive the differential equation satisfied by each -of these polynomials from their definition can be found in the -doc/polynomial/ directory. - - -


-Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/cln_toc.html b/doc/cln_toc.html deleted file mode 100644 index 8bd5aca..0000000 --- a/doc/cln_toc.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - -CLN, a Class Library for Numbers - Table of Contents - - -

CLN, a Class Library for Numbers

-
by Bruno Haible
-

-


-

-


-This document was generated on 28 August 2000 using -texi2html 1.56k. - -