<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers</TITLE>
</HEAD>
<DT><CODE>cl_boolean instanceof (const cl_number& x, const cl_number_ring& R)</CODE>
<DD>
+<A NAME="IDX240"></A>
Tests whether the given number is an element of the number ring R.
</DL>
<H1><A NAME="SEC49" HREF="cln.html#TOC49">7. Modular integers</A></H1>
<P>
-<A NAME="IDX240"></A>
+<A NAME="IDX241"></A>
<H2><A NAME="SEC50" HREF="cln.html#TOC50">7.1 Modular integer rings</A></H2>
<P>
-<A NAME="IDX241"></A>
+<A NAME="IDX242"></A>
<P>
</PRE>
<P>
-<A NAME="IDX242"></A>
+<A NAME="IDX243"></A>
<P>
<DT><CODE>cl_modint_ring cl_find_modint_ring (const cl_I& N)</CODE>
<DD>
-<A NAME="IDX243"></A>
+<A NAME="IDX244"></A>
This function returns the modular ring <SAMP>`Z/NZ'</SAMP>. It takes care
of finding out about special cases of <CODE>N</CODE>, like powers of two
and odd numbers for which Montgomery multiplication will be a win,
-<A NAME="IDX244"></A>
+<A NAME="IDX245"></A>
and precomputes any necessary auxiliary data for computing modulo <CODE>N</CODE>.
There is a cache table of rings, indexed by <CODE>N</CODE> (or, more precisely,
by <CODE>abs(N)</CODE>). This ensures that the precomputation costs are reduced
<DT><CODE>bool operator== (const cl_modint_ring&, const cl_modint_ring&)</CODE>
<DD>
-<A NAME="IDX245"></A>
+<A NAME="IDX246"></A>
<DT><CODE>bool operator!= (const cl_modint_ring&, const cl_modint_ring&)</CODE>
<DD>
-<A NAME="IDX246"></A>
+<A NAME="IDX247"></A>
These compare two modular integer rings for equality. Two different calls
to <CODE>cl_find_modint_ring</CODE> with the same argument necessarily return the
same ring because it is memoized in the cache table.
<DT><CODE>cl_I R->modulus</CODE>
<DD>
-<A NAME="IDX247"></A>
+<A NAME="IDX248"></A>
This is the ring's modulus, normalized to be nonnegative: <CODE>abs(N)</CODE>.
<DT><CODE>cl_MI R->zero()</CODE>
<DD>
-<A NAME="IDX248"></A>
+<A NAME="IDX249"></A>
This returns <CODE>0 mod N</CODE>.
<DT><CODE>cl_MI R->one()</CODE>
<DD>
-<A NAME="IDX249"></A>
+<A NAME="IDX250"></A>
This returns <CODE>1 mod N</CODE>.
<DT><CODE>cl_MI R->canonhom (const cl_I& x)</CODE>
<DD>
-<A NAME="IDX250"></A>
+<A NAME="IDX251"></A>
This returns <CODE>x mod N</CODE>.
<DT><CODE>cl_I R->retract (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX251"></A>
+<A NAME="IDX252"></A>
This is a partial inverse function to <CODE>R->canonhom</CODE>. It returns the
standard representative (<CODE>>=0</CODE>, <CODE><N</CODE>) of <CODE>x</CODE>.
<DD>
<DT><CODE>cl_MI R->random()</CODE>
<DD>
-<A NAME="IDX252"></A>
+<A NAME="IDX253"></A>
This returns a random integer modulo <CODE>N</CODE>.
</DL>
<DT><CODE>cl_modint_ring x.ring ()</CODE>
<DD>
-<A NAME="IDX253"></A>
+<A NAME="IDX254"></A>
Returns the ring to which the modular integer <CODE>x</CODE> belongs.
<DT><CODE>cl_MI operator+ (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX254"></A>
-Returns the sum of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX255"></A>
+Returns the sum of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI operator- (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX255"></A>
-Returns the difference of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX256"></A>
+Returns the difference of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI operator- (const cl_MI&)</CODE>
<DD>
<DT><CODE>cl_MI operator* (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX256"></A>
-Returns the product of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX257"></A>
+Returns the product of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI square (const cl_MI&)</CODE>
<DD>
-<A NAME="IDX257"></A>
+<A NAME="IDX258"></A>
Returns the square of a modular integer.
<DT><CODE>cl_MI recip (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX258"></A>
+<A NAME="IDX259"></A>
Returns the reciprocal <CODE>x^-1</CODE> of a modular integer <CODE>x</CODE>. <CODE>x</CODE>
must be coprime to the modulus, otherwise an error message is issued.
<DT><CODE>cl_MI div (const cl_MI& x, const cl_MI& y)</CODE>
<DD>
-<A NAME="IDX259"></A>
+<A NAME="IDX260"></A>
Returns the quotient <CODE>x*y^-1</CODE> of two modular integers <CODE>x</CODE>, <CODE>y</CODE>.
<CODE>y</CODE> must be coprime to the modulus, otherwise an error message is issued.
<DT><CODE>cl_MI expt_pos (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX260"></A>
+<A NAME="IDX261"></A>
<CODE>y</CODE> must be > 0. Returns <CODE>x^y</CODE>.
<DT><CODE>cl_MI expt (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX261"></A>
+<A NAME="IDX262"></A>
Returns <CODE>x^y</CODE>. If <CODE>y</CODE> is negative, <CODE>x</CODE> must be coprime to the
modulus, else an error message is issued.
<DT><CODE>cl_MI operator<< (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX262"></A>
+<A NAME="IDX263"></A>
Returns <CODE>x*2^y</CODE>.
<DT><CODE>cl_MI operator>> (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX263"></A>
+<A NAME="IDX264"></A>
Returns <CODE>x*2^-y</CODE>. When <CODE>y</CODE> is positive, the modulus must be odd,
or an error message is issued.
<DT><CODE>bool operator== (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX264"></A>
+<A NAME="IDX265"></A>
<DT><CODE>bool operator!= (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX265"></A>
+<A NAME="IDX266"></A>
Compares two modular integers, belonging to the same modular integer ring,
for equality.
<DT><CODE>cl_boolean zerop (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX266"></A>
+<A NAME="IDX267"></A>
Returns true if <CODE>x</CODE> is <CODE>0 mod N</CODE>.
</DL>
<DT><CODE>void fprint (cl_ostream stream, const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX267"></A>
+<A NAME="IDX268"></A>
<DT><CODE>cl_ostream operator<< (cl_ostream stream, const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX268"></A>
+<A NAME="IDX269"></A>
Prints the modular integer <CODE>x</CODE> on the <CODE>stream</CODE>. The output may depend
on the global printer settings in the variable <CODE>cl_default_print_flags</CODE>.
</DL>
<H1><A NAME="SEC52" HREF="cln.html#TOC52">8. Symbolic data types</A></H1>
<P>
-<A NAME="IDX269"></A>
+<A NAME="IDX270"></A>
<P>
<H2><A NAME="SEC53" HREF="cln.html#TOC53">8.1 Strings</A></H2>
<P>
-<A NAME="IDX270"></A>
+<A NAME="IDX271"></A>
<P>
<DT><CODE>cl_string (const char * s)</CODE>
<DD>
-<A NAME="IDX271"></A>
+<A NAME="IDX272"></A>
Returns an immutable copy of the (zero-terminated) C string <CODE>s</CODE>.
<DT><CODE>cl_string (const char * ptr, unsigned long len)</CODE>
<DT><CODE>s.length()</CODE>
<DD>
-<A NAME="IDX272"></A>
+<A NAME="IDX273"></A>
<DT><CODE>strlen(s)</CODE>
<DD>
-<A NAME="IDX273"></A>
+<A NAME="IDX274"></A>
Returns the length of the string <CODE>s</CODE>.
<DT><CODE>s[i]</CODE>
<DD>
-<A NAME="IDX274"></A>
+<A NAME="IDX275"></A>
Returns the <CODE>i</CODE>th character of the string <CODE>s</CODE>.
<CODE>i</CODE> must be in the range <CODE>0 <= i < s.length()</CODE>.
<DT><CODE>bool equal (const cl_string& s1, const cl_string& s2)</CODE>
<DD>
-<A NAME="IDX275"></A>
+<A NAME="IDX276"></A>
Compares two strings for equality. One of the arguments may also be a
plain <CODE>const char *</CODE>.
</DL>
<H2><A NAME="SEC54" HREF="cln.html#TOC54">8.2 Symbols</A></H2>
<P>
-<A NAME="IDX276"></A>
+<A NAME="IDX277"></A>
<P>
<DT><CODE>cl_symbol (const cl_string& s)</CODE>
<DD>
-<A NAME="IDX277"></A>
+<A NAME="IDX278"></A>
Looks up or creates a new symbol with a given name.
</DL>
<DT><CODE>bool equal (const cl_symbol& sym1, const cl_symbol& sym2)</CODE>
<DD>
-<A NAME="IDX278"></A>
+<A NAME="IDX279"></A>
Compares two symbols for equality. This is very fast.
</DL>
<H1><A NAME="SEC55" HREF="cln.html#TOC55">9. Univariate polynomials</A></H1>
<P>
-<A NAME="IDX279"></A>
<A NAME="IDX280"></A>
+<A NAME="IDX281"></A>
<DT><CODE>cl_univpoly_complex_ring cl_find_univpoly_ring (const cl_complex_ring& R)</CODE>
<DD>
-<A NAME="IDX281"></A>
+<A NAME="IDX282"></A>
<DT><CODE>cl_univpoly_complex_ring cl_find_univpoly_ring (const cl_complex_ring& R, const cl_symbol& varname)</CODE>
<DD>
<DT><CODE>cl_univpoly_real_ring cl_find_univpoly_ring (const cl_real_ring& R)</CODE>
<DT><CODE>cl_ring R->basering()</CODE>
<DD>
-<A NAME="IDX282"></A>
+<A NAME="IDX283"></A>
This returns the base ring, as passed to <SAMP>`cl_find_univpoly_ring'</SAMP>.
<DT><CODE>cl_UP R->zero()</CODE>
<DD>
-<A NAME="IDX283"></A>
+<A NAME="IDX284"></A>
This returns <CODE>0 in R</CODE>, a polynomial of degree -1.
<DT><CODE>cl_UP R->one()</CODE>
<DD>
-<A NAME="IDX284"></A>
+<A NAME="IDX285"></A>
This returns <CODE>1 in R</CODE>, a polynomial of degree <= 0.
<DT><CODE>cl_UP R->canonhom (const cl_I& x)</CODE>
<DD>
-<A NAME="IDX285"></A>
+<A NAME="IDX286"></A>
This returns <CODE>x in R</CODE>, a polynomial of degree <= 0.
<DT><CODE>cl_UP R->monomial (const cl_ring_element& x, uintL e)</CODE>
<DD>
-<A NAME="IDX286"></A>
+<A NAME="IDX287"></A>
This returns a sparse polynomial: <CODE>x * X^e</CODE>, where <CODE>X</CODE> is the
indeterminate.
<DT><CODE>cl_UP R->create (sintL degree)</CODE>
<DD>
-<A NAME="IDX287"></A>
+<A NAME="IDX288"></A>
Creates a new polynomial with a given degree. The zero polynomial has degree
<CODE>-1</CODE>. After creating the polynomial, you should put in the coefficients,
using the <CODE>set_coeff</CODE> member function, and then call the <CODE>finalize</CODE>
<DT><CODE>void set_coeff (cl_UP& x, uintL index, const cl_ring_element& y)</CODE>
<DD>
-<A NAME="IDX288"></A>
+<A NAME="IDX289"></A>
This changes the coefficient of <CODE>X^index</CODE> in <CODE>x</CODE> to be <CODE>y</CODE>.
After changing a polynomial and before applying any "normal" operation on it,
you should call its <CODE>finalize</CODE> member function.
<DT><CODE>void finalize (cl_UP& x)</CODE>
<DD>
-<A NAME="IDX289"></A>
+<A NAME="IDX290"></A>
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
<DT><CODE>cl_univpoly_ring x.ring ()</CODE>
<DD>
-<A NAME="IDX290"></A>
+<A NAME="IDX291"></A>
Returns the ring to which the univariate polynomial <CODE>x</CODE> belongs.
<DT><CODE>cl_UP operator+ (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX291"></A>
+<A NAME="IDX292"></A>
Returns the sum of two univariate polynomials.
<DT><CODE>cl_UP operator- (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX292"></A>
+<A NAME="IDX293"></A>
Returns the difference of two univariate polynomials.
<DT><CODE>cl_UP operator- (const cl_UP&)</CODE>
<DT><CODE>cl_UP operator* (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX293"></A>
+<A NAME="IDX294"></A>
Returns the product of two univariate polynomials. One of the arguments may
also be a plain integer or an element of the base ring.
<DT><CODE>cl_UP square (const cl_UP&)</CODE>
<DD>
-<A NAME="IDX294"></A>
+<A NAME="IDX295"></A>
Returns the square of a univariate polynomial.
<DT><CODE>cl_UP expt_pos (const cl_UP& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX295"></A>
+<A NAME="IDX296"></A>
<CODE>y</CODE> must be > 0. Returns <CODE>x^y</CODE>.
<DT><CODE>bool operator== (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX296"></A>
+<A NAME="IDX297"></A>
<DT><CODE>bool operator!= (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX297"></A>
+<A NAME="IDX298"></A>
Compares two univariate polynomials, belonging to the same univariate
polynomial ring, for equality.
<DT><CODE>cl_boolean zerop (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX298"></A>
+<A NAME="IDX299"></A>
Returns true if <CODE>x</CODE> is <CODE>0 in R</CODE>.
<DT><CODE>sintL degree (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX299"></A>
+<A NAME="IDX300"></A>
Returns the degree of the polynomial. The zero polynomial has degree <CODE>-1</CODE>.
<DT><CODE>cl_ring_element coeff (const cl_UP& x, uintL index)</CODE>
<DD>
-<A NAME="IDX300"></A>
+<A NAME="IDX301"></A>
Returns the coefficient of <CODE>X^index</CODE> in the polynomial <CODE>x</CODE>.
<DT><CODE>cl_ring_element x (const cl_ring_element& y)</CODE>
<DD>
-<A NAME="IDX301"></A>
+<A NAME="IDX302"></A>
Evaluation: If <CODE>x</CODE> is a polynomial and <CODE>y</CODE> belongs to the base ring,
then <SAMP>`x(y)'</SAMP> returns the value of the substitution of <CODE>y</CODE> into
<CODE>x</CODE>.
<DT><CODE>cl_UP deriv (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX302"></A>
+<A NAME="IDX303"></A>
Returns the derivative of the polynomial <CODE>x</CODE> with respect to the
indeterminate <CODE>X</CODE>.
</DL>
<DT><CODE>void fprint (cl_ostream stream, const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX303"></A>
+<A NAME="IDX304"></A>
<DT><CODE>cl_ostream operator<< (cl_ostream stream, const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX304"></A>
+<A NAME="IDX305"></A>
Prints the univariate polynomial <CODE>x</CODE> on the <CODE>stream</CODE>. The output may
depend on the global printer settings in the variable
<CODE>cl_default_print_flags</CODE>.
<DT><CODE>cl_UP_I cl_tschebychev (sintL n)</CODE>
<DD>
-<A NAME="IDX305"></A>
<A NAME="IDX306"></A>
+<A NAME="IDX307"></A>
Returns the n-th Tchebychev polynomial (n >= 0).
<DT><CODE>cl_UP_I cl_hermite (sintL n)</CODE>
<DD>
-<A NAME="IDX307"></A>
<A NAME="IDX308"></A>
+<A NAME="IDX309"></A>
Returns the n-th Hermite polynomial (n >= 0).
<DT><CODE>cl_UP_RA cl_legendre (sintL n)</CODE>
<DD>
-<A NAME="IDX309"></A>
<A NAME="IDX310"></A>
+<A NAME="IDX311"></A>
Returns the n-th Legendre polynomial (n >= 0).
<DT><CODE>cl_UP_I cl_laguerre (sintL n)</CODE>
<DD>
-<A NAME="IDX311"></A>
<A NAME="IDX312"></A>
+<A NAME="IDX313"></A>
Returns the n-th Laguerre polynomial (n >= 0).
</DL>
<H2><A NAME="SEC60" HREF="cln.html#TOC60">10.1 Why C++ ?</A></H2>
<P>
-<A NAME="IDX313"></A>
+<A NAME="IDX314"></A>
<P>
<LI>
-<A NAME="IDX314"></A>
+<A NAME="IDX315"></A>
Portability: It runs on all platforms supporting a C++ compiler. Because
of the availability of GNU C++, this includes all currently used 32-bit and
64-bit platforms, independently of the quality of the vendor's C++ compiler.
it.
<LI>
-<A NAME="IDX315"></A>
<A NAME="IDX316"></A>
+<A NAME="IDX317"></A>
Garbage collection: A reference counting mechanism makes sure that any
number object's storage is freed immediately when the last reference to the
object is gone.
For very large numbers (more than 12000 decimal digits), CLN uses
Schönhage-Strassen
-<A NAME="IDX317"></A>
+<A NAME="IDX318"></A>
multiplication, which is an asymptotically optimal multiplication
algorithm.
<LI>
<H2><A NAME="SEC63" HREF="cln.html#TOC63">10.4 Garbage collection</A></H2>
<P>
-<A NAME="IDX318"></A>
+<A NAME="IDX319"></A>
<P>
<H2><A NAME="SEC65" HREF="cln.html#TOC65">11.1 Compiler options</A></H2>
<P>
-<A NAME="IDX319"></A>
+<A NAME="IDX320"></A>
<P>
<H2><A NAME="SEC66" HREF="cln.html#TOC66">11.2 Include files</A></H2>
<P>
-<A NAME="IDX320"></A>
<A NAME="IDX321"></A>
+<A NAME="IDX322"></A>
<P>
<P>
A function which computes the nth Fibonacci number can be written as follows.
-<A NAME="IDX322"></A>
+<A NAME="IDX323"></A>
<H2><A NAME="SEC68" HREF="cln.html#TOC68">11.4 Debugging support</A></H2>
<P>
-<A NAME="IDX323"></A>
+<A NAME="IDX324"></A>
<P>
for printing number objects. In order to get this function, you have
to define the macro <SAMP>`CL_DEBUG'</SAMP> and then include all the header files
for which you want <CODE>cl_print</CODE> debugging support. For example:
-<A NAME="IDX324"></A>
+<A NAME="IDX325"></A>
<PRE>
#define CL_DEBUG
<CODE>debug_print()</CODE> on all CLN types. The same macro <SAMP>`CL_DEBUG'</SAMP>
is needed for this member function to be implemented. Under <CODE>gdb</CODE>,
you call it like this:
-<A NAME="IDX325"></A>
+<A NAME="IDX326"></A>
<PRE>
(gdb) print s
<H1><A NAME="SEC69" HREF="cln.html#TOC69">12. Customizing</A></H1>
<P>
-<A NAME="IDX326"></A>
+<A NAME="IDX327"></A>
</PRE>
<P>
-<A NAME="IDX327"></A>
+<A NAME="IDX328"></A>
This function must not return control to its caller.
<H2><A NAME="SEC71" HREF="cln.html#TOC71">12.2 Floating-point underflow</A></H2>
<P>
-<A NAME="IDX328"></A>
+<A NAME="IDX329"></A>
<P>
<P>
The output of the function <CODE>fprint</CODE> may be customized by changing the
value of the global variable <CODE>cl_default_print_flags</CODE>.
-<A NAME="IDX329"></A>
+<A NAME="IDX330"></A>
</PRE>
<P>
-<A NAME="IDX330"></A>
<A NAME="IDX331"></A>
+<A NAME="IDX332"></A>
The <CODE>cl_malloc_hook</CODE> function must not return a <CODE>NULL</CODE> pointer.
<P><HR><P>
-This document was generated on 5 May 2000 using
+This document was generated on 19 May 2000 using
<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k.
</BODY>
</HTML>
* include files: Include files.
* Input/Output: Input/Output.
* installation: Installing the library.
+* instanceof (): Rings.
* integer: Ordinary number types.
* integer_decode_float (): Functions on floating-point numbers.
* integer_length (): Logical functions.
%DVIPSCommandLine: /usr/local/teTeX/bin/ix86-linux-libc6/dvips -D600 -o
%+ cln.ps cln.dvi
%DVIPSParameters: dpi=600, compressed
-%DVIPSSource: TeX output 2000.05.05:1954
+%DVIPSSource: TeX output 2000.05.19:1449
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
g(.)h(.)f(.)g(.)g(.)h(.)f(.)40 b Fc(28)2032 2531 y(installation)9
b Fd(.)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 Fc(4)2032 2623 y(in)n(teger)10
+h(.)f(.)g(.)h(.)f(.)g(.)35 b Fc(4)2032 2623 y Fe(instanceof)28
+b(\(\))20 b Fd(.)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 Fc(33)2032 2714 y(in)n(teger)10
b Fd(.)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 Fc(6)2032
-2714 y Fe(integer_decode_float)30 b(\(\))24 b Fd(.)13
+2806 y Fe(integer_decode_float)30 b(\(\))24 b Fd(.)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 Fc(24)2032 2806 y Fe(integer_length)29
+(.)g(.)h(.)f(.)g(.)h(.)49 b Fc(24)2032 2898 y Fe(integer_length)29
b(\(\))14 b Fd(.)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 Fc(22)2032 2898 y Fe(isqrt)27 b(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f(.)g
+b Fc(22)2032 2990 y Fe(isqrt)27 b(\(\))9 b Fd(.)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 Fc(16)2032 3159 y Fs(L)2032 3281 y Fc(Laguerre)27 b(p)r(olynomial)13
+b Fc(16)2032 3251 y Fs(L)2032 3373 y Fc(Laguerre)27 b(p)r(olynomial)13
b Fd(.)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 Fc(42)2032 3373 y Fe(lcm)27 b(\(\))12 b Fd(.)g(.)h(.)f(.)g(.)g(.)h(.)
+b Fc(42)2032 3465 y Fe(lcm)27 b(\(\))12 b Fd(.)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 Fc(23)2032 3465 y Fe(ldb)27 b(\(\))12 b Fd(.)g(.)h(.)f(.)g(.)g
+g(.)38 b Fc(23)2032 3557 y Fe(ldb)27 b(\(\))12 b Fd(.)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 Fc(22)2032 3557 y Fe(ldb_test)28 b(\(\))23
+(.)f(.)g(.)38 b Fc(22)2032 3648 y Fe(ldb_test)28 b(\(\))23
b Fd(.)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 Fc(22)2032 3648 y Fe(least_negative_float)30
+f(.)g(.)h(.)48 b Fc(22)2032 3740 y Fe(least_negative_float)30
b(\(\))24 b Fd(.)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 Fc(25)2032
-3740 y Fe(least_positive_float)30 b(\(\))24 b Fd(.)13
+3832 y Fe(least_positive_float)30 b(\(\))24 b Fd(.)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 Fc(25)2032 3832 y(Legende)26
+(.)g(.)h(.)f(.)g(.)h(.)49 b Fc(25)2032 3924 y(Legende)26
b(p)r(olynomial)e Fd(.)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 Fc(42)2032 3924 y Fe(length)27 b(\(\))8 b Fd(.)13
+49 b Fc(42)2032 4015 y Fe(length)27 b(\(\))8 b Fd(.)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 Fc(37)2032 4015 y Fe(ln)26 b(\(\))13
+h(.)f(.)g(.)h(.)33 b Fc(37)2032 4107 y Fe(ln)26 b(\(\))13
b Fd(.)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 Fc(17)2032
-4107 y Fe(log)27 b(\(\))12 b Fd(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
+4199 y Fe(log)27 b(\(\))12 b Fd(.)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 Fc(17)2032 4199 y Fe(logand)27 b(\(\))8 b Fd(.)13 b(.)f(.)g(.)g(.)h
+b Fc(17)2032 4291 y Fe(logand)27 b(\(\))8 b Fd(.)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 Fc(21)2032 4291 y Fe(logandc1)28 b(\(\))23 b Fd(.)12
+b Fc(21)2032 4382 y Fe(logandc1)28 b(\(\))23 b Fd(.)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 Fc(21)2032 4382 y Fe(logandc2)28 b(\(\))23 b
+h(.)48 b Fc(21)2032 4474 y Fe(logandc2)28 b(\(\))23 b
Fd(.)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 Fc(21)2032 4474 y Fe(logbitp)27 b(\(\))6
+f(.)g(.)h(.)48 b Fc(21)2032 4566 y Fe(logbitp)27 b(\(\))6
b Fd(.)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 Fc(21)2032 4566 y Fe(logcount)c(\(\))23
+f(.)g(.)h(.)f(.)g(.)32 b Fc(21)2032 4658 y Fe(logcount)c(\(\))23
b Fd(.)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 Fc(21)2032 4658 y Fe(logeqv)27 b(\(\))8
+f(.)g(.)h(.)48 b Fc(21)2032 4749 y Fe(logeqv)27 b(\(\))8
b Fd(.)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 Fc(21)2032 4749 y Fe(logior)27
+g(.)g(.)h(.)f(.)g(.)h(.)33 b Fc(21)2032 4841 y Fe(logior)27
b(\(\))8 b Fd(.)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 Fc(21)2032 4841
+(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)33 b Fc(21)2032 4933
y Fe(lognand)27 b(\(\))6 b Fd(.)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 Fc(21)2032
-4933 y Fe(lognor)27 b(\(\))8 b Fd(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
+5024 y Fe(lognor)27 b(\(\))8 b Fd(.)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 Fc(21)2032 5024 y Fe(lognot)27 b(\(\))8 b Fd(.)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 Fc(20)p eop
+b Fc(21)p eop
%%Page: 54 56
-54 55 bop -30 -116 a Fr(Index)3646 b(54)-30 299 y Fe(logorc1)27
-b(\(\))6 b Fd(.)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 Fc(21)-30 391 y Fe(logorc2)27
-b(\(\))6 b Fd(.)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 Fc(21)-30 483 y Fe(logp)27
-b(\(\))10 b Fd(.)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 Fc(23)-30
-575 y Fe(logtest)27 b(\(\))6 b Fd(.)13 b(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)
+54 55 bop -30 -116 a Fr(Index)3646 b(54)-30 299 y Fe(lognot)27
+b(\(\))8 b Fd(.)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 Fc(20)-30 391 y
+Fe(logorc1)27 b(\(\))6 b Fd(.)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 Fc(21)-30
+483 y Fe(logorc2)27 b(\(\))6 b Fd(.)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 Fc(21)-30 667 y Fe(logxor)27 b(\(\))8 b Fd(.)k(.)h(.)f(.)g(.)h(.)f(.)
+b Fc(21)-30 575 y Fe(logp)27 b(\(\))10 b Fd(.)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 Fc(23)-30 667 y Fe(logtest)27 b(\(\))6 b Fd(.)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 Fc(21)-30 759 y Fe(logxor)27 b(\(\))8 b Fd(.)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 Fc(21)-30 929 y Fs(M)-30 1052 y Fe(make)9 b Fd(.)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 Fc(3)-30 1144 y Fe(mask_field)28
+b Fc(21)-30 1021 y Fs(M)-30 1144 y Fe(make)9 b Fd(.)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 Fc(3)-30 1235 y Fe(mask_field)28
b(\(\))20 b Fd(.)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 Fc(22)-30 1235 y Fe(max)26 b(\(\))12
+g(.)h(.)f(.)g(.)46 b Fc(22)-30 1327 y Fe(max)26 b(\(\))12
b Fd(.)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 Fc(13)-30 1327
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fc(13)-30 1419
y Fe(min)26 b(\(\))12 b Fd(.)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 Fc(13)-30 1419 y Fe(minus1)27 b(\(\))8 b Fd(.)k(.)h(.)f(.)g(.)h(.)f
+b Fc(13)-30 1511 y Fe(minus1)27 b(\(\))8 b Fd(.)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 Fc(11)-30 1511 y Fe(minusp)27 b(\(\))8 b Fd(.)k(.)h(.)f(.)g(.)h(.)f
+b Fc(11)-30 1603 y Fe(minusp)27 b(\(\))8 b Fd(.)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 Fc(13)-30 1603 y Fe(mod)26 b(\(\))12 b Fd(.)h(.)f(.)h(.)f(.)g(.)h(.)f
+b Fc(13)-30 1695 y Fe(mod)26 b(\(\))12 b Fd(.)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 Fc(16)-30 1695 y(mo)r(difying)26 b(op)r(erators)c
+(.)38 b Fc(16)-30 1787 y(mo)r(difying)26 b(op)r(erators)c
Fd(.)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 Fc(27)-30 1787 y(mo)r(dular)25 b(in)n(teger)20 b Fd(.)12
+b Fc(27)-30 1879 y(mo)r(dular)25 b(in)n(teger)20 b Fd(.)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 Fc(34)-30 1879 y Fe(modulus)23 b Fd(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)
+b Fc(34)-30 1971 y Fe(modulus)23 b Fd(.)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 Fc(34)-30 1971 y Fe(monomial)27 b(\(\))d Fd(.)12 b(.)g(.)h(.)f(.)g(.)
+b Fc(34)-30 2063 y Fe(monomial)27 b(\(\))d Fd(.)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 Fc(40)-30 2063 y(Mon)n(tgomery)25 b(m)n(ultiplication)9
+b Fc(40)-30 2155 y(Mon)n(tgomery)25 b(m)n(ultiplication)9
b Fd(.)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 Fc(34)-30 2155 y Fe
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fc(34)-30 2247 y Fe
(most_negative_float)30 b(\(\))7 b Fd(.)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 Fc(25)-30 2247 y Fe(most_positive_float)d(\(\))7
+(.)33 b Fc(25)-30 2339 y Fe(most_positive_float)d(\(\))7
b Fd(.)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 Fc(25)-30
-2509 y Fs(N)-30 2632 y Fe(numerator)28 b(\(\))21 b Fd(.)13
+2601 y Fs(N)-30 2724 y Fe(numerator)28 b(\(\))21 b Fd(.)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 Fc(12)-30 2879 y Fs(O)-30 3002 y Fe(oddp)27 b(\(\))10
+47 b Fc(12)-30 2971 y Fs(O)-30 3094 y Fe(oddp)27 b(\(\))10
b Fd(.)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 Fc(22)-30 3094 y
+(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fc(22)-30 3186 y
Fe(one)26 b(\(\))d Fd(.)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(.)f(.)g(.)h
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(35,)27
-b(40)-30 3186 y Fe(operator)g(!=)f(\(\))c Fd(.)13 b(.)f(.)g(.)g(.)h(.)f
+b(40)-30 3278 y Fe(operator)g(!=)f(\(\))c Fd(.)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 Fc(13,)27 b(34,)f(36,)h(41)-30 3278 y Fe(operator)g(&)f(\(\))9
+47 b Fc(13,)27 b(34,)f(36,)h(41)-30 3370 y Fe(operator)g(&)f(\(\))9
b Fd(.)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 Fc(21)-30 3370 y Fe(operator)27 b(&=)f(\(\))7
+(.)h(.)34 b Fc(21)-30 3461 y Fe(operator)27 b(&=)f(\(\))7
b Fd(.)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 Fc(27)-30 3461 y Fe(operator)27 b(\(\))f(\(\))7
+f(.)33 b Fc(27)-30 3553 y Fe(operator)27 b(\(\))f(\(\))7
b Fd(.)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 Fc(41)-30 3553 y Fe(operator)27 b(*)f(\(\))12
+f(.)33 b Fc(41)-30 3645 y Fe(operator)27 b(*)f(\(\))12
b Fd(.)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
-Fc(11,)26 b(35,)h(41)-30 3645 y Fe(operator)g(*=)f(\(\))7
+Fc(11,)26 b(35,)h(41)-30 3737 y Fe(operator)g(*=)f(\(\))7
b Fd(.)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 Fc(27)-30 3737 y Fe(operator)27 b(-)f(\(\))12
+f(.)33 b Fc(27)-30 3829 y Fe(operator)27 b(-)f(\(\))12
b Fd(.)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
-Fc(11,)26 b(35,)h(41)-30 3829 y Fe(operator)g(--)f(\(\))7
+Fc(11,)26 b(35,)h(41)-30 3921 y Fe(operator)g(--)f(\(\))7
b Fd(.)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 Fc(27)-30 3921 y Fe(operator)27 b(-=)f(\(\))7
+f(.)33 b Fc(27)-30 4013 y Fe(operator)27 b(-=)f(\(\))7
b Fd(.)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 Fc(27)-30 4013 y Fe(operator)27 b(/)f(\(\))9
+f(.)33 b Fc(27)-30 4105 y Fe(operator)27 b(/)f(\(\))9
b Fd(.)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 Fc(11)-30 4105 y Fe(operator)27 b(/=)f(\(\))7
+(.)h(.)34 b Fc(11)-30 4197 y Fe(operator)27 b(/=)f(\(\))7
b Fd(.)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 Fc(27)-30 4197 y Fe(operator)27 b(==)f(\(\))c
+f(.)33 b Fc(27)-30 4289 y Fe(operator)27 b(==)f(\(\))c
Fd(.)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 Fc(13,)27 b(34,)f(36,)h(41)-30
-4289 y Fe(operator)g([])f(\(\))7 b Fd(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)
+4381 y Fe(operator)g([])f(\(\))7 b Fd(.)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 Fc(37)-30
-4381 y Fe(operator)27 b(|)f(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h
+4473 y Fe(operator)27 b(|)f(\(\))9 b Fd(.)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 Fc(21)-30
-4473 y Fe(operator)27 b(|=)f(\(\))7 b Fd(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g
+4565 y Fe(operator)27 b(|=)f(\(\))7 b Fd(.)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 Fc(27)-30
-4565 y Fe(operator)27 b(~)f(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f(.)g(.)g(.)h
+4657 y Fe(operator)27 b(~)f(\(\))9 b Fd(.)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 Fc(20)-30
-4657 y Fe(operator)27 b(+)f(\(\))12 b Fd(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)
+4749 y Fe(operator)27 b(+)f(\(\))12 b Fd(.)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 Fc(11,)26 b(35,)h(41)-30 4749 y Fe(operator)g(+=)f
+(.)f(.)g(.)h(.)38 b Fc(11,)26 b(35,)h(41)-30 4841 y Fe(operator)g(+=)f
(\(\))7 b Fd(.)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 Fc(27)-30 4841 y Fe(operator)27 b(++)f(\(\))7
+g(.)h(.)f(.)33 b Fc(27)-30 4933 y Fe(operator)27 b(++)f(\(\))7
b Fd(.)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 Fc(27)-30 4933 y Fe(operator)27 b(>)f(\(\))9
+f(.)33 b Fc(27)-30 5024 y Fe(operator)27 b(>)f(\(\))9
b Fd(.)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 Fc(13)-30 5024 y Fe(operator)27 b(>=)f(\(\))7
-b Fd(.)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 Fc(13)2032 299 y Fe(operator)28 b(>>)e(\(\))18
+(.)h(.)34 b Fc(13)2032 299 y Fe(operator)28 b(>=)e(\(\))7
+b Fd(.)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 Fc(13)2032 396 y Fe(operator)28 b(>>)e(\(\))18
b Fd(.)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 Fc(22,)27 b(36)2032 398 y Fe(operator)h(>>=)e(\(\))e
+b Fc(22,)27 b(36)2032 493 y Fe(operator)h(>>=)e(\(\))e
Fd(.)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 Fc(27)2032 497 y Fe(operator)28 b(^)d(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f
+b Fc(27)2032 591 y Fe(operator)28 b(^)d(\(\))9 b Fd(.)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 Fc(21)2032 596 y Fe(operator)28 b(^=)e(\(\))7 b Fd(.)13
+b Fc(21)2032 688 y Fe(operator)28 b(^=)e(\(\))7 b Fd(.)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 Fc(27)2032 695 y Fe(operator)28 b(<)d(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f
+b Fc(27)2032 785 y Fe(operator)28 b(<)d(\(\))9 b Fd(.)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 Fc(13)2032 794 y Fe(operator)28 b(<=)e(\(\))7 b Fd(.)13
+b Fc(13)2032 883 y Fe(operator)28 b(<=)e(\(\))7 b Fd(.)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 Fc(13)2032 893 y Fe(operator)28 b(<<)e(\(\))21 b Fd(.)13
+b Fc(13)2032 980 y Fe(operator)28 b(<<)e(\(\))21 b Fd(.)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 Fc(22,)27 b(35,)f(36,)h(41)2032
-992 y Fe(operator)h(<<=)e(\(\))e Fd(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h
+1077 y Fe(operator)h(<<=)e(\(\))e Fd(.)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 Fc(27)2032 1092 y Fe(ord2)27
+h(.)f(.)g(.)h(.)f(.)g(.)g(.)50 b Fc(27)2032 1174 y Fe(ord2)27
b(\(\))10 b Fd(.)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 Fc(22)2032
-1378 y Fs(P)2032 1516 y Fe(phase)27 b(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f
+1451 y Fs(P)2032 1585 y Fe(phase)27 b(\(\))9 b Fd(.)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 Fc(17)2032 1615 y(pi)18 b Fd(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+(.)35 b Fc(17)2032 1682 y(pi)18 b Fd(.)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 Fc(19)2032 1714 y Fe(plus1)27 b(\(\))9
+(.)h(.)f(.)g(.)44 b Fc(19)2032 1780 y Fe(plus1)27 b(\(\))9
b Fd(.)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 Fc(11)2032 1813 y Fe(plusp)27
+(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fc(11)2032 1877 y Fe(plusp)27
b(\(\))9 b Fd(.)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 Fc(13)2032 1912
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)35 b Fc(13)2032 1974
y(p)r(olynomial)10 b Fd(.)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 Fc(38)2032 2011
+f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)36 b Fc(38)2032 2072
y(p)r(ortabilit)n(y)17 b Fd(.)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 Fc(43)2032
-2110 y Fe(power2p)27 b(\(\))6 b Fd(.)13 b(.)g(.)f(.)g(.)h(.)f(.)g(.)h
+2169 y Fe(power2p)27 b(\(\))6 b Fd(.)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 Fc(23)2032 2209 y(prin)n(ting)8 b Fd(.)k(.)g(.)h(.)f(.)g(.)g(.)h(.)f
+b Fc(23)2032 2266 y(prin)n(ting)8 b Fd(.)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 Fc(28)2032 2509 y Fs(R)2032 2646 y Fe(random)27 b(\(\))8
+b Fc(28)2032 2556 y Fs(R)2032 2690 y Fe(random)27 b(\(\))8
b Fd(.)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 Fc(35)2032 2746 y Fe(random_F)28
+g(.)g(.)h(.)f(.)g(.)h(.)33 b Fc(35)2032 2787 y Fe(random_F)28
b(\(\))23 b Fd(.)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 Fc(26)2032 2845 y Fe(random_I)28
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(26)2032 2884 y Fe(random_I)28
b(\(\))23 b Fd(.)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 Fc(26)2032 2944 y Fe(random_R)28
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(26)2032 2981 y Fe(random_R)28
b(\(\))23 b Fd(.)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 Fc(26)2032 3043 y Fe(random32)28
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(26)2032 3079 y Fe(random32)28
b(\(\))23 b Fd(.)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 Fc(26)2032 3142 y Fe(rational)28
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(26)2032 3176 y Fe(rational)28
b(\(\))23 b Fd(.)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 Fc(26)2032 3241 y(rational)27
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(26)2032 3273 y(rational)27
b(n)n(um)n(b)r(er)17 b Fd(.)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 Fc(6)2032 3340 y Fe(rationalize)28
+(.)f(.)g(.)h(.)f(.)g(.)g(.)44 b Fc(6)2032 3371 y Fe(rationalize)28
b(\(\))18 b Fd(.)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 Fc(26)2032 3439 y(reading)17 b Fd(.)c(.)g(.)f(.)g(.)h(.)f
+h(.)f(.)44 b Fc(26)2032 3468 y(reading)17 b Fd(.)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 Fc(28)2032 3538 y(real)27 b(n)n(um)n(b)r(er)13
+(.)43 b Fc(28)2032 3565 y(real)27 b(n)n(um)n(b)r(er)13
b Fd(.)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 Fc(6)2032 3637 y Fe(realpart)28
+(.)f(.)g(.)h(.)f(.)39 b Fc(6)2032 3662 y Fe(realpart)28
b(\(\))23 b Fd(.)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 Fc(12)2032 3736 y Fe(recip)27
+f(.)g(.)h(.)f(.)g(.)h(.)48 b Fc(12)2032 3760 y Fe(recip)27
b(\(\))20 b Fd(.)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 Fc(11,)27 b(35)2032 3835
+g(.)h(.)f(.)g(.)g(.)h(.)45 b Fc(11,)27 b(35)2032 3857
y(reference)g(coun)n(ting)17 b Fd(.)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 Fc(43)2032 3935 y Fe(rem)27
+(.)h(.)f(.)g(.)h(.)f(.)43 b Fc(43)2032 3954 y Fe(rem)27
b(\(\))12 b Fd(.)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 Fc(16)2032
-4034 y(represen)n(tation)12 b Fd(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
+4052 y(represen)n(tation)12 b Fd(.)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 Fc(28)2032 4133
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fc(28)2032 4149
y Fe(retract)27 b(\(\))6 b Fd(.)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 Fc(35)2032
-4232 y(Riemann's)25 b(zeta)11 b Fd(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f
+4246 y(Riemann's)25 b(zeta)11 b Fd(.)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 Fc(20)2032 4331
+h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fc(20)2032 4343
y(ring)21 b Fd(.)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 Fc(34)2032 4430 y Fe(ring)27 b(\(\))21 b Fd(.)13 b(.)f(.)g(.)h(.)f(.)
+b Fc(34)2032 4441 y Fe(ring)27 b(\(\))21 b Fd(.)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 Fc(35,)27 b(41)2032 4529 y Fe(rootp)g(\(\))9 b Fd(.)k(.)f(.)g(.)h(.)f
+b Fc(35,)27 b(41)2032 4538 y Fe(rootp)g(\(\))9 b Fd(.)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 Fc(16)2032 4628 y Fe(round1)27 b(\(\))8 b Fd(.)13
+(.)35 b Fc(16)2032 4635 y Fe(round1)27 b(\(\))8 b Fd(.)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 Fc(14)2032 4727 y Fe(round2)27 b(\(\))8
+h(.)f(.)g(.)h(.)33 b Fc(14)2032 4733 y Fe(round2)27 b(\(\))8
b Fd(.)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 Fc(15)2032 4826 y(rounding)10
+g(.)g(.)h(.)f(.)g(.)h(.)33 b Fc(15)2032 4830 y(rounding)10
b Fd(.)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 Fc(13)2032 4925 y(rounding)26
+(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fc(13)2032 4927 y(rounding)26
b(error)7 b Fd(.)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 Fc(7)2032 5024 y(Rubik's)25
@table @code
@item cl_boolean instanceof (const cl_number& x, const cl_number_ring& R)
+@cindex @code{instanceof ()}
Tests whether the given number is an element of the number ring R.
@end table
@item cl_MI operator+ (const cl_MI&, const cl_MI&)
@cindex @code{operator + ()}
-Returns the sum of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the sum of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI operator- (const cl_MI&, const cl_MI&)
@cindex @code{operator - ()}
-Returns the difference of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the difference of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI operator- (const cl_MI&)
Returns the negative of a modular integer.
@item cl_MI operator* (const cl_MI&, const cl_MI&)
@cindex @code{operator * ()}
-Returns the product of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the product of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI square (const cl_MI&)
@cindex @code{square ()}
@table @code
@item cl_boolean instanceof (const cl_number& x, const cl_number_ring& R)
+@cindex @code{instanceof ()}
Tests whether the given number is an element of the number ring R.
@end table
@item cl_MI operator+ (const cl_MI&, const cl_MI&)
@cindex @code{operator + ()}
-Returns the sum of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the sum of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI operator- (const cl_MI&, const cl_MI&)
@cindex @code{operator - ()}
-Returns the difference of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the difference of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI operator- (const cl_MI&)
Returns the negative of a modular integer.
@item cl_MI operator* (const cl_MI&, const cl_MI&)
@cindex @code{operator * ()}
-Returns the product of two modular integers. One of the arguments may also be
-a plain integer.
+Returns the product of two modular integers. One of the arguments may also
+be a plain integer.
@item cl_MI square (const cl_MI&)
@cindex @code{square ()}
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 1. Introduction</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 10. Internals</TITLE>
</HEAD>
<H2><A NAME="SEC60" HREF="cln_toc.html#TOC60">10.1 Why C++ ?</A></H2>
<P>
-<A NAME="IDX313"></A>
+<A NAME="IDX314"></A>
<P>
<LI>
-<A NAME="IDX314"></A>
+<A NAME="IDX315"></A>
Portability: It runs on all platforms supporting a C++ compiler. Because
of the availability of GNU C++, this includes all currently used 32-bit and
64-bit platforms, independently of the quality of the vendor's C++ compiler.
it.
<LI>
-<A NAME="IDX315"></A>
<A NAME="IDX316"></A>
+<A NAME="IDX317"></A>
Garbage collection: A reference counting mechanism makes sure that any
number object's storage is freed immediately when the last reference to the
object is gone.
For very large numbers (more than 12000 decimal digits), CLN uses
Schönhage-Strassen
-<A NAME="IDX317"></A>
+<A NAME="IDX318"></A>
multiplication, which is an asymptotically optimal multiplication
algorithm.
<LI>
<H2><A NAME="SEC63" HREF="cln_toc.html#TOC63">10.4 Garbage collection</A></H2>
<P>
-<A NAME="IDX318"></A>
+<A NAME="IDX319"></A>
<P>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 11. Using the library</TITLE>
</HEAD>
<H2><A NAME="SEC65" HREF="cln_toc.html#TOC65">11.1 Compiler options</A></H2>
<P>
-<A NAME="IDX319"></A>
+<A NAME="IDX320"></A>
<P>
<H2><A NAME="SEC66" HREF="cln_toc.html#TOC66">11.2 Include files</A></H2>
<P>
-<A NAME="IDX320"></A>
<A NAME="IDX321"></A>
+<A NAME="IDX322"></A>
<P>
<P>
A function which computes the nth Fibonacci number can be written as follows.
-<A NAME="IDX322"></A>
+<A NAME="IDX323"></A>
<H2><A NAME="SEC68" HREF="cln_toc.html#TOC68">11.4 Debugging support</A></H2>
<P>
-<A NAME="IDX323"></A>
+<A NAME="IDX324"></A>
<P>
for printing number objects. In order to get this function, you have
to define the macro <SAMP>`CL_DEBUG'</SAMP> and then include all the header files
for which you want <CODE>cl_print</CODE> debugging support. For example:
-<A NAME="IDX324"></A>
+<A NAME="IDX325"></A>
<PRE>
#define CL_DEBUG
<CODE>debug_print()</CODE> on all CLN types. The same macro <SAMP>`CL_DEBUG'</SAMP>
is needed for this member function to be implemented. Under <CODE>gdb</CODE>,
you call it like this:
-<A NAME="IDX325"></A>
+<A NAME="IDX326"></A>
<PRE>
(gdb) print s
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 12. Customizing</TITLE>
</HEAD>
<H1><A NAME="SEC69" HREF="cln_toc.html#TOC69">12. Customizing</A></H1>
<P>
-<A NAME="IDX326"></A>
+<A NAME="IDX327"></A>
</PRE>
<P>
-<A NAME="IDX327"></A>
+<A NAME="IDX328"></A>
This function must not return control to its caller.
<H2><A NAME="SEC71" HREF="cln_toc.html#TOC71">12.2 Floating-point underflow</A></H2>
<P>
-<A NAME="IDX328"></A>
+<A NAME="IDX329"></A>
<P>
<P>
The output of the function <CODE>fprint</CODE> may be customized by changing the
value of the global variable <CODE>cl_default_print_flags</CODE>.
-<A NAME="IDX329"></A>
+<A NAME="IDX330"></A>
</PRE>
<P>
-<A NAME="IDX330"></A>
<A NAME="IDX331"></A>
+<A NAME="IDX332"></A>
The <CODE>cl_malloc_hook</CODE> function must not return a <CODE>NULL</CODE> pointer.
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - Index</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 2. Installation</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 3. Ordinary number types</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 4. Functions on numbers</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 5. Input/Output</TITLE>
</HEAD>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 6. Rings</TITLE>
</HEAD>
<DT><CODE>cl_boolean instanceof (const cl_number& x, const cl_number_ring& R)</CODE>
<DD>
+<A NAME="IDX240"></A>
Tests whether the given number is an element of the number ring R.
</DL>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 7. Modular integers</TITLE>
</HEAD>
<H1><A NAME="SEC49" HREF="cln_toc.html#TOC49">7. Modular integers</A></H1>
<P>
-<A NAME="IDX240"></A>
+<A NAME="IDX241"></A>
<H2><A NAME="SEC50" HREF="cln_toc.html#TOC50">7.1 Modular integer rings</A></H2>
<P>
-<A NAME="IDX241"></A>
+<A NAME="IDX242"></A>
<P>
</PRE>
<P>
-<A NAME="IDX242"></A>
+<A NAME="IDX243"></A>
<P>
<DT><CODE>cl_modint_ring cl_find_modint_ring (const cl_I& N)</CODE>
<DD>
-<A NAME="IDX243"></A>
+<A NAME="IDX244"></A>
This function returns the modular ring <SAMP>`Z/NZ'</SAMP>. It takes care
of finding out about special cases of <CODE>N</CODE>, like powers of two
and odd numbers for which Montgomery multiplication will be a win,
-<A NAME="IDX244"></A>
+<A NAME="IDX245"></A>
and precomputes any necessary auxiliary data for computing modulo <CODE>N</CODE>.
There is a cache table of rings, indexed by <CODE>N</CODE> (or, more precisely,
by <CODE>abs(N)</CODE>). This ensures that the precomputation costs are reduced
<DT><CODE>bool operator== (const cl_modint_ring&, const cl_modint_ring&)</CODE>
<DD>
-<A NAME="IDX245"></A>
+<A NAME="IDX246"></A>
<DT><CODE>bool operator!= (const cl_modint_ring&, const cl_modint_ring&)</CODE>
<DD>
-<A NAME="IDX246"></A>
+<A NAME="IDX247"></A>
These compare two modular integer rings for equality. Two different calls
to <CODE>cl_find_modint_ring</CODE> with the same argument necessarily return the
same ring because it is memoized in the cache table.
<DT><CODE>cl_I R->modulus</CODE>
<DD>
-<A NAME="IDX247"></A>
+<A NAME="IDX248"></A>
This is the ring's modulus, normalized to be nonnegative: <CODE>abs(N)</CODE>.
<DT><CODE>cl_MI R->zero()</CODE>
<DD>
-<A NAME="IDX248"></A>
+<A NAME="IDX249"></A>
This returns <CODE>0 mod N</CODE>.
<DT><CODE>cl_MI R->one()</CODE>
<DD>
-<A NAME="IDX249"></A>
+<A NAME="IDX250"></A>
This returns <CODE>1 mod N</CODE>.
<DT><CODE>cl_MI R->canonhom (const cl_I& x)</CODE>
<DD>
-<A NAME="IDX250"></A>
+<A NAME="IDX251"></A>
This returns <CODE>x mod N</CODE>.
<DT><CODE>cl_I R->retract (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX251"></A>
+<A NAME="IDX252"></A>
This is a partial inverse function to <CODE>R->canonhom</CODE>. It returns the
standard representative (<CODE>>=0</CODE>, <CODE><N</CODE>) of <CODE>x</CODE>.
<DD>
<DT><CODE>cl_MI R->random()</CODE>
<DD>
-<A NAME="IDX252"></A>
+<A NAME="IDX253"></A>
This returns a random integer modulo <CODE>N</CODE>.
</DL>
<DT><CODE>cl_modint_ring x.ring ()</CODE>
<DD>
-<A NAME="IDX253"></A>
+<A NAME="IDX254"></A>
Returns the ring to which the modular integer <CODE>x</CODE> belongs.
<DT><CODE>cl_MI operator+ (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX254"></A>
-Returns the sum of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX255"></A>
+Returns the sum of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI operator- (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX255"></A>
-Returns the difference of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX256"></A>
+Returns the difference of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI operator- (const cl_MI&)</CODE>
<DD>
<DT><CODE>cl_MI operator* (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX256"></A>
-Returns the product of two modular integers. One of the arguments may also be
-a plain integer.
+<A NAME="IDX257"></A>
+Returns the product of two modular integers. One of the arguments may also
+be a plain integer.
<DT><CODE>cl_MI square (const cl_MI&)</CODE>
<DD>
-<A NAME="IDX257"></A>
+<A NAME="IDX258"></A>
Returns the square of a modular integer.
<DT><CODE>cl_MI recip (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX258"></A>
+<A NAME="IDX259"></A>
Returns the reciprocal <CODE>x^-1</CODE> of a modular integer <CODE>x</CODE>. <CODE>x</CODE>
must be coprime to the modulus, otherwise an error message is issued.
<DT><CODE>cl_MI div (const cl_MI& x, const cl_MI& y)</CODE>
<DD>
-<A NAME="IDX259"></A>
+<A NAME="IDX260"></A>
Returns the quotient <CODE>x*y^-1</CODE> of two modular integers <CODE>x</CODE>, <CODE>y</CODE>.
<CODE>y</CODE> must be coprime to the modulus, otherwise an error message is issued.
<DT><CODE>cl_MI expt_pos (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX260"></A>
+<A NAME="IDX261"></A>
<CODE>y</CODE> must be > 0. Returns <CODE>x^y</CODE>.
<DT><CODE>cl_MI expt (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX261"></A>
+<A NAME="IDX262"></A>
Returns <CODE>x^y</CODE>. If <CODE>y</CODE> is negative, <CODE>x</CODE> must be coprime to the
modulus, else an error message is issued.
<DT><CODE>cl_MI operator<< (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX262"></A>
+<A NAME="IDX263"></A>
Returns <CODE>x*2^y</CODE>.
<DT><CODE>cl_MI operator>> (const cl_MI& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX263"></A>
+<A NAME="IDX264"></A>
Returns <CODE>x*2^-y</CODE>. When <CODE>y</CODE> is positive, the modulus must be odd,
or an error message is issued.
<DT><CODE>bool operator== (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX264"></A>
+<A NAME="IDX265"></A>
<DT><CODE>bool operator!= (const cl_MI&, const cl_MI&)</CODE>
<DD>
-<A NAME="IDX265"></A>
+<A NAME="IDX266"></A>
Compares two modular integers, belonging to the same modular integer ring,
for equality.
<DT><CODE>cl_boolean zerop (const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX266"></A>
+<A NAME="IDX267"></A>
Returns true if <CODE>x</CODE> is <CODE>0 mod N</CODE>.
</DL>
<DT><CODE>void fprint (cl_ostream stream, const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX267"></A>
+<A NAME="IDX268"></A>
<DT><CODE>cl_ostream operator<< (cl_ostream stream, const cl_MI& x)</CODE>
<DD>
-<A NAME="IDX268"></A>
+<A NAME="IDX269"></A>
Prints the modular integer <CODE>x</CODE> on the <CODE>stream</CODE>. The output may depend
on the global printer settings in the variable <CODE>cl_default_print_flags</CODE>.
</DL>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 8. Symbolic data types</TITLE>
</HEAD>
<H1><A NAME="SEC52" HREF="cln_toc.html#TOC52">8. Symbolic data types</A></H1>
<P>
-<A NAME="IDX269"></A>
+<A NAME="IDX270"></A>
<P>
<H2><A NAME="SEC53" HREF="cln_toc.html#TOC53">8.1 Strings</A></H2>
<P>
-<A NAME="IDX270"></A>
+<A NAME="IDX271"></A>
<P>
<DT><CODE>cl_string (const char * s)</CODE>
<DD>
-<A NAME="IDX271"></A>
+<A NAME="IDX272"></A>
Returns an immutable copy of the (zero-terminated) C string <CODE>s</CODE>.
<DT><CODE>cl_string (const char * ptr, unsigned long len)</CODE>
<DT><CODE>s.length()</CODE>
<DD>
-<A NAME="IDX272"></A>
+<A NAME="IDX273"></A>
<DT><CODE>strlen(s)</CODE>
<DD>
-<A NAME="IDX273"></A>
+<A NAME="IDX274"></A>
Returns the length of the string <CODE>s</CODE>.
<DT><CODE>s[i]</CODE>
<DD>
-<A NAME="IDX274"></A>
+<A NAME="IDX275"></A>
Returns the <CODE>i</CODE>th character of the string <CODE>s</CODE>.
<CODE>i</CODE> must be in the range <CODE>0 <= i < s.length()</CODE>.
<DT><CODE>bool equal (const cl_string& s1, const cl_string& s2)</CODE>
<DD>
-<A NAME="IDX275"></A>
+<A NAME="IDX276"></A>
Compares two strings for equality. One of the arguments may also be a
plain <CODE>const char *</CODE>.
</DL>
<H2><A NAME="SEC54" HREF="cln_toc.html#TOC54">8.2 Symbols</A></H2>
<P>
-<A NAME="IDX276"></A>
+<A NAME="IDX277"></A>
<P>
<DT><CODE>cl_symbol (const cl_string& s)</CODE>
<DD>
-<A NAME="IDX277"></A>
+<A NAME="IDX278"></A>
Looks up or creates a new symbol with a given name.
</DL>
<DT><CODE>bool equal (const cl_symbol& sym1, const cl_symbol& sym2)</CODE>
<DD>
-<A NAME="IDX278"></A>
+<A NAME="IDX279"></A>
Compares two symbols for equality. This is very fast.
</DL>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - 9. Univariate polynomials</TITLE>
</HEAD>
<H1><A NAME="SEC55" HREF="cln_toc.html#TOC55">9. Univariate polynomials</A></H1>
<P>
-<A NAME="IDX279"></A>
<A NAME="IDX280"></A>
+<A NAME="IDX281"></A>
<DT><CODE>cl_univpoly_complex_ring cl_find_univpoly_ring (const cl_complex_ring& R)</CODE>
<DD>
-<A NAME="IDX281"></A>
+<A NAME="IDX282"></A>
<DT><CODE>cl_univpoly_complex_ring cl_find_univpoly_ring (const cl_complex_ring& R, const cl_symbol& varname)</CODE>
<DD>
<DT><CODE>cl_univpoly_real_ring cl_find_univpoly_ring (const cl_real_ring& R)</CODE>
<DT><CODE>cl_ring R->basering()</CODE>
<DD>
-<A NAME="IDX282"></A>
+<A NAME="IDX283"></A>
This returns the base ring, as passed to <SAMP>`cl_find_univpoly_ring'</SAMP>.
<DT><CODE>cl_UP R->zero()</CODE>
<DD>
-<A NAME="IDX283"></A>
+<A NAME="IDX284"></A>
This returns <CODE>0 in R</CODE>, a polynomial of degree -1.
<DT><CODE>cl_UP R->one()</CODE>
<DD>
-<A NAME="IDX284"></A>
+<A NAME="IDX285"></A>
This returns <CODE>1 in R</CODE>, a polynomial of degree <= 0.
<DT><CODE>cl_UP R->canonhom (const cl_I& x)</CODE>
<DD>
-<A NAME="IDX285"></A>
+<A NAME="IDX286"></A>
This returns <CODE>x in R</CODE>, a polynomial of degree <= 0.
<DT><CODE>cl_UP R->monomial (const cl_ring_element& x, uintL e)</CODE>
<DD>
-<A NAME="IDX286"></A>
+<A NAME="IDX287"></A>
This returns a sparse polynomial: <CODE>x * X^e</CODE>, where <CODE>X</CODE> is the
indeterminate.
<DT><CODE>cl_UP R->create (sintL degree)</CODE>
<DD>
-<A NAME="IDX287"></A>
+<A NAME="IDX288"></A>
Creates a new polynomial with a given degree. The zero polynomial has degree
<CODE>-1</CODE>. After creating the polynomial, you should put in the coefficients,
using the <CODE>set_coeff</CODE> member function, and then call the <CODE>finalize</CODE>
<DT><CODE>void set_coeff (cl_UP& x, uintL index, const cl_ring_element& y)</CODE>
<DD>
-<A NAME="IDX288"></A>
+<A NAME="IDX289"></A>
This changes the coefficient of <CODE>X^index</CODE> in <CODE>x</CODE> to be <CODE>y</CODE>.
After changing a polynomial and before applying any "normal" operation on it,
you should call its <CODE>finalize</CODE> member function.
<DT><CODE>void finalize (cl_UP& x)</CODE>
<DD>
-<A NAME="IDX289"></A>
+<A NAME="IDX290"></A>
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
<DT><CODE>cl_univpoly_ring x.ring ()</CODE>
<DD>
-<A NAME="IDX290"></A>
+<A NAME="IDX291"></A>
Returns the ring to which the univariate polynomial <CODE>x</CODE> belongs.
<DT><CODE>cl_UP operator+ (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX291"></A>
+<A NAME="IDX292"></A>
Returns the sum of two univariate polynomials.
<DT><CODE>cl_UP operator- (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX292"></A>
+<A NAME="IDX293"></A>
Returns the difference of two univariate polynomials.
<DT><CODE>cl_UP operator- (const cl_UP&)</CODE>
<DT><CODE>cl_UP operator* (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX293"></A>
+<A NAME="IDX294"></A>
Returns the product of two univariate polynomials. One of the arguments may
also be a plain integer or an element of the base ring.
<DT><CODE>cl_UP square (const cl_UP&)</CODE>
<DD>
-<A NAME="IDX294"></A>
+<A NAME="IDX295"></A>
Returns the square of a univariate polynomial.
<DT><CODE>cl_UP expt_pos (const cl_UP& x, const cl_I& y)</CODE>
<DD>
-<A NAME="IDX295"></A>
+<A NAME="IDX296"></A>
<CODE>y</CODE> must be > 0. Returns <CODE>x^y</CODE>.
<DT><CODE>bool operator== (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX296"></A>
+<A NAME="IDX297"></A>
<DT><CODE>bool operator!= (const cl_UP&, const cl_UP&)</CODE>
<DD>
-<A NAME="IDX297"></A>
+<A NAME="IDX298"></A>
Compares two univariate polynomials, belonging to the same univariate
polynomial ring, for equality.
<DT><CODE>cl_boolean zerop (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX298"></A>
+<A NAME="IDX299"></A>
Returns true if <CODE>x</CODE> is <CODE>0 in R</CODE>.
<DT><CODE>sintL degree (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX299"></A>
+<A NAME="IDX300"></A>
Returns the degree of the polynomial. The zero polynomial has degree <CODE>-1</CODE>.
<DT><CODE>cl_ring_element coeff (const cl_UP& x, uintL index)</CODE>
<DD>
-<A NAME="IDX300"></A>
+<A NAME="IDX301"></A>
Returns the coefficient of <CODE>X^index</CODE> in the polynomial <CODE>x</CODE>.
<DT><CODE>cl_ring_element x (const cl_ring_element& y)</CODE>
<DD>
-<A NAME="IDX301"></A>
+<A NAME="IDX302"></A>
Evaluation: If <CODE>x</CODE> is a polynomial and <CODE>y</CODE> belongs to the base ring,
then <SAMP>`x(y)'</SAMP> returns the value of the substitution of <CODE>y</CODE> into
<CODE>x</CODE>.
<DT><CODE>cl_UP deriv (const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX302"></A>
+<A NAME="IDX303"></A>
Returns the derivative of the polynomial <CODE>x</CODE> with respect to the
indeterminate <CODE>X</CODE>.
</DL>
<DT><CODE>void fprint (cl_ostream stream, const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX303"></A>
+<A NAME="IDX304"></A>
<DT><CODE>cl_ostream operator<< (cl_ostream stream, const cl_UP& x)</CODE>
<DD>
-<A NAME="IDX304"></A>
+<A NAME="IDX305"></A>
Prints the univariate polynomial <CODE>x</CODE> on the <CODE>stream</CODE>. The output may
depend on the global printer settings in the variable
<CODE>cl_default_print_flags</CODE>.
<DT><CODE>cl_UP_I cl_tschebychev (sintL n)</CODE>
<DD>
-<A NAME="IDX305"></A>
<A NAME="IDX306"></A>
+<A NAME="IDX307"></A>
Returns the n-th Tchebychev polynomial (n >= 0).
<DT><CODE>cl_UP_I cl_hermite (sintL n)</CODE>
<DD>
-<A NAME="IDX307"></A>
<A NAME="IDX308"></A>
+<A NAME="IDX309"></A>
Returns the n-th Hermite polynomial (n >= 0).
<DT><CODE>cl_UP_RA cl_legendre (sintL n)</CODE>
<DD>
-<A NAME="IDX309"></A>
<A NAME="IDX310"></A>
+<A NAME="IDX311"></A>
Returns the n-th Legendre polynomial (n >= 0).
<DT><CODE>cl_UP_I cl_laguerre (sintL n)</CODE>
<DD>
-<A NAME="IDX311"></A>
<A NAME="IDX312"></A>
+<A NAME="IDX313"></A>
Returns the n-th Laguerre polynomial (n >= 0).
</DL>
<HTML>
<HEAD>
-<!-- Created by texi2html 1.56k from cln.texi on 5 May 2000 -->
+<!-- Created by texi2html 1.56k from cln.texi on 19 May 2000 -->
<TITLE>CLN, a Class Library for Numbers - Table of Contents</TITLE>
</HEAD>
<LI><A NAME="TOC74" HREF="cln_13.html#SEC74">Index</A>
</UL>
<P><HR><P>
-This document was generated on 5 May 2000 using
+This document was generated on 19 May 2000 using
<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k.
</BODY>
</HTML>