Browse Source

Add @node lines and @menu lists.

master
Bruno Haible 17 years ago
parent
commit
77df36c038
  1. 320
      doc/cln.texi

320
doc/cln.texi

@ -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

Loading…
Cancel
Save