|
|
@ -93,18 +93,146 @@ by the authors. |
|
|
|
|
|
|
|
|
|
|
|
@c Table of contents |
|
|
|
@contents |
|
|
|
@c @contents |
|
|
|
|
|
|
|
|
|
|
|
@node Top, Introduction, (dir), (dir) |
|
|
|
@node Top |
|
|
|
@top CLN |
|
|
|
|
|
|
|
@c @menu |
|
|
|
@c * Introduction:: Introduction |
|
|
|
@c @end menu |
|
|
|
|
|
|
|
@menu |
|
|
|
* Introduction:: |
|
|
|
* Installation:: |
|
|
|
* Ordinary number types:: |
|
|
|
* Functions on numbers:: |
|
|
|
* Input/Output:: |
|
|
|
* Rings:: |
|
|
|
* Modular integers:: |
|
|
|
* Symbolic data types:: |
|
|
|
* Univariate polynomials:: |
|
|
|
* Internals:: |
|
|
|
* Using the library:: |
|
|
|
* Customizing:: |
|
|
|
* Index:: |
|
|
|
|
|
|
|
@node Introduction, Top, Top, Top |
|
|
|
@comment node-name, next, previous, up |
|
|
|
--- The Detailed Node Listing --- |
|
|
|
|
|
|
|
Installation |
|
|
|
|
|
|
|
* Prerequisites:: |
|
|
|
* Building the library:: |
|
|
|
* Installing the library:: |
|
|
|
* Cleaning up:: |
|
|
|
|
|
|
|
Prerequisites |
|
|
|
|
|
|
|
* C++ compiler:: |
|
|
|
* Make utility:: |
|
|
|
* Sed utility:: |
|
|
|
|
|
|
|
Building the library |
|
|
|
|
|
|
|
* Using the GNU MP Library:: |
|
|
|
|
|
|
|
Ordinary number types |
|
|
|
|
|
|
|
* Exact numbers:: |
|
|
|
* Floating-point numbers:: |
|
|
|
* Complex numbers:: |
|
|
|
* Conversions:: |
|
|
|
|
|
|
|
Functions on numbers |
|
|
|
|
|
|
|
* Constructing numbers:: |
|
|
|
* Elementary functions:: |
|
|
|
* Elementary rational functions:: |
|
|
|
* Elementary complex functions:: |
|
|
|
* Comparisons:: |
|
|
|
* Rounding functions:: |
|
|
|
* Roots:: |
|
|
|
* Transcendental functions:: |
|
|
|
* Functions on integers:: |
|
|
|
* Functions on floating-point numbers:: |
|
|
|
* Conversion functions:: |
|
|
|
* Random number generators:: |
|
|
|
* Obfuscating operators:: |
|
|
|
|
|
|
|
Constructing numbers |
|
|
|
|
|
|
|
* Constructing integers:: |
|
|
|
* Constructing rational numbers:: |
|
|
|
* Constructing floating-point numbers:: |
|
|
|
* Constructing complex numbers:: |
|
|
|
|
|
|
|
Transcendental functions |
|
|
|
|
|
|
|
* Exponential and logarithmic functions:: |
|
|
|
* Trigonometric functions:: |
|
|
|
* Hyperbolic functions:: |
|
|
|
* Euler gamma:: |
|
|
|
* Riemann zeta:: |
|
|
|
|
|
|
|
Functions on integers |
|
|
|
|
|
|
|
* Logical functions:: |
|
|
|
* Number theoretic functions:: |
|
|
|
* Combinatorial functions:: |
|
|
|
|
|
|
|
Conversion functions |
|
|
|
|
|
|
|
* Conversion to floating-point numbers:: |
|
|
|
* Conversion to rational numbers:: |
|
|
|
|
|
|
|
Input/Output |
|
|
|
|
|
|
|
* Internal and printed representation:: |
|
|
|
* Input functions:: |
|
|
|
* Output functions:: |
|
|
|
|
|
|
|
Modular integers |
|
|
|
|
|
|
|
* Modular integer rings:: |
|
|
|
* Functions on modular integers:: |
|
|
|
|
|
|
|
Symbolic data types |
|
|
|
|
|
|
|
* Strings:: |
|
|
|
* Symbols:: |
|
|
|
|
|
|
|
Univariate polynomials |
|
|
|
|
|
|
|
* Univariate polynomial rings:: |
|
|
|
* Functions on univariate polynomials:: |
|
|
|
* Special polynomials:: |
|
|
|
|
|
|
|
Internals |
|
|
|
|
|
|
|
* Why C++ ?:: |
|
|
|
* Memory efficiency:: |
|
|
|
* Speed efficiency:: |
|
|
|
* Garbage collection:: |
|
|
|
|
|
|
|
Using the library |
|
|
|
|
|
|
|
* Compiler options:: |
|
|
|
* Include files:: |
|
|
|
* An Example:: |
|
|
|
* Debugging support:: |
|
|
|
* Reporting Problems:: |
|
|
|
|
|
|
|
Customizing |
|
|
|
|
|
|
|
* Error handling:: |
|
|
|
* Floating-point underflow:: |
|
|
|
* Customizing I/O:: |
|
|
|
* Customizing the memory allocator:: |
|
|
|
|
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Introduction |
|
|
|
@chapter Introduction |
|
|
|
|
|
|
|
@noindent |
|
|
@ -239,13 +367,29 @@ order to avoid name clashes. |
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
|
|
@node Installation |
|
|
|
@chapter Installation |
|
|
|
|
|
|
|
This section describes how to install the CLN package on your system. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Prerequisites:: |
|
|
|
* Building the library:: |
|
|
|
* Installing the library:: |
|
|
|
* Cleaning up:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Prerequisites, Building the library, Installation, Installation |
|
|
|
@section Prerequisites |
|
|
|
|
|
|
|
@menu |
|
|
|
* C++ compiler:: |
|
|
|
* Make utility:: |
|
|
|
* Sed utility:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node C++ compiler |
|
|
|
@subsection C++ compiler |
|
|
|
|
|
|
|
To build CLN, you need a C++ compiler. |
|
|
@ -264,6 +408,7 @@ global variables, a feature which I could implement for GNU g++ |
|
|
|
only. Also, it is not known whether this semi-automatic ordering works |
|
|
|
on all platforms when a non-GNU assembler is being used. |
|
|
|
|
|
|
|
@node Make utility |
|
|
|
@subsection Make utility |
|
|
|
@cindex @code{make} |
|
|
|
|
|
|
@ -271,6 +416,7 @@ To build CLN, you also need to have GNU @code{make} installed. |
|
|
|
|
|
|
|
Only GNU @code{make} 3.77 is unusable for CLN; other versions work fine. |
|
|
|
|
|
|
|
@node Sed utility |
|
|
|
@subsection Sed utility |
|
|
|
@cindex @code{sed} |
|
|
|
|
|
|
@ -280,6 +426,7 @@ on @code{sed}, and the vendor's @code{sed} utility on these systems is too |
|
|
|
limited. |
|
|
|
|
|
|
|
|
|
|
|
@node Building the library |
|
|
|
@section Building the library |
|
|
|
|
|
|
|
As with any autoconfiguring GNU software, installation is as easy as this: |
|
|
@ -384,6 +531,11 @@ problems. Also, they are generally slightly slower than static |
|
|
|
libraries so runtime-critical applications should be linked statically. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Using the GNU MP Library:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Using the GNU MP Library |
|
|
|
@subsection Using the GNU MP Library |
|
|
|
@cindex GMP |
|
|
|
|
|
|
@ -408,6 +560,7 @@ library, then you can explicitly specify so by calling |
|
|
|
@code{configure} with the option @samp{--without-gmp}. |
|
|
|
|
|
|
|
|
|
|
|
@node Installing the library |
|
|
|
@section Installing the library |
|
|
|
@cindex installation |
|
|
|
|
|
|
@ -428,6 +581,7 @@ specify @code{--prefix=@dots{}} at configure time, just re-run |
|
|
|
the @code{--prefix=@dots{}} option. |
|
|
|
|
|
|
|
|
|
|
|
@node Cleaning up |
|
|
|
@section Cleaning up |
|
|
|
|
|
|
|
You can remove system-dependent files generated by @code{make} through |
|
|
@ -444,6 +598,7 @@ $ make distclean |
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
@node Ordinary number types |
|
|
|
@chapter Ordinary number types |
|
|
|
|
|
|
|
CLN implements the following class hierarchy: |
|
|
@ -507,6 +662,14 @@ The class @code{cl_F} implements floating-point approximations to real numbers. |
|
|
|
It is an abstract class. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Exact numbers:: |
|
|
|
* Floating-point numbers:: |
|
|
|
* Complex numbers:: |
|
|
|
* Conversions:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Exact numbers |
|
|
|
@section Exact numbers |
|
|
|
@cindex exact number |
|
|
|
|
|
|
@ -538,6 +701,7 @@ allocation. Otherwise the distinction between these immediate integers |
|
|
|
is completely transparent. |
|
|
|
|
|
|
|
|
|
|
|
@node Floating-point numbers |
|
|
|
@section Floating-point numbers |
|
|
|
@cindex floating-point number |
|
|
|
|
|
|
@ -621,6 +785,7 @@ but such declarations are missing for the types @code{cl_SF}, @code{cl_FF}, |
|
|
|
the floating point contagion rule happened to change in the future.) |
|
|
|
|
|
|
|
|
|
|
|
@node Complex numbers |
|
|
|
@section Complex numbers |
|
|
|
@cindex complex number |
|
|
|
|
|
|
@ -633,6 +798,7 @@ Complex numbers can arise from real numbers alone, for example |
|
|
|
through application of @code{sqrt} or transcendental functions. |
|
|
|
|
|
|
|
|
|
|
|
@node Conversions |
|
|
|
@section Conversions |
|
|
|
@cindex conversion |
|
|
|
|
|
|
@ -745,6 +911,7 @@ Example: |
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
@node Functions on numbers |
|
|
|
@chapter Functions on numbers |
|
|
|
|
|
|
|
Each of the number classes declares its mathematical operations in the |
|
|
@ -752,17 +919,43 @@ corresponding include file. For example, if your code operates with |
|
|
|
objects of type @code{cl_I}, it should @code{#include <cln/integer.h>}. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Constructing numbers:: |
|
|
|
* Elementary functions:: |
|
|
|
* Elementary rational functions:: |
|
|
|
* Elementary complex functions:: |
|
|
|
* Comparisons:: |
|
|
|
* Rounding functions:: |
|
|
|
* Roots:: |
|
|
|
* Transcendental functions:: |
|
|
|
* Functions on integers:: |
|
|
|
* Functions on floating-point numbers:: |
|
|
|
* Conversion functions:: |
|
|
|
* Random number generators:: |
|
|
|
* Obfuscating operators:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Constructing numbers |
|
|
|
@section Constructing numbers |
|
|
|
|
|
|
|
Here is how to create number objects ``from nothing''. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Constructing integers:: |
|
|
|
* Constructing rational numbers:: |
|
|
|
* Constructing floating-point numbers:: |
|
|
|
* Constructing complex numbers:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Constructing integers |
|
|
|
@subsection Constructing integers |
|
|
|
|
|
|
|
@code{cl_I} objects are most easily constructed from C integers and from |
|
|
|
strings. See @ref{Conversions}. |
|
|
|
|
|
|
|
|
|
|
|
@node Constructing rational numbers |
|
|
|
@subsection Constructing rational numbers |
|
|
|
|
|
|
|
@code{cl_RA} objects can be constructed from strings. The syntax |
|
|
@ -771,6 +964,7 @@ Another standard way to produce a rational number is through application |
|
|
|
of @samp{operator /} or @samp{recip} on integers. |
|
|
|
|
|
|
|
|
|
|
|
@node Constructing floating-point numbers |
|
|
|
@subsection Constructing floating-point numbers |
|
|
|
|
|
|
|
@code{cl_F} objects with low precision are most easily constructed from |
|
|
@ -796,6 +990,7 @@ and then apply the exponential function: |
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
@node Constructing complex numbers |
|
|
|
@subsection Constructing complex numbers |
|
|
|
|
|
|
|
Non-real @code{cl_N} objects are normally constructed through the function |
|
|
@ -805,6 +1000,7 @@ Non-real @code{cl_N} objects are normally constructed through the function |
|
|
|
See @ref{Elementary complex functions}. |
|
|
|
|
|
|
|
|
|
|
|
@node Elementary functions |
|
|
|
@section Elementary functions |
|
|
|
|
|
|
|
Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I}, |
|
|
@ -913,6 +1109,7 @@ This is defined as @code{x / abs(x)} if @code{x} is non-zero, and |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Elementary rational functions |
|
|
|
@section Elementary rational functions |
|
|
|
|
|
|
|
Each of the classes @code{cl_RA}, @code{cl_I} defines the following operations: |
|
|
@ -931,6 +1128,7 @@ 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. |
|
|
|
|
|
|
|
|
|
|
|
@node Elementary complex functions |
|
|
|
@section Elementary complex functions |
|
|
|
|
|
|
|
The class @code{cl_N} defines the following operation: |
|
|
@ -968,6 +1166,7 @@ We have the relations |
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
|
|
@node Comparisons |
|
|
|
@section Comparisons |
|
|
|
@cindex comparison |
|
|
|
|
|
|
@ -1038,6 +1237,7 @@ For example, @code{(cl_F)(cl_R)"1/3" == (cl_R)"1/3"} returns false because |
|
|
|
there is no floating point number whose value is exactly @code{1/3}. |
|
|
|
|
|
|
|
|
|
|
|
@node Rounding functions |
|
|
|
@section Rounding functions |
|
|
|
@cindex rounding |
|
|
|
|
|
|
@ -1257,6 +1457,7 @@ The classes @code{cl_R}, @code{cl_I} define the following operations: |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Roots |
|
|
|
@section Roots |
|
|
|
|
|
|
|
Each of the classes @code{cl_R}, |
|
|
@ -1319,6 +1520,7 @@ The result is an exact number only if @code{z} is an exact number. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Transcendental functions |
|
|
|
@section Transcendental functions |
|
|
|
@cindex transcendental functions |
|
|
|
|
|
|
@ -1328,6 +1530,15 @@ inexact numbers even if the argument is exact. |
|
|
|
For example, @code{cos(0) = 1} returns the rational number @code{1}. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Exponential and logarithmic functions:: |
|
|
|
* Trigonometric functions:: |
|
|
|
* Hyperbolic functions:: |
|
|
|
* Euler gamma:: |
|
|
|
* Riemann zeta:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Exponential and logarithmic functions |
|
|
|
@subsection Exponential and logarithmic functions |
|
|
|
|
|
|
|
@table @code |
|
|
@ -1388,6 +1599,7 @@ Returns e as a float of format @code{default_float_format}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Trigonometric functions |
|
|
|
@subsection Trigonometric functions |
|
|
|
|
|
|
|
@table @code |
|
|
@ -1504,6 +1716,7 @@ Returns pi as a float of format @code{default_float_format}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Hyperbolic functions |
|
|
|
@subsection Hyperbolic functions |
|
|
|
|
|
|
|
@table @code |
|
|
@ -1645,6 +1858,7 @@ Proof: Write z = x+iy. Examine |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Euler gamma |
|
|
|
@subsection Euler gamma |
|
|
|
@cindex Euler's constant |
|
|
|
|
|
|
@ -1678,6 +1892,7 @@ Returns Catalan's constant as a float of format @code{default_float_format}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Riemann zeta |
|
|
|
@subsection Riemann zeta |
|
|
|
@cindex Riemann's zeta |
|
|
|
|
|
|
@ -1698,8 +1913,16 @@ Returns Riemann's zeta function at @code{s} as a float of format |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Functions on integers |
|
|
|
@section Functions on integers |
|
|
|
|
|
|
|
@menu |
|
|
|
* Logical functions:: |
|
|
|
* Number theoretic functions:: |
|
|
|
* Combinatorial functions:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Logical functions |
|
|
|
@subsection Logical functions |
|
|
|
|
|
|
|
Integers, when viewed as in two's complement notation, can be thought as |
|
|
@ -1920,6 +2143,7 @@ If @code{x} = 2^(n-1), it returns n. Else it returns 0. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Number theoretic functions |
|
|
|
@subsection Number theoretic functions |
|
|
|
|
|
|
|
@table @code |
|
|
@ -1977,6 +2201,7 @@ Returns the smallest probable prime >=@code{x}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Combinatorial functions |
|
|
|
@subsection Combinatorial functions |
|
|
|
|
|
|
|
@table @code |
|
|
@ -2005,6 +2230,7 @@ for 0 <= k <= n, 0 else. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Functions on floating-point numbers |
|
|
|
@section Functions on floating-point numbers |
|
|
|
|
|
|
|
Recall that a floating-point number consists of a sign @code{s}, an |
|
|
@ -2111,9 +2337,16 @@ zero, it is treated as positive. Same for @code{y}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Conversion functions |
|
|
|
@section Conversion functions |
|
|
|
@cindex conversion |
|
|
|
|
|
|
|
@menu |
|
|
|
* Conversion to floating-point numbers:: |
|
|
|
* Conversion to rational numbers:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Conversion to floating-point numbers |
|
|
|
@subsection Conversion to floating-point numbers |
|
|
|
|
|
|
|
The type @code{float_format_t} describes a floating-point format. |
|
|
@ -2183,6 +2416,7 @@ Returns the smallest floating point number e > 0 such that @code{1-e != 1}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Conversion to rational numbers |
|
|
|
@subsection Conversion to rational numbers |
|
|
|
|
|
|
|
Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_F} |
|
|
@ -2219,6 +2453,7 @@ If @code{x} is any float, one has |
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
|
|
@node Random number generators |
|
|
|
@section Random number generators |
|
|
|
|
|
|
|
|
|
|
@ -2267,6 +2502,7 @@ if @code{n} is a float. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Obfuscating operators |
|
|
|
@section Obfuscating operators |
|
|
|
@cindex modifying operators |
|
|
|
|
|
|
@ -2339,9 +2575,17 @@ In CLN @samp{x += y;} is exactly the same as @samp{x = x+y;}, not more |
|
|
|
efficient. |
|
|
|
|
|
|
|
|
|
|
|
@node Input/Output |
|
|
|
@chapter Input/Output |
|
|
|
@cindex Input/Output |
|
|
|
|
|
|
|
@menu |
|
|
|
* Internal and printed representation:: |
|
|
|
* Input functions:: |
|
|
|
* Output functions:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Internal and printed representation |
|
|
|
@section Internal and printed representation |
|
|
|
@cindex representation |
|
|
|
|
|
|
@ -2416,6 +2660,7 @@ In Common Lisp notation: @code{#C(@var{realpart} @var{imagpart})}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Input functions |
|
|
|
@section Input functions |
|
|
|
|
|
|
|
Including @code{<cln/io.h>} defines a number of simple input functions |
|
|
@ -2512,6 +2757,7 @@ precision corresponding to their number of significant digits. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Output functions |
|
|
|
@section Output functions |
|
|
|
|
|
|
|
Including @code{<cln/io.h>} defines a number of simple output functions |
|
|
@ -2603,6 +2849,7 @@ The global variable @code{default_print_flags} contains the default values, |
|
|
|
used by the function @code{fprint}. |
|
|
|
|
|
|
|
|
|
|
|
@node Rings |
|
|
|
@chapter Rings |
|
|
|
|
|
|
|
CLN has a class of abstract rings. |
|
|
@ -2679,9 +2926,16 @@ Tests whether the given number is an element of the number ring R. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Modular integers |
|
|
|
@chapter Modular integers |
|
|
|
@cindex modular integer |
|
|
|
|
|
|
|
@menu |
|
|
|
* Modular integer rings:: |
|
|
|
* Functions on modular integers:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Modular integer rings |
|
|
|
@section Modular integer rings |
|
|
|
@cindex ring |
|
|
|
|
|
|
@ -2741,6 +2995,7 @@ to @code{find_modint_ring} with the same argument necessarily return the |
|
|
|
same ring because it is memoized in the cache table. |
|
|
|
@end table |
|
|
|
|
|
|
|
@node Functions on modular integers |
|
|
|
@section Functions on modular integers |
|
|
|
|
|
|
|
Given a modular integer ring @code{R}, the following members can be used. |
|
|
@ -2855,11 +3110,18 @@ on the global printer settings in the variable @code{default_print_flags}. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Symbolic data types |
|
|
|
@chapter Symbolic data types |
|
|
|
@cindex symbolic type |
|
|
|
|
|
|
|
CLN implements two symbolic (non-numeric) data types: strings and symbols. |
|
|
|
|
|
|
|
@menu |
|
|
|
* Strings:: |
|
|
|
* Symbols:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Strings |
|
|
|
@section Strings |
|
|
|
@cindex string |
|
|
|
@cindex @code{cl_string} |
|
|
@ -2908,6 +3170,7 @@ Compares two strings for equality. One of the arguments may also be a |
|
|
|
plain @code{const char *}. |
|
|
|
@end table |
|
|
|
|
|
|
|
@node Symbols |
|
|
|
@section Symbols |
|
|
|
@cindex symbol |
|
|
|
@cindex @code{cl_symbol} |
|
|
@ -2939,10 +3202,18 @@ Compares two symbols for equality. This is very fast. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node Univariate polynomials |
|
|
|
@chapter Univariate polynomials |
|
|
|
@cindex polynomial |
|
|
|
@cindex univariate polynomial |
|
|
|
|
|
|
|
@menu |
|
|
|
* Univariate polynomial rings:: |
|
|
|
* Functions on univariate polynomials:: |
|
|
|
* Special polynomials:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Univariate polynomial rings |
|
|
|
@section Univariate polynomial rings |
|
|
|
|
|
|
|
CLN implements univariate polynomials (polynomials in one variable) over an |
|
|
@ -3051,6 +3322,7 @@ These functions are equivalent to the general @code{find_univpoly_ring}, |
|
|
|
only the return type is more specific, according to the base ring's type. |
|
|
|
@end table |
|
|
|
|
|
|
|
@node Functions on univariate polynomials |
|
|
|
@section Functions on univariate polynomials |
|
|
|
|
|
|
|
Given a univariate polynomial ring @code{R}, the following members can be used. |
|
|
@ -3182,6 +3454,7 @@ depend on the global printer settings in the variable |
|
|
|
@code{default_print_flags}. |
|
|
|
@end table |
|
|
|
|
|
|
|
@node Special polynomials |
|
|
|
@section Special polynomials |
|
|
|
|
|
|
|
The following functions return special polynomials. |
|
|
@ -3213,8 +3486,17 @@ of these polynomials from their definition can be found in the |
|
|
|
@code{doc/polynomial/} directory. |
|
|
|
|
|
|
|
|
|
|
|
@node Internals |
|
|
|
@chapter Internals |
|
|
|
|
|
|
|
@menu |
|
|
|
* Why C++ ?:: |
|
|
|
* Memory efficiency:: |
|
|
|
* Speed efficiency:: |
|
|
|
* Garbage collection:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Why C++ ? |
|
|
|
@section Why C++ ? |
|
|
|
@cindex advocacy |
|
|
|
|
|
|
@ -3252,6 +3534,7 @@ debugged. No need to rewrite it in a low-level language after having prototyped |
|
|
|
in a high-level language. |
|
|
|
|
|
|
|
|
|
|
|
@node Memory efficiency |
|
|
|
@section Memory efficiency |
|
|
|
|
|
|
|
In order to save memory allocations, CLN implements: |
|
|
@ -3275,6 +3558,7 @@ on the heap. |
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
|
|
@node Speed efficiency |
|
|
|
@section Speed efficiency |
|
|
|
|
|
|
|
Speed efficiency is obtained by the combination of the following tricks |
|
|
@ -3320,6 +3604,7 @@ of division and radix conversion. |
|
|
|
@end itemize |
|
|
|
|
|
|
|
|
|
|
|
@node Garbage collection |
|
|
|
@section Garbage collection |
|
|
|
@cindex garbage collection |
|
|
|
|
|
|
@ -3337,6 +3622,7 @@ resized. The effect of this strategy is that recently used rings remain |
|
|
|
cached, whereas undue memory consumption through cached rings is avoided. |
|
|
|
|
|
|
|
|
|
|
|
@node Using the library |
|
|
|
@chapter Using the library |
|
|
|
|
|
|
|
For the following discussion, we will assume that you have installed |
|
|
@ -3346,6 +3632,15 @@ For example, for me it's @code{CLN_DIR="$HOME/cln"} and |
|
|
|
environment variables, or directly substitute the appropriate values. |
|
|
|
|
|
|
|
|
|
|
|
@menu |
|
|
|
* Compiler options:: |
|
|
|
* Include files:: |
|
|
|
* An Example:: |
|
|
|
* Debugging support:: |
|
|
|
* Reporting Problems:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Compiler options |
|
|
|
@section Compiler options |
|
|
|
@cindex compiler options |
|
|
|
|
|
|
@ -3398,6 +3693,7 @@ PKG_CHECK_MODULES([CLN], [cln >= @var{MIN-VERSION}], [], |
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
@node Include files |
|
|
|
@section Include files |
|
|
|
@cindex include files |
|
|
|
@cindex header files |
|
|
@ -3528,6 +3824,7 @@ Includes all of the above. |
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@node An Example |
|
|
|
@section An Example |
|
|
|
|
|
|
|
A function which computes the nth Fibonacci number can be written as follows. |
|
|
@ -3598,6 +3895,7 @@ gets passed to the caller. |
|
|
|
The file @code{fibonacci.cc} in the subdirectory @code{examples} |
|
|
|
contains this implementation together with an even faster algorithm. |
|
|
|
|
|
|
|
@node Debugging support |
|
|
|
@section Debugging support |
|
|
|
@cindex debugging |
|
|
|
|
|
|
@ -3668,6 +3966,7 @@ $7 = @{<cl_gcpointer> = @{ = @{pointer = 0x8055b60, heappointer = 0x8055b60, |
|
|
|
Unfortunately, this feature does not seem to work under all circumstances. |
|
|
|
@end itemize |
|
|
|
|
|
|
|
@node Reporting Problems |
|
|
|
@section Reporting Problems |
|
|
|
@cindex bugreports |
|
|
|
@cindex mailing list |
|
|
@ -3682,9 +3981,18 @@ expect will help us to reproduce it quickly. Finally, do not forget to |
|
|
|
report the version number of CLN. |
|
|
|
|
|
|
|
|
|
|
|
@node Customizing |
|
|
|
@chapter Customizing |
|
|
|
@cindex customizing |
|
|
|
|
|
|
|
@menu |
|
|
|
* Error handling:: |
|
|
|
* Floating-point underflow:: |
|
|
|
* Customizing I/O:: |
|
|
|
* Customizing the memory allocator:: |
|
|
|
@end menu |
|
|
|
|
|
|
|
@node Error handling |
|
|
|
@section Error handling |
|
|
|
@cindex exception |
|
|
|
@cindex error handling |
|
|
@ -3719,6 +4027,7 @@ declared in the public header files and they are all subclasses of the |
|
|
|
above exceptions, so catching those you are always on the safe side. |
|
|
|
|
|
|
|
|
|
|
|
@node Floating-point underflow |
|
|
|
@section Floating-point underflow |
|
|
|
@cindex underflow |
|
|
|
|
|
|
@ -3737,6 +4046,7 @@ zero will be generated instead. The default value of |
|
|
|
@code{cl_inhibit_floating_point_underflow} is @code{false}. |
|
|
|
|
|
|
|
|
|
|
|
@node Customizing I/O |
|
|
|
@section Customizing I/O |
|
|
|
|
|
|
|
The output of the function @code{fprint} may be customized by changing the |
|
|
@ -3744,6 +4054,7 @@ value of the global variable @code{default_print_flags}. |
|
|
|
@cindex @code{default_print_flags} |
|
|
|
|
|
|
|
|
|
|
|
@node Customizing the memory allocator |
|
|
|
@section Customizing the memory allocator |
|
|
|
|
|
|
|
Every memory allocation of CLN is done through the function pointer |
|
|
@ -3774,6 +4085,7 @@ global variables. |
|
|
|
|
|
|
|
@c Indices |
|
|
|
|
|
|
|
@node Index, , Customizing, Top |
|
|
|
@unnumbered Index |
|
|
|
|
|
|
|
@printindex my |
|
|
|