]> www.ginac.de Git - cln.git/blob - doc/cln.tex
* Bump dates, version numbers, etc, for 1.1.4-release...
[cln.git] / doc / cln.tex
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename cln.info
4 @settitle CLN, a Class Library for Numbers
5 @c @setchapternewpage off
6 @c For `info' only.
7 @paragraphindent 0
8 @c For TeX only.
9 @iftex
10 @c I hate putting "@noindent" in front of every paragraph.
11 @parindent=0pt
12 @end iftex
13 @c %**end of header
14
15 @direntry
16 * CLN: (cln).                       Class Library for Numbers (C++).
17 @end direntry
18
19 @c My own index.
20 @defindex my
21 @c Don't need the other types of indices.
22 @synindex cp my
23 @synindex fn my
24 @synindex vr my
25 @synindex ky my
26 @synindex pg my
27 @synindex tp my
28
29
30 @c For `info' only.
31 @ifinfo
32 This file documents @sc{cln}, a Class Library for Numbers.
33
34 Published by Bruno Haible, @code{<haible@@clisp.cons.org>} and
35 Richard Kreckel, @code{<kreckel@@ginac.de>}.
36
37 Copyright (C)  Bruno Haible 1995, 1996, 1997, 1998, 1999, 2000, 2001.
38 Copyright (C)  Richard Kreckel 2000, 2001, 2002.
39
40 Permission is granted to make and distribute verbatim copies of
41 this manual provided the copyright notice and this permission notice
42 are preserved on all copies.
43
44 @ignore
45 Permission is granted to process this file through TeX and print the
46 results, provided the printed document carries copying permission
47 notice identical to this one except for the removal of this paragraph
48 (this paragraph not being relevant to the printed manual).
49
50 @end ignore
51 Permission is granted to copy and distribute modified versions of this
52 manual under the conditions for verbatim copying, provided that the entire
53 resulting derived work is distributed under the terms of a permission
54 notice identical to this one.
55
56 Permission is granted to copy and distribute translations of this manual
57 into another language, under the above conditions for modified versions,
58 except that this permission notice may be stated in a translation approved
59 by the author.
60 @end ifinfo
61
62
63 @c For TeX only.
64 @c prevent ugly black rectangles on overfull hbox lines:
65 @finalout
66 @titlepage
67 @title CLN, a Class Library for Numbers
68
69 @author by Bruno Haible
70 @page
71 @vskip 0pt plus 1filll
72 Copyright @copyright{} Bruno Haible 1995, 1996, 1997, 1998, 1999, 2000, 2001.
73 @sp 0
74 Copyright @copyright{} Richard Kreckel 2000, 2001.
75
76 @sp 2
77 Published by Bruno Haible, @code{<haible@@clisp.cons.org>} and
78 Richard Kreckel, @code{<kreckel@@ginac.de>}.
79
80 Permission is granted to make and distribute verbatim copies of
81 this manual provided the copyright notice and this permission notice
82 are preserved on all copies.
83
84 Permission is granted to copy and distribute modified versions of this
85 manual under the conditions for verbatim copying, provided that the entire
86 resulting derived work is distributed under the terms of a permission
87 notice identical to this one.
88
89 Permission is granted to copy and distribute translations of this manual
90 into another language, under the above conditions for modified versions,
91 except that this permission notice may be stated in a translation approved
92 by the author.
93
94 @end titlepage
95 @page
96
97
98 @node Top, Introduction, (dir), (dir)
99
100 @c @menu
101 @c * Introduction::                Introduction
102 @c @end menu
103
104
105 @node Introduction, Top, Top, Top
106 @comment node-name, next, previous, up
107 @chapter Introduction
108
109 @noindent
110 CLN is a library for computations with all kinds of numbers.
111 It has a rich set of number classes:
112
113 @itemize @bullet
114 @item
115 Integers (with unlimited precision),
116
117 @item
118 Rational numbers,
119
120 @item
121 Floating-point numbers:
122
123 @itemize @minus
124 @item
125 Short float,
126 @item
127 Single float,
128 @item
129 Double float,
130 @item
131 Long float (with unlimited precision),
132 @end itemize
133
134 @item
135 Complex numbers,
136
137 @item
138 Modular integers (integers modulo a fixed integer),
139
140 @item
141 Univariate polynomials.
142 @end itemize
143
144 @noindent
145 The subtypes of the complex numbers among these are exactly the
146 types of numbers known to the Common Lisp language. Therefore
147 @code{CLN} can be used for Common Lisp implementations, giving
148 @samp{CLN} another meaning: it becomes an abbreviation of
149 ``Common Lisp Numbers''.
150
151 @noindent
152 The CLN package implements
153
154 @itemize @bullet
155 @item
156 Elementary functions (@code{+}, @code{-}, @code{*}, @code{/}, @code{sqrt},
157 comparisons, @dots{}),
158
159 @item
160 Logical functions (logical @code{and}, @code{or}, @code{not}, @dots{}),
161
162 @item
163 Transcendental functions (exponential, logarithmic, trigonometric, hyperbolic
164 functions and their inverse functions).
165 @end itemize
166
167 @noindent
168 CLN is a C++ library. Using C++ as an implementation language provides
169
170 @itemize @bullet
171 @item
172 efficiency: it compiles to machine code,
173 @item
174 type safety: the C++ compiler knows about the number types and complains
175 if, for example, you try to assign a float to an integer variable.
176 @item
177 algebraic syntax: You can use the @code{+}, @code{-}, @code{*}, @code{=},
178 @code{==}, @dots{} operators as in C or C++.
179 @end itemize
180
181 @noindent
182 CLN is memory efficient:
183
184 @itemize @bullet
185 @item
186 Small integers and short floats are immediate, not heap allocated.
187 @item
188 Heap-allocated memory is reclaimed through an automatic, non-interruptive
189 garbage collection.
190 @end itemize
191
192 @noindent
193 CLN is speed efficient:
194
195 @itemize @bullet
196 @item
197 The kernel of CLN has been written in assembly language for some CPUs
198 (@code{i386}, @code{m68k}, @code{sparc}, @code{mips}, @code{arm}).
199 @item
200 @cindex GMP
201 On all CPUs, CLN may be configured to use the superefficient low-level
202 routines from GNU GMP version 3.
203 @item
204 It uses Karatsuba multiplication, which is significantly faster
205 for large numbers than the standard multiplication algorithm.
206 @item
207 For very large numbers (more than 12000 decimal digits), it uses
208 @iftex
209 Sch{@"o}nhage-Strassen
210 @cindex Sch{@"o}nhage-Strassen multiplication
211 @end iftex
212 @ifinfo
213 Schönhage-Strassen
214 @cindex Schönhage-Strassen multiplication
215 @end ifinfo
216 multiplication, which is an asymptotically optimal multiplication
217 algorithm, for multiplication, division and radix conversion.
218 @end itemize
219
220 @noindent
221 CLN aims at being easily integrated into larger software packages:
222
223 @itemize @bullet
224 @item
225 The garbage collection imposes no burden on the main application.
226 @item
227 The library provides hooks for memory allocation and exceptions.
228 @item
229 @cindex namespace
230 All non-macro identifiers are hidden in namespace @code{cln} in 
231 order to avoid name clashes.
232 @end itemize
233
234
235 @chapter Installation
236
237 This section describes how to install the CLN package on your system.
238
239
240 @section Prerequisites
241
242 @subsection C++ compiler
243
244 To build CLN, you need a C++ compiler.
245 Actually, you need GNU @code{g++ 2.95} or newer.
246
247 The following C++ features are used:
248 classes, member functions, overloading of functions and operators,
249 constructors and destructors, inline, const, multiple inheritance,
250 templates and namespaces.
251
252 The following C++ features are not used:
253 @code{new}, @code{delete}, virtual inheritance, exceptions.
254
255 CLN relies on semi-automatic ordering of initializations
256 of static and global variables, a feature which I could
257 implement for GNU g++ only.
258
259 @ignore
260 @comment cl_modules.h requires g++
261 Therefore nearly any C++ compiler will do.
262
263 The following C++ compilers are known to compile CLN:
264 @itemize @minus
265 @item
266 GNU @code{g++ 2.7.0}, @code{g++ 2.7.2}
267 @item
268 SGI @code{CC 4}
269 @end itemize
270
271 The following C++ compilers are known to be unusable for CLN:
272 @itemize @minus
273 @item
274 On SunOS 4, @code{CC 2.1}, because it doesn't grok @code{//} comments
275 in lines containing @code{#if} or @code{#elif} preprocessor commands.
276 @item
277 On AIX 3.2.5, @code{xlC}, because it doesn't grok the template syntax
278 in @code{cl_SV.h} and @code{cl_GV.h}, because it forces most class types
279 to have default constructors, and because it probably miscompiles the
280 integer multiplication routines.
281 @item
282 On AIX 4.1.4.0, @code{xlC}, because when optimizing, it sometimes converts
283 @code{short}s to @code{int}s by zero-extend.
284 @item
285 GNU @code{g++ 2.5.8}
286 @item
287 On HPPA, GNU @code{g++ 2.7.x}, because the semi-automatic ordering of
288 initializations will not work.
289 @end itemize
290 @end ignore
291
292 @subsection Make utility
293 @cindex @code{make}
294
295 To build CLN, you also need to have GNU @code{make} installed.
296
297 @subsection Sed utility
298 @cindex @code{sed}
299
300 To build CLN on HP-UX, you also need to have GNU @code{sed} installed.
301 This is because the libtool script, which creates the CLN library, relies
302 on @code{sed}, and the vendor's @code{sed} utility on these systems is too
303 limited.
304
305
306 @section Building the library
307
308 As with any autoconfiguring GNU software, installation is as easy as this:
309
310 @example
311 $ ./configure
312 $ make
313 $ make check
314 @end example
315
316 If on your system, @samp{make} is not GNU @code{make}, you have to use
317 @samp{gmake} instead of @samp{make} above.
318
319 The @code{configure} command checks out some features of your system and
320 C++ compiler and builds the @code{Makefile}s. The @code{make} command
321 builds the library. This step may take about an hour on an average workstation.
322 The @code{make check} runs some test to check that no important subroutine
323 has been miscompiled.
324
325 The @code{configure} command accepts options. To get a summary of them, try
326
327 @example
328 $ ./configure --help
329 @end example
330
331 Some of the options are explained in detail in the @samp{INSTALL.generic} file.
332
333 You can specify the C compiler, the C++ compiler and their options through
334 the following environment variables when running @code{configure}:
335
336 @table @code
337 @item CC
338 Specifies the C compiler.
339
340 @item CFLAGS
341 Flags to be given to the C compiler when compiling programs (not when linking).
342
343 @item CXX
344 Specifies the C++ compiler.
345
346 @item CXXFLAGS
347 Flags to be given to the C++ compiler when compiling programs (not when linking).
348 @end table
349
350 Examples:
351
352 @example
353 $ CC="gcc" CFLAGS="-O" CXX="g++" CXXFLAGS="-O" ./configure
354 $ CC="gcc -V egcs-2.91.60" CFLAGS="-O -g" \
355   CXX="g++ -V egcs-2.91.60" CXXFLAGS="-O -g" ./configure
356 $ CC="gcc -V 2.95.2" CFLAGS="-O2 -fno-exceptions" \
357   CXX="g++ -V 2.95.2" CFLAGS="-O2 -fno-exceptions" ./configure
358 @end example
359 @ignore
360 @comment cl_modules.h requires g++
361 You should not mix GNU and non-GNU compilers. So, if @code{CXX} is a non-GNU
362 compiler, @code{CC} should be set to a non-GNU compiler as well. Examples:
363
364 @example
365 $ CC="cc" CFLAGS="-O" CXX="CC" CXXFLAGS="-O" ./configure
366 $ CC="gcc -V 2.7.0" CFLAGS="-g" CXX="g++ -V 2.7.0" CXXFLAGS="-g" ./configure
367 @end example
368
369 On SGI Irix 5, if you wish not to use @code{g++}:
370
371 @example
372 $ CC="cc" CFLAGS="-O" CXX="CC" CXXFLAGS="-O -Olimit 16000" ./configure
373 @end example
374
375 On SGI Irix 6, if you wish not to use @code{g++}:
376
377 @example
378 $ CC="cc -32" CFLAGS="-O" CXX="CC -32" CXXFLAGS="-O -Olimit 34000" \
379   ./configure --without-gmp
380 $ CC="cc -n32" CFLAGS="-O" CXX="CC -n32" CXXFLAGS="-O \
381   -OPT:const_copy_limit=32400 -OPT:global_limit=32400 -OPT:fprop_limit=4000" \
382   ./configure --without-gmp
383 @end example
384 @end ignore
385
386 Note that for these environment variables to take effect, you have to set
387 them (assuming a Bourne-compatible shell) on the same line as the
388 @code{configure} command. If you made the settings in earlier shell
389 commands, you have to @code{export} the environment variables before
390 calling @code{configure}. In a @code{csh} shell, you have to use the
391 @samp{setenv} command for setting each of the environment variables.
392
393 Currently CLN works only with the GNU @code{g++} compiler, and only in
394 optimizing mode. So you should specify at least @code{-O} in the CXXFLAGS,
395 or no CXXFLAGS at all. (If CXXFLAGS is not set, CLN will use @code{-O}.)
396
397 If you use @code{g++} gcc-2.95.x or gcc-3.0, I recommend adding
398 @samp{-fno-exceptions} to the CXXFLAGS. This will likely generate better code.
399
400 If you use @code{g++} from gcc-2.95.x on Sparc, add either @samp{-O},
401 @samp{-O1} or @samp{-O2 -fno-schedule-insns} to the CXXFLAGS. With full
402 @samp{-O2}, @code{g++} miscompiles the division routines. If you use 
403 @code{g++} older than 2.95.3 on Sparc you should also specify 
404 @samp{--disable-shared} because of bad code produced in the shared 
405 library. Also, on OSF/1 or Tru64 using gcc-2.95.x, you should specify 
406 @samp{--disable-shared} because of linker problems with duplicate symbols 
407 in shared libraries.
408
409 By default, both a shared and a static library are built.  You can build
410 CLN as a static (or shared) library only, by calling @code{configure} with
411 the option @samp{--disable-shared} (or @samp{--disable-static}).  While
412 shared libraries are usually more convenient to use, they may not work
413 on all architectures.  Try disabling them if you run into linker
414 problems.  Also, they are generally somewhat slower than static
415 libraries so runtime-critical applications should be linked statically.
416
417
418 @subsection Using the GNU MP Library
419 @cindex GMP
420
421 Starting with version 1.1, CLN may be configured to make use of a
422 preinstalled @code{gmp} library.  Please make sure that you have at
423 least @code{gmp} version 3.0 installed since earlier versions are
424 unsupported and likely not to work.  Enabling this feature by calling
425 @code{configure} with the option @samp{--with-gmp} is known to be quite
426 a boost for CLN's performance.
427
428 If you have installed the @code{gmp} library and its header file in
429 some place where your compiler cannot find it by default, you must help
430 @code{configure} by setting @code{CPPFLAGS} and @code{LDFLAGS}.  Here is
431 an example:
432
433 @example
434 $ CC="gcc" CFLAGS="-O2" CXX="g++" CXXFLAGS="-O2 -fno-exceptions" \
435   CPPFLAGS="-I/opt/gmp/include" LDFLAGS="-L/opt/gmp/lib" ./configure --with-gmp
436 @end example
437
438
439 @section Installing the library
440 @cindex installation
441
442 As with any autoconfiguring GNU software, installation is as easy as this:
443
444 @example
445 $ make install
446 @end example
447
448 The @samp{make install} command installs the library and the include files
449 into public places (@file{/usr/local/lib/} and @file{/usr/local/include/},
450 if you haven't specified a @code{--prefix} option to @code{configure}).
451 This step may require superuser privileges.
452
453 If you have already built the library and wish to install it, but didn't
454 specify @code{--prefix=@dots{}} at configure time, just re-run
455 @code{configure}, giving it the same options as the first time, plus
456 the @code{--prefix=@dots{}} option.
457
458
459 @section Cleaning up
460
461 You can remove system-dependent files generated by @code{make} through
462
463 @example
464 $ make clean
465 @end example
466
467 You can remove all files generated by @code{make}, thus reverting to a
468 virgin distribution of CLN, through
469
470 @example
471 $ make distclean
472 @end example
473
474
475 @chapter Ordinary number types
476
477 CLN implements the following class hierarchy:
478
479 @example
480                         Number
481                       cl_number
482                     <cln/number.h>
483                           |
484                           |
485                  Real or complex number
486                         cl_N
487                     <cln/complex.h>
488                           |
489                           |
490                      Real number
491                         cl_R
492                      <cln/real.h>
493                           |
494       +-------------------+-------------------+
495       |                                       |
496 Rational number                     Floating-point number
497     cl_RA                                   cl_F
498 <cln/rational.h>                         <cln/float.h>
499       |                                       |
500       |                +--------------+--------------+--------------+
501    Integer             |              |              |              |
502     cl_I          Short-Float    Single-Float   Double-Float    Long-Float
503 <cln/integer.h>      cl_SF          cl_FF          cl_DF          cl_LF
504                  <cln/sfloat.h> <cln/ffloat.h> <cln/dfloat.h> <cln/lfloat.h>
505 @end example
506
507 @cindex @code{cl_number}
508 @cindex abstract class
509 The base class @code{cl_number} is an abstract base class.
510 It is not useful to declare a variable of this type except if you want
511 to completely disable compile-time type checking and use run-time type
512 checking instead.
513
514 @cindex @code{cl_N}
515 @cindex real number
516 @cindex complex number
517 The class @code{cl_N} comprises real and complex numbers. There is
518 no special class for complex numbers since complex numbers with imaginary
519 part @code{0} are automatically converted to real numbers.
520
521 @cindex @code{cl_R}
522 The class @code{cl_R} comprises real numbers of different kinds. It is an
523 abstract class.
524
525 @cindex @code{cl_RA}
526 @cindex rational number
527 @cindex integer
528 The class @code{cl_RA} comprises exact real numbers: rational numbers, including
529 integers. There is no special class for non-integral rational numbers
530 since rational numbers with denominator @code{1} are automatically converted
531 to integers.
532
533 @cindex @code{cl_F}
534 The class @code{cl_F} implements floating-point approximations to real numbers.
535 It is an abstract class.
536
537
538 @section Exact numbers
539 @cindex exact number
540
541 Some numbers are represented as exact numbers: there is no loss of information
542 when such a number is converted from its mathematical value to its internal
543 representation. On exact numbers, the elementary operations (@code{+},
544 @code{-}, @code{*}, @code{/}, comparisons, @dots{}) compute the completely
545 correct result.
546
547 In CLN, the exact numbers are:
548
549 @itemize @bullet
550 @item
551 rational numbers (including integers),
552 @item
553 complex numbers whose real and imaginary parts are both rational numbers.
554 @end itemize
555
556 Rational numbers are always normalized to the form
557 @code{@var{numerator}/@var{denominator}} where the numerator and denominator
558 are coprime integers and the denominator is positive. If the resulting
559 denominator is @code{1}, the rational number is converted to an integer.
560
561 @cindex immediate numbers
562 Small integers (typically in the range @code{-2^29}@dots{}@code{2^29-1},
563 for 32-bit machines) are especially efficient, because they consume no heap
564 allocation. Otherwise the distinction between these immediate integers
565 (called ``fixnums'') and heap allocated integers (called ``bignums'')
566 is completely transparent.
567
568
569 @section Floating-point numbers
570 @cindex floating-point number
571
572 Not all real numbers can be represented exactly. (There is an easy mathematical
573 proof for this: Only a countable set of numbers can be stored exactly in
574 a computer, even if one assumes that it has unlimited storage. But there
575 are uncountably many real numbers.) So some approximation is needed.
576 CLN implements ordinary floating-point numbers, with mantissa and exponent.
577
578 @cindex rounding error
579 The elementary operations (@code{+}, @code{-}, @code{*}, @code{/}, @dots{})
580 only return approximate results. For example, the value of the expression
581 @code{(cl_F) 0.3 + (cl_F) 0.4} prints as @samp{0.70000005}, not as
582 @samp{0.7}. Rounding errors like this one are inevitable when computing
583 with floating-point numbers.
584
585 Nevertheless, CLN rounds the floating-point results of the operations @code{+},
586 @code{-}, @code{*}, @code{/}, @code{sqrt} according to the ``round-to-even''
587 rule: It first computes the exact mathematical result and then returns the
588 floating-point number which is nearest to this. If two floating-point numbers
589 are equally distant from the ideal result, the one with a @code{0} in its least
590 significant mantissa bit is chosen.
591
592 Similarly, testing floating point numbers for equality @samp{x == y}
593 is gambling with random errors. Better check for @samp{abs(x - y) < epsilon}
594 for some well-chosen @code{epsilon}.
595
596 Floating point numbers come in four flavors:
597
598 @itemize @bullet
599 @item
600 @cindex @code{cl_SF}
601 Short floats, type @code{cl_SF}.
602 They have 1 sign bit, 8 exponent bits (including the exponent's sign),
603 and 17 mantissa bits (including the ``hidden'' bit).
604 They don't consume heap allocation.
605
606 @item
607 @cindex @code{cl_FF}
608 Single floats, type @code{cl_FF}.
609 They have 1 sign bit, 8 exponent bits (including the exponent's sign),
610 and 24 mantissa bits (including the ``hidden'' bit).
611 In CLN, they are represented as IEEE single-precision floating point numbers.
612 This corresponds closely to the C/C++ type @samp{float}.
613
614 @item
615 @cindex @code{cl_DF}
616 Double floats, type @code{cl_DF}.
617 They have 1 sign bit, 11 exponent bits (including the exponent's sign),
618 and 53 mantissa bits (including the ``hidden'' bit).
619 In CLN, they are represented as IEEE double-precision floating point numbers.
620 This corresponds closely to the C/C++ type @samp{double}.
621
622 @item
623 @cindex @code{cl_LF}
624 Long floats, type @code{cl_LF}.
625 They have 1 sign bit, 32 exponent bits (including the exponent's sign),
626 and n mantissa bits (including the ``hidden'' bit), where n >= 64.
627 The precision of a long float is unlimited, but once created, a long float
628 has a fixed precision. (No ``lazy recomputation''.)
629 @end itemize
630
631 Of course, computations with long floats are more expensive than those
632 with smaller floating-point formats.
633
634 CLN does not implement features like NaNs, denormalized numbers and
635 gradual underflow. If the exponent range of some floating-point type
636 is too limited for your application, choose another floating-point type
637 with larger exponent range.
638
639 @cindex @code{cl_F}
640 As a user of CLN, you can forget about the differences between the
641 four floating-point types and just declare all your floating-point
642 variables as being of type @code{cl_F}. This has the advantage that
643 when you change the precision of some computation (say, from @code{cl_DF}
644 to @code{cl_LF}), you don't have to change the code, only the precision
645 of the initial values. Also, many transcendental functions have been
646 declared as returning a @code{cl_F} when the argument is a @code{cl_F},
647 but such declarations are missing for the types @code{cl_SF}, @code{cl_FF},
648 @code{cl_DF}, @code{cl_LF}. (Such declarations would be wrong if
649 the floating point contagion rule happened to change in the future.)
650
651
652 @section Complex numbers
653 @cindex complex number
654
655 Complex numbers, as implemented by the class @code{cl_N}, have a real
656 part and an imaginary part, both real numbers. A complex number whose
657 imaginary part is the exact number @code{0} is automatically converted
658 to a real number.
659
660 Complex numbers can arise from real numbers alone, for example
661 through application of @code{sqrt} or transcendental functions.
662
663
664 @section Conversions
665 @cindex conversion
666
667 Conversions from any class to any its superclasses (``base classes'' in
668 C++ terminology) is done automatically.
669
670 Conversions from the C built-in types @samp{long} and @samp{unsigned long}
671 are provided for the classes @code{cl_I}, @code{cl_RA}, @code{cl_R},
672 @code{cl_N} and @code{cl_number}.
673
674 Conversions from the C built-in types @samp{int} and @samp{unsigned int}
675 are provided for the classes @code{cl_I}, @code{cl_RA}, @code{cl_R},
676 @code{cl_N} and @code{cl_number}. However, these conversions emphasize
677 efficiency. Their range is therefore limited:
678
679 @itemize @minus
680 @item
681 The conversion from @samp{int} works only if the argument is < 2^29 and > -2^29.
682 @item
683 The conversion from @samp{unsigned int} works only if the argument is < 2^29.
684 @end itemize
685
686 In a declaration like @samp{cl_I x = 10;} the C++ compiler is able to
687 do the conversion of @code{10} from @samp{int} to @samp{cl_I} at compile time
688 already. On the other hand, code like @samp{cl_I x = 1000000000;} is
689 in error.
690 So, if you want to be sure that an @samp{int} whose magnitude is not guaranteed
691 to be < 2^29 is correctly converted to a @samp{cl_I}, first convert it to a
692 @samp{long}. Similarly, if a large @samp{unsigned int} is to be converted to a
693 @samp{cl_I}, first convert it to an @samp{unsigned long}.
694
695 Conversions from the C built-in type @samp{float} are provided for the classes
696 @code{cl_FF}, @code{cl_F}, @code{cl_R}, @code{cl_N} and @code{cl_number}.
697
698 Conversions from the C built-in type @samp{double} are provided for the classes
699 @code{cl_DF}, @code{cl_F}, @code{cl_R}, @code{cl_N} and @code{cl_number}.
700
701 Conversions from @samp{const char *} are provided for the classes
702 @code{cl_I}, @code{cl_RA},
703 @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}, @code{cl_F},
704 @code{cl_R}, @code{cl_N}.
705 The easiest way to specify a value which is outside of the range of the
706 C++ built-in types is therefore to specify it as a string, like this:
707 @cindex Rubik's cube
708 @example
709    cl_I order_of_rubiks_cube_group = "43252003274489856000";
710 @end example
711 Note that this conversion is done at runtime, not at compile-time.
712
713 Conversions from @code{cl_I} to the C built-in types @samp{int},
714 @samp{unsigned int}, @samp{long}, @samp{unsigned long} are provided through
715 the functions
716
717 @table @code
718 @item int cl_I_to_int (const cl_I& x)
719 @cindex @code{cl_I_to_int ()}
720 @itemx unsigned int cl_I_to_uint (const cl_I& x)
721 @cindex @code{cl_I_to_uint ()}
722 @itemx long cl_I_to_long (const cl_I& x)
723 @cindex @code{cl_I_to_long ()}
724 @itemx unsigned long cl_I_to_ulong (const cl_I& x)
725 @cindex @code{cl_I_to_ulong ()}
726 Returns @code{x} as element of the C type @var{ctype}. If @code{x} is not
727 representable in the range of @var{ctype}, a runtime error occurs.
728 @end table
729
730 Conversions from the classes @code{cl_I}, @code{cl_RA},
731 @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}, @code{cl_F} and
732 @code{cl_R}
733 to the C built-in types @samp{float} and @samp{double} are provided through
734 the functions
735
736 @table @code
737 @item float float_approx (const @var{type}& x)
738 @cindex @code{float_approx ()}
739 @itemx double double_approx (const @var{type}& x)
740 @cindex @code{double_approx ()}
741 Returns an approximation of @code{x} of C type @var{ctype}.
742 If @code{abs(x)} is too close to 0 (underflow), 0 is returned.
743 If @code{abs(x)} is too large (overflow), an IEEE infinity is returned.
744 @end table
745
746 Conversions from any class to any of its subclasses (``derived classes'' in
747 C++ terminology) are not provided. Instead, you can assert and check
748 that a value belongs to a certain subclass, and return it as element of that
749 class, using the @samp{As} and @samp{The} macros.
750 @cindex @code{As()()}
751 @code{As(@var{type})(@var{value})} checks that @var{value} belongs to
752 @var{type} and returns it as such.
753 @cindex @code{The()()}
754 @code{The(@var{type})(@var{value})} assumes that @var{value} belongs to
755 @var{type} and returns it as such. It is your responsibility to ensure
756 that this assumption is valid.  Since macros and namespaces don't go
757 together well, there is an equivalent to @samp{The}: the template
758 @samp{the}.
759
760 Example:
761
762 @example
763 @group
764    cl_I x = @dots{};
765    if (!(x >= 0)) abort();
766    cl_I ten_x_a = The(cl_I)(expt(10,x)); // If x >= 0, 10^x is an integer.
767                 // In general, it would be a rational number.
768    cl_I ten_x_b = the<cl_I>(expt(10,x)); // The same as above.
769 @end group
770 @end example
771
772
773 @chapter Functions on numbers
774
775 Each of the number classes declares its mathematical operations in the
776 corresponding include file. For example, if your code operates with
777 objects of type @code{cl_I}, it should @code{#include <cln/integer.h>}.
778
779
780 @section Constructing numbers
781
782 Here is how to create number objects ``from nothing''.
783
784
785 @subsection Constructing integers
786
787 @code{cl_I} objects are most easily constructed from C integers and from
788 strings. See @ref{Conversions}.
789
790
791 @subsection Constructing rational numbers
792
793 @code{cl_RA} objects can be constructed from strings. The syntax
794 for rational numbers is described in @ref{Internal and printed representation}.
795 Another standard way to produce a rational number is through application
796 of @samp{operator /} or @samp{recip} on integers.
797
798
799 @subsection Constructing floating-point numbers
800
801 @code{cl_F} objects with low precision are most easily constructed from
802 C @samp{float} and @samp{double}. See @ref{Conversions}.
803
804 To construct a @code{cl_F} with high precision, you can use the conversion
805 from @samp{const char *}, but you have to specify the desired precision
806 within the string. (See @ref{Internal and printed representation}.)
807 Example:
808 @example
809    cl_F e = "0.271828182845904523536028747135266249775724709369996e+1_40";
810 @end example
811 will set @samp{e} to the given value, with a precision of 40 decimal digits.
812
813 The programmatic way to construct a @code{cl_F} with high precision is
814 through the @code{cl_float} conversion function, see
815 @ref{Conversion to floating-point numbers}. For example, to compute
816 @code{e} to 40 decimal places, first construct 1.0 to 40 decimal places
817 and then apply the exponential function:
818 @example
819    float_format_t precision = float_format(40);
820    cl_F e = exp(cl_float(1,precision));
821 @end example
822
823
824 @subsection Constructing complex numbers
825
826 Non-real @code{cl_N} objects are normally constructed through the function
827 @example
828    cl_N complex (const cl_R& realpart, const cl_R& imagpart)
829 @end example
830 See @ref{Elementary complex functions}.
831
832
833 @section Elementary functions
834
835 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
836 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
837 defines the following operations:
838
839 @table @code
840 @item @var{type} operator + (const @var{type}&, const @var{type}&)
841 @cindex @code{operator + ()}
842 Addition.
843
844 @item @var{type} operator - (const @var{type}&, const @var{type}&)
845 @cindex @code{operator - ()}
846 Subtraction.
847
848 @item @var{type} operator - (const @var{type}&)
849 Returns the negative of the argument.
850
851 @item @var{type} plus1 (const @var{type}& x)
852 @cindex @code{plus1 ()}
853 Returns @code{x + 1}.
854
855 @item @var{type} minus1 (const @var{type}& x)
856 @cindex @code{minus1 ()}
857 Returns @code{x - 1}.
858
859 @item @var{type} operator * (const @var{type}&, const @var{type}&)
860 @cindex @code{operator * ()}
861 Multiplication.
862
863 @item @var{type} square (const @var{type}& x)
864 @cindex @code{square ()}
865 Returns @code{x * x}.
866 @end table
867
868 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA},
869 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
870 defines the following operations:
871
872 @table @code
873 @item @var{type} operator / (const @var{type}&, const @var{type}&)
874 @cindex @code{operator / ()}
875 Division.
876
877 @item @var{type} recip (const @var{type}&)
878 @cindex @code{recip ()}
879 Returns the reciprocal of the argument.
880 @end table
881
882 The class @code{cl_I} doesn't define a @samp{/} operation because
883 in the C/C++ language this operator, applied to integral types,
884 denotes the @samp{floor} or @samp{truncate} operation (which one of these,
885 is implementation dependent). (@xref{Rounding functions}.)
886 Instead, @code{cl_I} defines an ``exact quotient'' function:
887
888 @table @code
889 @item cl_I exquo (const cl_I& x, const cl_I& y)
890 @cindex @code{exquo ()}
891 Checks that @code{y} divides @code{x}, and returns the quotient @code{x}/@code{y}.
892 @end table
893
894 The following exponentiation functions are defined:
895
896 @table @code
897 @item cl_I expt_pos (const cl_I& x, const cl_I& y)
898 @cindex @code{expt_pos ()}
899 @itemx cl_RA expt_pos (const cl_RA& x, const cl_I& y)
900 @code{y} must be > 0. Returns @code{x^y}.
901
902 @item cl_RA expt (const cl_RA& x, const cl_I& y)
903 @cindex @code{expt ()}
904 @itemx cl_R expt (const cl_R& x, const cl_I& y)
905 @itemx cl_N expt (const cl_N& x, const cl_I& y)
906 Returns @code{x^y}.
907 @end table
908
909 Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_I},
910 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
911 defines the following operation:
912
913 @table @code
914 @item @var{type} abs (const @var{type}& x)
915 @cindex @code{abs ()}
916 Returns the absolute value of @code{x}.
917 This is @code{x} if @code{x >= 0}, and @code{-x} if @code{x <= 0}.
918 @end table
919
920 The class @code{cl_N} implements this as follows:
921
922 @table @code
923 @item cl_R abs (const cl_N x)
924 Returns the absolute value of @code{x}.
925 @end table
926
927 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
928 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
929 defines the following operation:
930
931 @table @code
932 @item @var{type} signum (const @var{type}& x)
933 @cindex @code{signum ()}
934 Returns the sign of @code{x}, in the same number format as @code{x}.
935 This is defined as @code{x / abs(x)} if @code{x} is non-zero, and
936 @code{x} if @code{x} is zero. If @code{x} is real, the value is either
937 0 or 1 or -1.
938 @end table
939
940
941 @section Elementary rational functions
942
943 Each of the classes @code{cl_RA}, @code{cl_I} defines the following operations:
944
945 @table @code
946 @item cl_I numerator (const @var{type}& x)
947 @cindex @code{numerator ()}
948 Returns the numerator of @code{x}.
949
950 @item cl_I denominator (const @var{type}& x)
951 @cindex @code{denominator ()}
952 Returns the denominator of @code{x}.
953 @end table
954
955 The numerator and denominator of a rational number are normalized in such
956 a way that they have no factor in common and the denominator is positive.
957
958
959 @section Elementary complex functions
960
961 The class @code{cl_N} defines the following operation:
962
963 @table @code
964 @item cl_N complex (const cl_R& a, const cl_R& b)
965 @cindex @code{complex ()}
966 Returns the complex number @code{a+bi}, that is, the complex number with
967 real part @code{a} and imaginary part @code{b}.
968 @end table
969
970 Each of the classes @code{cl_N}, @code{cl_R} defines the following operations:
971
972 @table @code
973 @item cl_R realpart (const @var{type}& x)
974 @cindex @code{realpart ()}
975 Returns the real part of @code{x}.
976
977 @item cl_R imagpart (const @var{type}& x)
978 @cindex @code{imagpart ()}
979 Returns the imaginary part of @code{x}.
980
981 @item @var{type} conjugate (const @var{type}& x)
982 @cindex @code{conjugate ()}
983 Returns the complex conjugate of @code{x}.
984 @end table
985
986 We have the relations
987
988 @itemize @asis
989 @item
990 @code{x = complex(realpart(x), imagpart(x))}
991 @item
992 @code{conjugate(x) = complex(realpart(x), -imagpart(x))}
993 @end itemize
994
995
996 @section Comparisons
997 @cindex comparison
998
999 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
1000 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1001 defines the following operations:
1002
1003 @table @code
1004 @item bool operator == (const @var{type}&, const @var{type}&)
1005 @cindex @code{operator == ()}
1006 @itemx bool operator != (const @var{type}&, const @var{type}&)
1007 @cindex @code{operator != ()}
1008 Comparison, as in C and C++.
1009
1010 @item uint32 equal_hashcode (const @var{type}&)
1011 @cindex @code{equal_hashcode ()}
1012 Returns a 32-bit hash code that is the same for any two numbers which are
1013 the same according to @code{==}. This hash code depends on the number's value,
1014 not its type or precision.
1015
1016 @item cl_boolean zerop (const @var{type}& x)
1017 @cindex @code{zerop ()}
1018 Compare against zero: @code{x == 0}
1019 @end table
1020
1021 Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_I},
1022 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1023 defines the following operations:
1024
1025 @table @code
1026 @item cl_signean compare (const @var{type}& x, const @var{type}& y)
1027 @cindex @code{compare ()}
1028 Compares @code{x} and @code{y}. Returns +1 if @code{x}>@code{y},
1029 -1 if @code{x}<@code{y}, 0 if @code{x}=@code{y}.
1030
1031 @item bool operator <= (const @var{type}&, const @var{type}&)
1032 @cindex @code{operator <= ()}
1033 @itemx bool operator < (const @var{type}&, const @var{type}&)
1034 @cindex @code{operator < ()}
1035 @itemx bool operator >= (const @var{type}&, const @var{type}&)
1036 @cindex @code{operator >= ()}
1037 @itemx bool operator > (const @var{type}&, const @var{type}&)
1038 @cindex @code{operator > ()}
1039 Comparison, as in C and C++.
1040
1041 @item cl_boolean minusp (const @var{type}& x)
1042 @cindex @code{minusp ()}
1043 Compare against zero: @code{x < 0}
1044
1045 @item cl_boolean plusp (const @var{type}& x)
1046 @cindex @code{plusp ()}
1047 Compare against zero: @code{x > 0}
1048
1049 @item @var{type} max (const @var{type}& x, const @var{type}& y)
1050 @cindex @code{max ()}
1051 Return the maximum of @code{x} and @code{y}.
1052
1053 @item @var{type} min (const @var{type}& x, const @var{type}& y)
1054 @cindex @code{min ()}
1055 Return the minimum of @code{x} and @code{y}.
1056 @end table
1057
1058 When a floating point number and a rational number are compared, the float
1059 is first converted to a rational number using the function @code{rational}.
1060 Since a floating point number actually represents an interval of real numbers,
1061 the result might be surprising.
1062 For example, @code{(cl_F)(cl_R)"1/3" == (cl_R)"1/3"} returns false because
1063 there is no floating point number whose value is exactly @code{1/3}.
1064
1065
1066 @section Rounding functions
1067 @cindex rounding
1068
1069 When a real number is to be converted to an integer, there is no ``best''
1070 rounding. The desired rounding function depends on the application.
1071 The Common Lisp and ISO Lisp standards offer four rounding functions:
1072
1073 @table @code
1074 @item floor(x)
1075 This is the largest integer <=@code{x}.
1076
1077 @item ceiling(x)
1078 This is the smallest integer >=@code{x}.
1079
1080 @item truncate(x)
1081 Among the integers between 0 and @code{x} (inclusive) the one nearest to @code{x}.
1082
1083 @item round(x)
1084 The integer nearest to @code{x}. If @code{x} is exactly halfway between two
1085 integers, choose the even one.
1086 @end table
1087
1088 These functions have different advantages:
1089
1090 @code{floor} and @code{ceiling} are translation invariant:
1091 @code{floor(x+n) = floor(x) + n} and @code{ceiling(x+n) = ceiling(x) + n}
1092 for every @code{x} and every integer @code{n}.
1093
1094 On the other hand, @code{truncate} and @code{round} are symmetric:
1095 @code{truncate(-x) = -truncate(x)} and @code{round(-x) = -round(x)},
1096 and furthermore @code{round} is unbiased: on the ``average'', it rounds
1097 down exactly as often as it rounds up.
1098
1099 The functions are related like this:
1100
1101 @itemize @asis
1102 @item
1103 @code{ceiling(m/n) = floor((m+n-1)/n) = floor((m-1)/n)+1}
1104 for rational numbers @code{m/n} (@code{m}, @code{n} integers, @code{n}>0), and
1105 @item
1106 @code{truncate(x) = sign(x) * floor(abs(x))}
1107 @end itemize
1108
1109 Each of the classes @code{cl_R}, @code{cl_RA},
1110 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1111 defines the following operations:
1112
1113 @table @code
1114 @item cl_I floor1 (const @var{type}& x)
1115 @cindex @code{floor1 ()}
1116 Returns @code{floor(x)}.
1117 @item cl_I ceiling1 (const @var{type}& x)
1118 @cindex @code{ceiling1 ()}
1119 Returns @code{ceiling(x)}.
1120 @item cl_I truncate1 (const @var{type}& x)
1121 @cindex @code{truncate1 ()}
1122 Returns @code{truncate(x)}.
1123 @item cl_I round1 (const @var{type}& x)
1124 @cindex @code{round1 ()}
1125 Returns @code{round(x)}.
1126 @end table
1127
1128 Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_I},
1129 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1130 defines the following operations:
1131
1132 @table @code
1133 @item cl_I floor1 (const @var{type}& x, const @var{type}& y)
1134 Returns @code{floor(x/y)}.
1135 @item cl_I ceiling1 (const @var{type}& x, const @var{type}& y)
1136 Returns @code{ceiling(x/y)}.
1137 @item cl_I truncate1 (const @var{type}& x, const @var{type}& y)
1138 Returns @code{truncate(x/y)}.
1139 @item cl_I round1 (const @var{type}& x, const @var{type}& y)
1140 Returns @code{round(x/y)}.
1141 @end table
1142
1143 These functions are called @samp{floor1}, @dots{} here instead of
1144 @samp{floor}, @dots{}, because on some systems, system dependent include
1145 files define @samp{floor} and @samp{ceiling} as macros.
1146
1147 In many cases, one needs both the quotient and the remainder of a division.
1148 It is more efficient to compute both at the same time than to perform
1149 two divisions, one for quotient and the next one for the remainder.
1150 The following functions therefore return a structure containing both
1151 the quotient and the remainder. The suffix @samp{2} indicates the number
1152 of ``return values''. The remainder is defined as follows:
1153
1154 @itemize @bullet
1155 @item
1156 for the computation of @code{quotient = floor(x)},
1157 @code{remainder = x - quotient},
1158 @item
1159 for the computation of @code{quotient = floor(x,y)},
1160 @code{remainder = x - quotient*y},
1161 @end itemize
1162
1163 and similarly for the other three operations.
1164
1165 Each of the classes @code{cl_R}, @code{cl_RA},
1166 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1167 defines the following operations:
1168
1169 @table @code
1170 @item struct @var{type}_div_t @{ cl_I quotient; @var{type} remainder; @};
1171 @itemx @var{type}_div_t floor2 (const @var{type}& x)
1172 @itemx @var{type}_div_t ceiling2 (const @var{type}& x)
1173 @itemx @var{type}_div_t truncate2 (const @var{type}& x)
1174 @itemx @var{type}_div_t round2 (const @var{type}& x)
1175 @end table
1176
1177 Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_I},
1178 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1179 defines the following operations:
1180
1181 @table @code
1182 @item struct @var{type}_div_t @{ cl_I quotient; @var{type} remainder; @};
1183 @itemx @var{type}_div_t floor2 (const @var{type}& x, const @var{type}& y)
1184 @cindex @code{floor2 ()}
1185 @itemx @var{type}_div_t ceiling2 (const @var{type}& x, const @var{type}& y)
1186 @cindex @code{ceiling2 ()}
1187 @itemx @var{type}_div_t truncate2 (const @var{type}& x, const @var{type}& y)
1188 @cindex @code{truncate2 ()}
1189 @itemx @var{type}_div_t round2 (const @var{type}& x, const @var{type}& y)
1190 @cindex @code{round2 ()}
1191 @end table
1192
1193 Sometimes, one wants the quotient as a floating-point number (of the
1194 same format as the argument, if the argument is a float) instead of as
1195 an integer. The prefix @samp{f} indicates this.
1196
1197 Each of the classes
1198 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1199 defines the following operations:
1200
1201 @table @code
1202 @item @var{type} ffloor (const @var{type}& x)
1203 @cindex @code{ffloor ()}
1204 @itemx @var{type} fceiling (const @var{type}& x)
1205 @cindex @code{fceiling ()}
1206 @itemx @var{type} ftruncate (const @var{type}& x)
1207 @cindex @code{ftruncate ()}
1208 @itemx @var{type} fround (const @var{type}& x)
1209 @cindex @code{fround ()}
1210 @end table
1211
1212 and similarly for class @code{cl_R}, but with return type @code{cl_F}.
1213
1214 The class @code{cl_R} defines the following operations:
1215
1216 @table @code
1217 @item cl_F ffloor (const @var{type}& x, const @var{type}& y)
1218 @itemx cl_F fceiling (const @var{type}& x, const @var{type}& y)
1219 @itemx cl_F ftruncate (const @var{type}& x, const @var{type}& y)
1220 @itemx cl_F fround (const @var{type}& x, const @var{type}& y)
1221 @end table
1222
1223 These functions also exist in versions which return both the quotient
1224 and the remainder. The suffix @samp{2} indicates this.
1225
1226 Each of the classes
1227 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1228 defines the following operations:
1229 @cindex @code{cl_F_fdiv_t}
1230 @cindex @code{cl_SF_fdiv_t}
1231 @cindex @code{cl_FF_fdiv_t}
1232 @cindex @code{cl_DF_fdiv_t}
1233 @cindex @code{cl_LF_fdiv_t}
1234
1235 @table @code
1236 @item struct @var{type}_fdiv_t @{ @var{type} quotient; @var{type} remainder; @};
1237 @itemx @var{type}_fdiv_t ffloor2 (const @var{type}& x)
1238 @cindex @code{ffloor2 ()}
1239 @itemx @var{type}_fdiv_t fceiling2 (const @var{type}& x)
1240 @cindex @code{fceiling2 ()}
1241 @itemx @var{type}_fdiv_t ftruncate2 (const @var{type}& x)
1242 @cindex @code{ftruncate2 ()}
1243 @itemx @var{type}_fdiv_t fround2 (const @var{type}& x)
1244 @cindex @code{fround2 ()}
1245 @end table
1246 and similarly for class @code{cl_R}, but with quotient type @code{cl_F}.
1247 @cindex @code{cl_R_fdiv_t}
1248
1249 The class @code{cl_R} defines the following operations:
1250
1251 @table @code
1252 @item struct @var{type}_fdiv_t @{ cl_F quotient; cl_R remainder; @};
1253 @itemx @var{type}_fdiv_t ffloor2 (const @var{type}& x, const @var{type}& y)
1254 @itemx @var{type}_fdiv_t fceiling2 (const @var{type}& x, const @var{type}& y)
1255 @itemx @var{type}_fdiv_t ftruncate2 (const @var{type}& x, const @var{type}& y)
1256 @itemx @var{type}_fdiv_t fround2 (const @var{type}& x, const @var{type}& y)
1257 @end table
1258
1259 Other applications need only the remainder of a division.
1260 The remainder of @samp{floor} and @samp{ffloor} is called @samp{mod}
1261 (abbreviation of ``modulo''). The remainder @samp{truncate} and
1262 @samp{ftruncate} is called @samp{rem} (abbreviation of ``remainder'').
1263
1264 @itemize @bullet
1265 @item
1266 @code{mod(x,y) = floor2(x,y).remainder = x - floor(x/y)*y}
1267 @item
1268 @code{rem(x,y) = truncate2(x,y).remainder = x - truncate(x/y)*y}
1269 @end itemize
1270
1271 If @code{x} and @code{y} are both >= 0, @code{mod(x,y) = rem(x,y) >= 0}.
1272 In general, @code{mod(x,y)} has the sign of @code{y} or is zero,
1273 and @code{rem(x,y)} has the sign of @code{x} or is zero.
1274
1275 The classes @code{cl_R}, @code{cl_I} define the following operations:
1276
1277 @table @code
1278 @item @var{type} mod (const @var{type}& x, const @var{type}& y)
1279 @cindex @code{mod ()}
1280 @itemx @var{type} rem (const @var{type}& x, const @var{type}& y)
1281 @cindex @code{rem ()}
1282 @end table
1283
1284
1285 @section Roots
1286
1287 Each of the classes @code{cl_R},
1288 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
1289 defines the following operation:
1290
1291 @table @code
1292 @item @var{type} sqrt (const @var{type}& x)
1293 @cindex @code{sqrt ()}
1294 @code{x} must be >= 0. This function returns the square root of @code{x},
1295 normalized to be >= 0. If @code{x} is the square of a rational number,
1296 @code{sqrt(x)} will be a rational number, else it will return a
1297 floating-point approximation.
1298 @end table
1299
1300 The classes @code{cl_RA}, @code{cl_I} define the following operation:
1301
1302 @table @code
1303 @item cl_boolean sqrtp (const @var{type}& x, @var{type}* root)
1304 @cindex @code{sqrtp ()}
1305 This tests whether @code{x} is a perfect square. If so, it returns true
1306 and the exact square root in @code{*root}, else it returns false.
1307 @end table
1308
1309 Furthermore, for integers, similarly:
1310
1311 @table @code
1312 @item cl_boolean isqrt (const @var{type}& x, @var{type}* root)
1313 @cindex @code{isqrt ()}
1314 @code{x} should be >= 0. This function sets @code{*root} to
1315 @code{floor(sqrt(x))} and returns the same value as @code{sqrtp}:
1316 the boolean value @code{(expt(*root,2) == x)}.
1317 @end table
1318
1319 For @code{n}th roots, the classes @code{cl_RA}, @code{cl_I}
1320 define the following operation:
1321
1322 @table @code
1323 @item cl_boolean rootp (const @var{type}& x, const cl_I& n, @var{type}* root)
1324 @cindex @code{rootp ()}
1325 @code{x} must be >= 0. @code{n} must be > 0.
1326 This tests whether @code{x} is an @code{n}th power of a rational number.
1327 If so, it returns true and the exact root in @code{*root}, else it returns
1328 false.
1329 @end table
1330
1331 The only square root function which accepts negative numbers is the one
1332 for class @code{cl_N}:
1333
1334 @table @code
1335 @item cl_N sqrt (const cl_N& z)
1336 @cindex @code{sqrt ()}
1337 Returns the square root of @code{z}, as defined by the formula
1338 @code{sqrt(z) = exp(log(z)/2)}. Conversion to a floating-point type
1339 or to a complex number are done if necessary. The range of the result is the
1340 right half plane @code{realpart(sqrt(z)) >= 0}
1341 including the positive imaginary axis and 0, but excluding
1342 the negative imaginary axis.
1343 The result is an exact number only if @code{z} is an exact number.
1344 @end table
1345
1346
1347 @section Transcendental functions
1348 @cindex transcendental functions
1349
1350 The transcendental functions return an exact result if the argument
1351 is exact and the result is exact as well. Otherwise they must return
1352 inexact numbers even if the argument is exact.
1353 For example, @code{cos(0) = 1} returns the rational number @code{1}.
1354
1355
1356 @subsection Exponential and logarithmic functions
1357
1358 @table @code
1359 @item cl_R exp (const cl_R& x)
1360 @cindex @code{exp ()}
1361 @itemx cl_N exp (const cl_N& x)
1362 Returns the exponential function of @code{x}. This is @code{e^x} where
1363 @code{e} is the base of the natural logarithms. The range of the result
1364 is the entire complex plane excluding 0.
1365
1366 @item cl_R ln (const cl_R& x)
1367 @cindex @code{ln ()}
1368 @code{x} must be > 0. Returns the (natural) logarithm of x.
1369
1370 @item cl_N log (const cl_N& x)
1371 @cindex @code{log ()}
1372 Returns the (natural) logarithm of x. If @code{x} is real and positive,
1373 this is @code{ln(x)}. In general, @code{log(x) = log(abs(x)) + i*phase(x)}.
1374 The range of the result is the strip in the complex plane
1375 @code{-pi < imagpart(log(x)) <= pi}.
1376
1377 @item cl_R phase (const cl_N& x)
1378 @cindex @code{phase ()}
1379 Returns the angle part of @code{x} in its polar representation as a
1380 complex number. That is, @code{phase(x) = atan(realpart(x),imagpart(x))}.
1381 This is also the imaginary part of @code{log(x)}.
1382 The range of the result is the interval @code{-pi < phase(x) <= pi}.
1383 The result will be an exact number only if @code{zerop(x)} or
1384 if @code{x} is real and positive.
1385
1386 @item cl_R log (const cl_R& a, const cl_R& b)
1387 @code{a} and @code{b} must be > 0. Returns the logarithm of @code{a} with
1388 respect to base @code{b}. @code{log(a,b) = ln(a)/ln(b)}.
1389 The result can be exact only if @code{a = 1} or if @code{a} and @code{b}
1390 are both rational.
1391
1392 @item cl_N log (const cl_N& a, const cl_N& b)
1393 Returns the logarithm of @code{a} with respect to base @code{b}.
1394 @code{log(a,b) = log(a)/log(b)}.
1395
1396 @item cl_N expt (const cl_N& x, const cl_N& y)
1397 @cindex @code{expt ()}
1398 Exponentiation: Returns @code{x^y = exp(y*log(x))}.
1399 @end table
1400
1401 The constant e = exp(1) = 2.71828@dots{} is returned by the following functions:
1402
1403 @table @code
1404 @item cl_F exp1 (float_format_t f)
1405 @cindex @code{exp1 ()}
1406 Returns e as a float of format @code{f}.
1407
1408 @item cl_F exp1 (const cl_F& y)
1409 Returns e in the float format of @code{y}.
1410
1411 @item cl_F exp1 (void)
1412 Returns e as a float of format @code{default_float_format}.
1413 @end table
1414
1415
1416 @subsection Trigonometric functions
1417
1418 @table @code
1419 @item cl_R sin (const cl_R& x)
1420 @cindex @code{sin ()}
1421 Returns @code{sin(x)}. The range of the result is the interval
1422 @code{-1 <= sin(x) <= 1}.
1423
1424 @item cl_N sin (const cl_N& z)
1425 Returns @code{sin(z)}. The range of the result is the entire complex plane.
1426
1427 @item cl_R cos (const cl_R& x)
1428 @cindex @code{cos ()}
1429 Returns @code{cos(x)}. The range of the result is the interval
1430 @code{-1 <= cos(x) <= 1}.
1431
1432 @item cl_N cos (const cl_N& x)
1433 Returns @code{cos(z)}. The range of the result is the entire complex plane.
1434
1435 @item struct cos_sin_t @{ cl_R cos; cl_R sin; @};
1436 @cindex @code{cos_sin_t}
1437 @itemx cos_sin_t cos_sin (const cl_R& x)
1438 Returns both @code{sin(x)} and @code{cos(x)}. This is more efficient than
1439 @cindex @code{cos_sin ()}
1440 computing them separately. The relation @code{cos^2 + sin^2 = 1} will
1441 hold only approximately.
1442
1443 @item cl_R tan (const cl_R& x)
1444 @cindex @code{tan ()}
1445 @itemx cl_N tan (const cl_N& x)
1446 Returns @code{tan(x) = sin(x)/cos(x)}.
1447
1448 @item cl_N cis (const cl_R& x)
1449 @cindex @code{cis ()}
1450 @itemx cl_N cis (const cl_N& x)
1451 Returns @code{exp(i*x)}. The name @samp{cis} means ``cos + i sin'', because
1452 @code{e^(i*x) = cos(x) + i*sin(x)}.
1453
1454 @cindex @code{asin}
1455 @cindex @code{asin ()}
1456 @item cl_N asin (const cl_N& z)
1457 Returns @code{arcsin(z)}. This is defined as
1458 @code{arcsin(z) = log(iz+sqrt(1-z^2))/i} and satisfies
1459 @code{arcsin(-z) = -arcsin(z)}.
1460 The range of the result is the strip in the complex domain
1461 @code{-pi/2 <= realpart(arcsin(z)) <= pi/2}, excluding the numbers
1462 with @code{realpart = -pi/2} and @code{imagpart < 0} and the numbers
1463 with @code{realpart = pi/2} and @code{imagpart > 0}.
1464 @ignore
1465 Proof: This follows from arcsin(z) = arsinh(iz)/i and the corresponding
1466 results for arsinh.
1467 @end ignore
1468
1469 @item cl_N acos (const cl_N& z)
1470 @cindex @code{acos ()}
1471 Returns @code{arccos(z)}. This is defined as
1472 @code{arccos(z) = pi/2 - arcsin(z) = log(z+i*sqrt(1-z^2))/i}
1473 @ignore
1474  Kahan's formula:
1475  @code{arccos(z) = 2*log(sqrt((1+z)/2)+i*sqrt((1-z)/2))/i}
1476 @end ignore
1477 and satisfies @code{arccos(-z) = pi - arccos(z)}.
1478 The range of the result is the strip in the complex domain
1479 @code{0 <= realpart(arcsin(z)) <= pi}, excluding the numbers
1480 with @code{realpart = 0} and @code{imagpart < 0} and the numbers
1481 with @code{realpart = pi} and @code{imagpart > 0}.
1482 @ignore
1483 Proof: This follows from the results about arcsin.
1484 @end ignore
1485
1486 @cindex @code{atan}
1487 @cindex @code{atan ()}
1488 @item cl_R atan (const cl_R& x, const cl_R& y)
1489 Returns the angle of the polar representation of the complex number
1490 @code{x+iy}. This is @code{atan(y/x)} if @code{x>0}. The range of
1491 the result is the interval @code{-pi < atan(x,y) <= pi}. The result will
1492 be an exact number only if @code{x > 0} and @code{y} is the exact @code{0}.
1493 WARNING: In Common Lisp, this function is called as @code{(atan y x)},
1494 with reversed order of arguments.
1495
1496 @item cl_R atan (const cl_R& x)
1497 Returns @code{arctan(x)}. This is the same as @code{atan(1,x)}. The range
1498 of the result is the interval @code{-pi/2 < atan(x) < pi/2}. The result
1499 will be an exact number only if @code{x} is the exact @code{0}.
1500
1501 @item cl_N atan (const cl_N& z)
1502 Returns @code{arctan(z)}. This is defined as
1503 @code{arctan(z) = (log(1+iz)-log(1-iz)) / 2i} and satisfies
1504 @code{arctan(-z) = -arctan(z)}. The range of the result is
1505 the strip in the complex domain
1506 @code{-pi/2 <= realpart(arctan(z)) <= pi/2}, excluding the numbers
1507 with @code{realpart = -pi/2} and @code{imagpart >= 0} and the numbers
1508 with @code{realpart = pi/2} and @code{imagpart <= 0}.
1509 @ignore
1510 Proof: arctan(z) = artanh(iz)/i, we know the range of the artanh function.
1511 @end ignore
1512
1513 @end table
1514
1515 @cindex pi
1516 @cindex Archimedes' constant
1517 Archimedes' constant pi = 3.14@dots{} is returned by the following functions:
1518
1519 @table @code
1520 @item cl_F pi (float_format_t f)
1521 @cindex @code{pi ()}
1522 Returns pi as a float of format @code{f}.
1523
1524 @item cl_F pi (const cl_F& y)
1525 Returns pi in the float format of @code{y}.
1526
1527 @item cl_F pi (void)
1528 Returns pi as a float of format @code{default_float_format}.
1529 @end table
1530
1531
1532 @subsection Hyperbolic functions
1533
1534 @table @code
1535 @item cl_R sinh (const cl_R& x)
1536 @cindex @code{sinh ()}
1537 Returns @code{sinh(x)}.
1538
1539 @item cl_N sinh (const cl_N& z)
1540 Returns @code{sinh(z)}. The range of the result is the entire complex plane.
1541
1542 @item cl_R cosh (const cl_R& x)
1543 @cindex @code{cosh ()}
1544 Returns @code{cosh(x)}. The range of the result is the interval
1545 @code{cosh(x) >= 1}.
1546
1547 @item cl_N cosh (const cl_N& z)
1548 Returns @code{cosh(z)}. The range of the result is the entire complex plane.
1549
1550 @item struct cosh_sinh_t @{ cl_R cosh; cl_R sinh; @};
1551 @cindex @code{cosh_sinh_t}
1552 @itemx cosh_sinh_t cosh_sinh (const cl_R& x)
1553 @cindex @code{cosh_sinh ()}
1554 Returns both @code{sinh(x)} and @code{cosh(x)}. This is more efficient than
1555 computing them separately. The relation @code{cosh^2 - sinh^2 = 1} will
1556 hold only approximately.
1557
1558 @item cl_R tanh (const cl_R& x)
1559 @cindex @code{tanh ()}
1560 @itemx cl_N tanh (const cl_N& x)
1561 Returns @code{tanh(x) = sinh(x)/cosh(x)}.
1562
1563 @item cl_N asinh (const cl_N& z)
1564 @cindex @code{asinh ()}
1565 Returns @code{arsinh(z)}. This is defined as
1566 @code{arsinh(z) = log(z+sqrt(1+z^2))} and satisfies
1567 @code{arsinh(-z) = -arsinh(z)}.
1568 @ignore
1569 Proof: Knowing the range of log, we know -pi < imagpart(arsinh(z)) <= pi.
1570 Actually, z+sqrt(1+z^2) can never be real and <0, so
1571 -pi < imagpart(arsinh(z)) < pi.
1572 We have (z+sqrt(1+z^2))*(-z+sqrt(1+(-z)^2)) = (1+z^2)-z^2 = 1, hence the
1573 logs of both factors sum up to 0 mod 2*pi*i, hence to 0.
1574 @end ignore
1575 The range of the result is the strip in the complex domain
1576 @code{-pi/2 <= imagpart(arsinh(z)) <= pi/2}, excluding the numbers
1577 with @code{imagpart = -pi/2} and @code{realpart > 0} and the numbers
1578 with @code{imagpart = pi/2} and @code{realpart < 0}.
1579 @ignore
1580 Proof: Write z = x+iy. Because of arsinh(-z) = -arsinh(z), we may assume
1581 that z is in Range(sqrt), that is, x>=0 and, if x=0, then y>=0.
1582 If x > 0, then Re(z+sqrt(1+z^2)) = x + Re(sqrt(1+z^2)) >= x > 0,
1583 so -pi/2 < imagpart(log(z+sqrt(1+z^2))) < pi/2.
1584 If x = 0 and y >= 0, arsinh(z) = log(i*y+sqrt(1-y^2)).
1585   If y <= 1, the realpart is 0 and the imagpart is >= 0 and <= pi/2.
1586   If y >= 1, the imagpart is pi/2 and the realpart is
1587              log(y+sqrt(y^2-1)) >= log(y) >= 0.
1588 @end ignore
1589 @ignore
1590 Moreover, if z is in Range(sqrt),
1591 log(sqrt(1+z^2)+z) = 2 artanh(z/(1+sqrt(1+z^2)))
1592 (for a proof, see file src/cl_C_asinh.cc).
1593 @end ignore
1594
1595 @item cl_N acosh (const cl_N& z)
1596 @cindex @code{acosh ()}
1597 Returns @code{arcosh(z)}. This is defined as
1598 @code{arcosh(z) = 2*log(sqrt((z+1)/2)+sqrt((z-1)/2))}.
1599 The range of the result is the half-strip in the complex domain
1600 @code{-pi < imagpart(arcosh(z)) <= pi, realpart(arcosh(z)) >= 0},
1601 excluding the numbers with @code{realpart = 0} and @code{-pi < imagpart < 0}.
1602 @ignore
1603 Proof: sqrt((z+1)/2) and sqrt((z-1)/2)) lie in Range(sqrt), hence does
1604 their sum, hence its log has an imagpart <= pi/2 and > -pi/2.
1605 If z is in Range(sqrt), we have
1606   sqrt(z+1)*sqrt(z-1) = sqrt(z^2-1)
1607   ==> (sqrt((z+1)/2)+sqrt((z-1)/2))^2 = (z+1)/2 + sqrt(z^2-1) + (z-1)/2
1608                                       = z + sqrt(z^2-1)
1609   ==> arcosh(z) = log(z+sqrt(z^2-1)) mod 2*pi*i
1610   and since the imagpart of both expressions is > -pi, <= pi
1611   ==> arcosh(z) = log(z+sqrt(z^2-1))
1612   To prove that the realpart of this is >= 0, write z = x+iy with x>=0,
1613   z^2-1 = u+iv with u = x^2-y^2-1, v = 2xy,
1614   sqrt(z^2-1) = p+iq with p = sqrt((sqrt(u^2+v^2)+u)/2) >= 0,
1615                           q = sqrt((sqrt(u^2+v^2)-u)/2) * sign(v),
1616   then |z+sqrt(z^2-1)|^2 = |x+iy + p+iq|^2
1617           = (x+p)^2 + (y+q)^2
1618           = x^2 + 2xp + p^2 + y^2 + 2yq + q^2
1619           >= x^2 + p^2 + y^2 + q^2                 (since x>=0, p>=0, yq>=0)
1620           = x^2 + y^2 + sqrt(u^2+v^2)
1621           >= x^2 + y^2 + |u|
1622           >= x^2 + y^2 - u
1623           = 1 + 2*y^2
1624           >= 1
1625   hence realpart(log(z+sqrt(z^2-1))) = log(|z+sqrt(z^2-1)|) >= 0.
1626   Equality holds only if y = 0 and u <= 0, i.e. 0 <= x < 1.
1627   In this case arcosh(z) = log(x+i*sqrt(1-x^2)) has imagpart >=0.
1628 Otherwise, -z is in Range(sqrt).
1629   If y != 0, sqrt((z+1)/2) = i^sign(y) * sqrt((-z-1)/2),
1630              sqrt((z-1)/2) = i^sign(y) * sqrt((-z+1)/2),
1631              hence arcosh(z) = sign(y)*pi/2*i + arcosh(-z),
1632              and this has realpart > 0.
1633   If y = 0 and -1<=x<=0, we still have sqrt(z+1)*sqrt(z-1) = sqrt(z^2-1),
1634              ==> arcosh(z) = log(z+sqrt(z^2-1)) = log(x+i*sqrt(1-x^2))
1635              has realpart = 0 and imagpart > 0.
1636   If y = 0 and x<=-1, however, sqrt(z+1)*sqrt(z-1) = - sqrt(z^2-1),
1637              ==> arcosh(z) = log(z-sqrt(z^2-1)) = pi*i + arcosh(-z).
1638              This has realpart >= 0 and imagpart = pi.
1639 @end ignore
1640
1641 @item cl_N atanh (const cl_N& z)
1642 @cindex @code{atanh ()}
1643 Returns @code{artanh(z)}. This is defined as
1644 @code{artanh(z) = (log(1+z)-log(1-z)) / 2} and satisfies
1645 @code{artanh(-z) = -artanh(z)}. The range of the result is
1646 the strip in the complex domain
1647 @code{-pi/2 <= imagpart(artanh(z)) <= pi/2}, excluding the numbers
1648 with @code{imagpart = -pi/2} and @code{realpart <= 0} and the numbers
1649 with @code{imagpart = pi/2} and @code{realpart >= 0}.
1650 @ignore
1651 Proof: Write z = x+iy. Examine
1652   imagpart(artanh(z)) = (atan(1+x,y) - atan(1-x,-y))/2.
1653   Case 1: y = 0.
1654           x > 1 ==> imagpart = -pi/2, realpart = 1/2 log((x+1)/(x-1)) > 0,
1655           x < -1 ==> imagpart = pi/2, realpart = 1/2 log((-x-1)/(-x+1)) < 0,
1656           |x| < 1 ==> imagpart = 0
1657   Case 2: y > 0.
1658           imagpart(artanh(z))
1659               = (atan(1+x,y) - atan(1-x,-y))/2
1660               = ((pi/2 - atan((1+x)/y)) - (-pi/2 - atan((1-x)/-y)))/2
1661               = (pi - atan((1+x)/y) - atan((1-x)/y))/2
1662               > (pi -     pi/2      -     pi/2     )/2 = 0
1663           and (1+x)/y > (1-x)/y
1664               ==> atan((1+x)/y) > atan((-1+x)/y) = - atan((1-x)/y)
1665               ==> imagpart < pi/2.
1666           Hence 0 < imagpart < pi/2.
1667   Case 3: y < 0.
1668           By artanh(z) = -artanh(-z) and case 2, -pi/2 < imagpart < 0.
1669 @end ignore
1670 @end table
1671
1672
1673 @subsection Euler gamma
1674 @cindex Euler's constant
1675
1676 Euler's constant C = 0.577@dots{} is returned by the following functions:
1677
1678 @table @code
1679 @item cl_F eulerconst (float_format_t f)
1680 @cindex @code{eulerconst ()}
1681 Returns Euler's constant as a float of format @code{f}.
1682
1683 @item cl_F eulerconst (const cl_F& y)
1684 Returns Euler's constant in the float format of @code{y}.
1685
1686 @item cl_F eulerconst (void)
1687 Returns Euler's constant as a float of format @code{default_float_format}.
1688 @end table
1689
1690 Catalan's constant G = 0.915@dots{} is returned by the following functions:
1691 @cindex Catalan's constant
1692
1693 @table @code
1694 @item cl_F catalanconst (float_format_t f)
1695 @cindex @code{catalanconst ()}
1696 Returns Catalan's constant as a float of format @code{f}.
1697
1698 @item cl_F catalanconst (const cl_F& y)
1699 Returns Catalan's constant in the float format of @code{y}.
1700
1701 @item cl_F catalanconst (void)
1702 Returns Catalan's constant as a float of format @code{default_float_format}.
1703 @end table
1704
1705
1706 @subsection Riemann zeta
1707 @cindex Riemann's zeta
1708
1709 Riemann's zeta function at an integral point @code{s>1} is returned by the
1710 following functions:
1711
1712 @table @code
1713 @item cl_F zeta (int s, float_format_t f)
1714 @cindex @code{zeta ()}
1715 Returns Riemann's zeta function at @code{s} as a float of format @code{f}.
1716
1717 @item cl_F zeta (int s, const cl_F& y)
1718 Returns Riemann's zeta function at @code{s} in the float format of @code{y}.
1719
1720 @item cl_F zeta (int s)
1721 Returns Riemann's zeta function at @code{s} as a float of format
1722 @code{default_float_format}.
1723 @end table
1724
1725
1726 @section Functions on integers
1727
1728 @subsection Logical functions
1729
1730 Integers, when viewed as in two's complement notation, can be thought as
1731 infinite bit strings where the bits' values eventually are constant.
1732 For example,
1733 @example
1734     17 = ......00010001
1735     -6 = ......11111010
1736 @end example
1737
1738 The logical operations view integers as such bit strings and operate
1739 on each of the bit positions in parallel.
1740
1741 @table @code
1742 @item cl_I lognot (const cl_I& x)
1743 @cindex @code{lognot ()}
1744 @itemx cl_I operator ~ (const cl_I& x)
1745 @cindex @code{operator ~ ()}
1746 Logical not, like @code{~x} in C. This is the same as @code{-1-x}.
1747
1748 @item cl_I logand (const cl_I& x, const cl_I& y)
1749 @cindex @code{logand ()}
1750 @itemx cl_I operator & (const cl_I& x, const cl_I& y)
1751 @cindex @code{operator & ()}
1752 Logical and, like @code{x & y} in C.
1753
1754 @item cl_I logior (const cl_I& x, const cl_I& y)
1755 @cindex @code{logior ()}
1756 @itemx cl_I operator | (const cl_I& x, const cl_I& y)
1757 @cindex @code{operator | ()}
1758 Logical (inclusive) or, like @code{x | y} in C.
1759
1760 @item cl_I logxor (const cl_I& x, const cl_I& y)
1761 @cindex @code{logxor ()}
1762 @itemx cl_I operator ^ (const cl_I& x, const cl_I& y)
1763 @cindex @code{operator ^ ()}
1764 Exclusive or, like @code{x ^ y} in C.
1765
1766 @item cl_I logeqv (const cl_I& x, const cl_I& y)
1767 @cindex @code{logeqv ()}
1768 Bitwise equivalence, like @code{~(x ^ y)} in C.
1769
1770 @item cl_I lognand (const cl_I& x, const cl_I& y)
1771 @cindex @code{lognand ()}
1772 Bitwise not and, like @code{~(x & y)} in C.
1773
1774 @item cl_I lognor (const cl_I& x, const cl_I& y)
1775 @cindex @code{lognor ()}
1776 Bitwise not or, like @code{~(x | y)} in C.
1777
1778 @item cl_I logandc1 (const cl_I& x, const cl_I& y)
1779 @cindex @code{logandc1 ()}
1780 Logical and, complementing the first argument, like @code{~x & y} in C.
1781
1782 @item cl_I logandc2 (const cl_I& x, const cl_I& y)
1783 @cindex @code{logandc2 ()}
1784 Logical and, complementing the second argument, like @code{x & ~y} in C.
1785
1786 @item cl_I logorc1 (const cl_I& x, const cl_I& y)
1787 @cindex @code{logorc1 ()}
1788 Logical or, complementing the first argument, like @code{~x | y} in C.
1789
1790 @item cl_I logorc2 (const cl_I& x, const cl_I& y)
1791 @cindex @code{logorc2 ()}
1792 Logical or, complementing the second argument, like @code{x | ~y} in C.
1793 @end table
1794
1795 These operations are all available though the function
1796 @table @code
1797 @item cl_I boole (cl_boole op, const cl_I& x, const cl_I& y)
1798 @cindex @code{boole ()}
1799 @end table
1800 where @code{op} must have one of the 16 values (each one stands for a function
1801 which combines two bits into one bit): @code{boole_clr}, @code{boole_set},
1802 @code{boole_1}, @code{boole_2}, @code{boole_c1}, @code{boole_c2},
1803 @code{boole_and}, @code{boole_ior}, @code{boole_xor}, @code{boole_eqv},
1804 @code{boole_nand}, @code{boole_nor}, @code{boole_andc1}, @code{boole_andc2},
1805 @code{boole_orc1}, @code{boole_orc2}.
1806 @cindex @code{boole_clr}
1807 @cindex @code{boole_set}
1808 @cindex @code{boole_1}
1809 @cindex @code{boole_2}
1810 @cindex @code{boole_c1}
1811 @cindex @code{boole_c2}
1812 @cindex @code{boole_and}
1813 @cindex @code{boole_xor}
1814 @cindex @code{boole_eqv}
1815 @cindex @code{boole_nand}
1816 @cindex @code{boole_nor}
1817 @cindex @code{boole_andc1}
1818 @cindex @code{boole_andc2}
1819 @cindex @code{boole_orc1}
1820 @cindex @code{boole_orc2}
1821
1822
1823 Other functions that view integers as bit strings:
1824
1825 @table @code
1826 @item cl_boolean logtest (const cl_I& x, const cl_I& y)
1827 @cindex @code{logtest ()}
1828 Returns true if some bit is set in both @code{x} and @code{y}, i.e. if
1829 @code{logand(x,y) != 0}.
1830
1831 @item cl_boolean logbitp (const cl_I& n, const cl_I& x)
1832 @cindex @code{logbitp ()}
1833 Returns true if the @code{n}th bit (from the right) of @code{x} is set.
1834 Bit 0 is the least significant bit.
1835
1836 @item uintL logcount (const cl_I& x)
1837 @cindex @code{logcount ()}
1838 Returns the number of one bits in @code{x}, if @code{x} >= 0, or
1839 the number of zero bits in @code{x}, if @code{x} < 0.
1840 @end table
1841
1842 The following functions operate on intervals of bits in integers. 
1843 The type
1844 @example
1845 struct cl_byte @{ uintL size; uintL position; @};
1846 @end example
1847 @cindex @code{cl_byte}
1848 represents the bit interval containing the bits
1849 @code{position}@dots{}@code{position+size-1} of an integer.
1850 The constructor @code{cl_byte(size,position)} constructs a @code{cl_byte}.
1851
1852 @table @code
1853 @item cl_I ldb (const cl_I& n, const cl_byte& b)
1854 @cindex @code{ldb ()}
1855 extracts the bits of @code{n} described by the bit interval @code{b}
1856 and returns them as a nonnegative integer with @code{b.size} bits.
1857
1858 @item cl_boolean ldb_test (const cl_I& n, const cl_byte& b)
1859 @cindex @code{ldb_test ()}
1860 Returns true if some bit described by the bit interval @code{b} is set in
1861 @code{n}.
1862
1863 @item cl_I dpb (const cl_I& newbyte, const cl_I& n, const cl_byte& b)
1864 @cindex @code{dpb ()}
1865 Returns @code{n}, with the bits described by the bit interval @code{b}
1866 replaced by @code{newbyte}. Only the lowest @code{b.size} bits of
1867 @code{newbyte} are relevant.
1868 @end table
1869
1870 The functions @code{ldb} and @code{dpb} implicitly shift. The following
1871 functions are their counterparts without shifting:
1872
1873 @table @code
1874 @item cl_I mask_field (const cl_I& n, const cl_byte& b)
1875 @cindex @code{mask_field ()}
1876 returns an integer with the bits described by the bit interval @code{b}
1877 copied from the corresponding bits in @code{n}, the other bits zero.
1878
1879 @item cl_I deposit_field (const cl_I& newbyte, const cl_I& n, const cl_byte& b)
1880 @cindex @code{deposit_field ()}
1881 returns an integer where the bits described by the bit interval @code{b}
1882 come from @code{newbyte} and the other bits come from @code{n}.
1883 @end table
1884
1885 The following relations hold:
1886
1887 @itemize @asis
1888 @item
1889 @code{ldb (n, b) = mask_field(n, b) >> b.position},
1890 @item
1891 @code{dpb (newbyte, n, b) = deposit_field (newbyte << b.position, n, b)},
1892 @item
1893 @code{deposit_field(newbyte,n,b) = n ^ mask_field(n,b) ^ mask_field(new_byte,b)}.
1894 @end itemize
1895
1896 The following operations on integers as bit strings are efficient shortcuts
1897 for common arithmetic operations:
1898
1899 @table @code
1900 @item cl_boolean oddp (const cl_I& x)
1901 @cindex @code{oddp ()}
1902 Returns true if the least significant bit of @code{x} is 1. Equivalent to
1903 @code{mod(x,2) != 0}.
1904
1905 @item cl_boolean evenp (const cl_I& x)
1906 @cindex @code{evenp ()}
1907 Returns true if the least significant bit of @code{x} is 0. Equivalent to
1908 @code{mod(x,2) == 0}.
1909
1910 @item cl_I operator << (const cl_I& x, const cl_I& n)
1911 @cindex @code{operator << ()}
1912 Shifts @code{x} by @code{n} bits to the left. @code{n} should be >=0.
1913 Equivalent to @code{x * expt(2,n)}.
1914
1915 @item cl_I operator >> (const cl_I& x, const cl_I& n)
1916 @cindex @code{operator >> ()}
1917 Shifts @code{x} by @code{n} bits to the right. @code{n} should be >=0.
1918 Bits shifted out to the right are thrown away.
1919 Equivalent to @code{floor(x / expt(2,n))}.
1920
1921 @item cl_I ash (const cl_I& x, const cl_I& y)
1922 @cindex @code{ash ()}
1923 Shifts @code{x} by @code{y} bits to the left (if @code{y}>=0) or
1924 by @code{-y} bits to the right (if @code{y}<=0). In other words, this
1925 returns @code{floor(x * expt(2,y))}.
1926
1927 @item uintL integer_length (const cl_I& x)
1928 @cindex @code{integer_length ()}
1929 Returns the number of bits (excluding the sign bit) needed to represent @code{x}
1930 in two's complement notation. This is the smallest n >= 0 such that
1931 -2^n <= x < 2^n. If x > 0, this is the unique n > 0 such that
1932 2^(n-1) <= x < 2^n.
1933
1934 @item uintL ord2 (const cl_I& x)
1935 @cindex @code{ord2 ()}
1936 @code{x} must be non-zero. This function returns the number of 0 bits at the
1937 right of @code{x} in two's complement notation. This is the largest n >= 0
1938 such that 2^n divides @code{x}.
1939
1940 @item uintL power2p (const cl_I& x)
1941 @cindex @code{power2p ()}
1942 @code{x} must be > 0. This function checks whether @code{x} is a power of 2.
1943 If @code{x} = 2^(n-1), it returns n. Else it returns 0.
1944 (See also the function @code{logp}.)
1945 @end table
1946
1947
1948 @subsection Number theoretic functions
1949
1950 @table @code
1951 @item uint32 gcd (uint32 a, uint32 b)
1952 @cindex @code{gcd ()}
1953 @itemx cl_I gcd (const cl_I& a, const cl_I& b)
1954 This function returns the greatest common divisor of @code{a} and @code{b},
1955 normalized to be >= 0.
1956
1957 @item cl_I xgcd (const cl_I& a, const cl_I& b, cl_I* u, cl_I* v)
1958 @cindex @code{xgcd ()}
1959 This function (``extended gcd'') returns the greatest common divisor @code{g} of
1960 @code{a} and @code{b} and at the same time the representation of @code{g}
1961 as an integral linear combination of @code{a} and @code{b}:
1962 @code{u} and @code{v} with @code{u*a+v*b = g}, @code{g} >= 0.
1963 @code{u} and @code{v} will be normalized to be of smallest possible absolute
1964 value, in the following sense: If @code{a} and @code{b} are non-zero, and
1965 @code{abs(a) != abs(b)}, @code{u} and @code{v} will satisfy the inequalities
1966 @code{abs(u) <= abs(b)/(2*g)}, @code{abs(v) <= abs(a)/(2*g)}.
1967
1968 @item cl_I lcm (const cl_I& a, const cl_I& b)
1969 @cindex @code{lcm ()}
1970 This function returns the least common multiple of @code{a} and @code{b},
1971 normalized to be >= 0.
1972
1973 @item cl_boolean logp (const cl_I& a, const cl_I& b, cl_RA* l)
1974 @cindex @code{logp ()}
1975 @itemx cl_boolean logp (const cl_RA& a, const cl_RA& b, cl_RA* l)
1976 @code{a} must be > 0. @code{b} must be >0 and != 1. If log(a,b) is
1977 rational number, this function returns true and sets *l = log(a,b), else
1978 it returns false.
1979 @end table
1980
1981
1982 @subsection Combinatorial functions
1983
1984 @table @code
1985 @item cl_I factorial (uintL n)
1986 @cindex @code{factorial ()}
1987 @code{n} must be a small integer >= 0. This function returns the factorial
1988 @code{n}! = @code{1*2*@dots{}*n}.
1989
1990 @item cl_I doublefactorial (uintL n)
1991 @cindex @code{doublefactorial ()}
1992 @code{n} must be a small integer >= 0. This function returns the 
1993 doublefactorial @code{n}!! = @code{1*3*@dots{}*n} or 
1994 @code{n}!! = @code{2*4*@dots{}*n}, respectively.
1995
1996 @item cl_I binomial (uintL n, uintL k)
1997 @cindex @code{binomial ()}
1998 @code{n} and @code{k} must be small integers >= 0. This function returns the
1999 binomial coefficient
2000 @tex
2001 ${n \choose k} = {n! \over n! (n-k)!}$
2002 @end tex
2003 @ifinfo
2004 (@code{n} choose @code{k}) = @code{n}! / @code{k}! @code{(n-k)}!
2005 @end ifinfo
2006 for 0 <= k <= n, 0 else.
2007 @end table
2008
2009
2010 @section Functions on floating-point numbers
2011
2012 Recall that a floating-point number consists of a sign @code{s}, an
2013 exponent @code{e} and a mantissa @code{m}. The value of the number is
2014 @code{(-1)^s * 2^e * m}.
2015
2016 Each of the classes
2017 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
2018 defines the following operations.
2019
2020 @table @code
2021 @item @var{type} scale_float (const @var{type}& x, sintL delta)
2022 @cindex @code{scale_float ()}
2023 @itemx @var{type} scale_float (const @var{type}& x, const cl_I& delta)
2024 Returns @code{x*2^delta}. This is more efficient than an explicit multiplication
2025 because it copies @code{x} and modifies the exponent.
2026 @end table
2027
2028 The following functions provide an abstract interface to the underlying
2029 representation of floating-point numbers.
2030
2031 @table @code
2032 @item sintL float_exponent (const @var{type}& x)
2033 @cindex @code{float_exponent ()}
2034 Returns the exponent @code{e} of @code{x}.
2035 For @code{x = 0.0}, this is 0. For @code{x} non-zero, this is the unique
2036 integer with @code{2^(e-1) <= abs(x) < 2^e}.
2037
2038 @item sintL float_radix (const @var{type}& x)
2039 @cindex @code{float_radix ()}
2040 Returns the base of the floating-point representation. This is always @code{2}.
2041
2042 @item @var{type} float_sign (const @var{type}& x)
2043 @cindex @code{float_sign ()}
2044 Returns the sign @code{s} of @code{x} as a float. The value is 1 for
2045 @code{x} >= 0, -1 for @code{x} < 0.
2046
2047 @item uintL float_digits (const @var{type}& x)
2048 @cindex @code{float_digits ()}
2049 Returns the number of mantissa bits in the floating-point representation
2050 of @code{x}, including the hidden bit. The value only depends on the type
2051 of @code{x}, not on its value.
2052
2053 @item uintL float_precision (const @var{type}& x)
2054 @cindex @code{float_precision ()}
2055 Returns the number of significant mantissa bits in the floating-point
2056 representation of @code{x}. Since denormalized numbers are not supported,
2057 this is the same as @code{float_digits(x)} if @code{x} is non-zero, and
2058 0 if @code{x} = 0.
2059 @end table
2060
2061 The complete internal representation of a float is encoded in the type
2062 @cindex @code{decoded_float}
2063 @cindex @code{decoded_sfloat}
2064 @cindex @code{decoded_ffloat}
2065 @cindex @code{decoded_dfloat}
2066 @cindex @code{decoded_lfloat}
2067 @code{decoded_float} (or @code{decoded_sfloat}, @code{decoded_ffloat},
2068 @code{decoded_dfloat}, @code{decoded_lfloat}, respectively), defined by
2069 @example
2070 struct decoded_@var{type}float @{
2071         @var{type} mantissa; cl_I exponent; @var{type} sign;
2072 @};
2073 @end example
2074
2075 and returned by the function
2076
2077 @table @code
2078 @item decoded_@var{type}float decode_float (const @var{type}& x)
2079 @cindex @code{decode_float ()}
2080 For @code{x} non-zero, this returns @code{(-1)^s}, @code{e}, @code{m} with
2081 @code{x = (-1)^s * 2^e * m} and @code{0.5 <= m < 1.0}. For @code{x} = 0,
2082 it returns @code{(-1)^s}=1, @code{e}=0, @code{m}=0.
2083 @code{e} is the same as returned by the function @code{float_exponent}.
2084 @end table
2085
2086 A complete decoding in terms of integers is provided as type
2087 @cindex @code{cl_idecoded_float}
2088 @example
2089 struct cl_idecoded_float @{
2090         cl_I mantissa; cl_I exponent; cl_I sign;
2091 @};
2092 @end example
2093 by the following function:
2094
2095 @table @code
2096 @item cl_idecoded_float integer_decode_float (const @var{type}& x)
2097 @cindex @code{integer_decode_float ()}
2098 For @code{x} non-zero, this returns @code{(-1)^s}, @code{e}, @code{m} with
2099 @code{x = (-1)^s * 2^e * m} and @code{m} an integer with @code{float_digits(x)}
2100 bits. For @code{x} = 0, it returns @code{(-1)^s}=1, @code{e}=0, @code{m}=0.
2101 WARNING: The exponent @code{e} is not the same as the one returned by
2102 the functions @code{decode_float} and @code{float_exponent}.
2103 @end table
2104
2105 Some other function, implemented only for class @code{cl_F}:
2106
2107 @table @code
2108 @item cl_F float_sign (const cl_F& x, const cl_F& y)
2109 @cindex @code{float_sign ()}
2110 This returns a floating point number whose precision and absolute value
2111 is that of @code{y} and whose sign is that of @code{x}. If @code{x} is
2112 zero, it is treated as positive. Same for @code{y}.
2113 @end table
2114
2115
2116 @section Conversion functions
2117 @cindex conversion
2118
2119 @subsection Conversion to floating-point numbers
2120
2121 The type @code{float_format_t} describes a floating-point format.
2122 @cindex @code{float_format_t}
2123
2124 @table @code
2125 @item float_format_t float_format (uintL n)
2126 @cindex @code{float_format ()}
2127 Returns the smallest float format which guarantees at least @code{n}
2128 decimal digits in the mantissa (after the decimal point).
2129
2130 @item float_format_t float_format (const cl_F& x)
2131 Returns the floating point format of @code{x}.
2132
2133 @item float_format_t default_float_format
2134 @cindex @code{default_float_format}
2135 Global variable: the default float format used when converting rational numbers
2136 to floats.
2137 @end table
2138
2139 To convert a real number to a float, each of the types
2140 @code{cl_R}, @code{cl_F}, @code{cl_I}, @code{cl_RA},
2141 @code{int}, @code{unsigned int}, @code{float}, @code{double}
2142 defines the following operations:
2143
2144 @table @code
2145 @item cl_F cl_float (const @var{type}&x, float_format_t f)
2146 @cindex @code{cl_float ()}
2147 Returns @code{x} as a float of format @code{f}.
2148 @item cl_F cl_float (const @var{type}&x, const cl_F& y)
2149 Returns @code{x} in the float format of @code{y}.
2150 @item cl_F cl_float (const @var{type}&x)
2151 Returns @code{x} as a float of format @code{default_float_format} if
2152 it is an exact number, or @code{x} itself if it is already a float.
2153 @end table
2154
2155 Of course, converting a number to a float can lose precision.
2156
2157 Every floating-point format has some characteristic numbers:
2158
2159 @table @code
2160 @item cl_F most_positive_float (float_format_t f)
2161 @cindex @code{most_positive_float ()}
2162 Returns the largest (most positive) floating point number in float format @code{f}.
2163
2164 @item cl_F most_negative_float (float_format_t f)
2165 @cindex @code{most_negative_float ()}
2166 Returns the smallest (most negative) floating point number in float format @code{f}.
2167
2168 @item cl_F least_positive_float (float_format_t f)
2169 @cindex @code{least_positive_float ()}
2170 Returns the least positive floating point number (i.e. > 0 but closest to 0)
2171 in float format @code{f}.
2172
2173 @item cl_F least_negative_float (float_format_t f)
2174 @cindex @code{least_negative_float ()}
2175 Returns the least negative floating point number (i.e. < 0 but closest to 0)
2176 in float format @code{f}.
2177
2178 @item cl_F float_epsilon (float_format_t f)
2179 @cindex @code{float_epsilon ()}
2180 Returns the smallest floating point number e > 0 such that @code{1+e != 1}.
2181
2182 @item cl_F float_negative_epsilon (float_format_t f)
2183 @cindex @code{float_negative_epsilon ()}
2184 Returns the smallest floating point number e > 0 such that @code{1-e != 1}.
2185 @end table
2186
2187
2188 @subsection Conversion to rational numbers
2189
2190 Each of the classes @code{cl_R}, @code{cl_RA}, @code{cl_F}
2191 defines the following operation:
2192
2193 @table @code
2194 @item cl_RA rational (const @var{type}& x)
2195 @cindex @code{rational ()}
2196 Returns the value of @code{x} as an exact number. If @code{x} is already
2197 an exact number, this is @code{x}. If @code{x} is a floating-point number,
2198 the value is a rational number whose denominator is a power of 2.
2199 @end table
2200
2201 In order to convert back, say, @code{(cl_F)(cl_R)"1/3"} to @code{1/3}, there is
2202 the function
2203
2204 @table @code
2205 @item cl_RA rationalize (const cl_R& x)
2206 @cindex @code{rationalize ()}
2207 If @code{x} is a floating-point number, it actually represents an interval
2208 of real numbers, and this function returns the rational number with
2209 smallest denominator (and smallest numerator, in magnitude)
2210 which lies in this interval.
2211 If @code{x} is already an exact number, this function returns @code{x}.
2212 @end table
2213
2214 If @code{x} is any float, one has
2215
2216 @itemize @asis
2217 @item
2218 @code{cl_float(rational(x),x) = x}
2219 @item
2220 @code{cl_float(rationalize(x),x) = x}
2221 @end itemize
2222
2223
2224 @section Random number generators
2225
2226
2227 A random generator is a machine which produces (pseudo-)random numbers.
2228 The include file @code{<cln/random.h>} defines a class @code{random_state}
2229 which contains the state of a random generator. If you make a copy
2230 of the random number generator, the original one and the copy will produce
2231 the same sequence of random numbers.
2232
2233 The following functions return (pseudo-)random numbers in different formats.
2234 Calling one of these modifies the state of the random number generator in
2235 a complicated but deterministic way.
2236
2237 The global variable
2238 @cindex @code{random_state}
2239 @cindex @code{default_random_state}
2240 @example
2241 random_state default_random_state
2242 @end example
2243 contains a default random number generator. It is used when the functions
2244 below are called without @code{random_state} argument.
2245
2246 @table @code
2247 @item uint32 random32 (random_state& randomstate)
2248 @itemx uint32 random32 ()
2249 @cindex @code{random32 ()}
2250 Returns a random unsigned 32-bit number. All bits are equally random.
2251
2252 @item cl_I random_I (random_state& randomstate, const cl_I& n)
2253 @itemx cl_I random_I (const cl_I& n)
2254 @cindex @code{random_I ()}
2255 @code{n} must be an integer > 0. This function returns a random integer @code{x}
2256 in the range @code{0 <= x < n}.
2257
2258 @item cl_F random_F (random_state& randomstate, const cl_F& n)
2259 @itemx cl_F random_F (const cl_F& n)
2260 @cindex @code{random_F ()}
2261 @code{n} must be a float > 0. This function returns a random floating-point
2262 number of the same format as @code{n} in the range @code{0 <= x < n}.
2263
2264 @item cl_R random_R (random_state& randomstate, const cl_R& n)
2265 @itemx cl_R random_R (const cl_R& n)
2266 @cindex @code{random_R ()}
2267 Behaves like @code{random_I} if @code{n} is an integer and like @code{random_F}
2268 if @code{n} is a float.
2269 @end table
2270
2271
2272 @section Obfuscating operators
2273 @cindex modifying operators
2274
2275 The modifying C/C++ operators @code{+=}, @code{-=}, @code{*=}, @code{/=},
2276 @code{&=}, @code{|=}, @code{^=}, @code{<<=}, @code{>>=}
2277 are not available by default because their
2278 use tends to make programs unreadable. It is trivial to get away without
2279 them. However, if you feel that you absolutely need these operators
2280 to get happy, then add
2281 @example
2282 #define WANT_OBFUSCATING_OPERATORS
2283 @end example
2284 @cindex @code{WANT_OBFUSCATING_OPERATORS}
2285 to the beginning of your source files, before the inclusion of any CLN
2286 include files. This flag will enable the following operators:
2287
2288 For the classes @code{cl_N}, @code{cl_R}, @code{cl_RA},
2289 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}:
2290
2291 @table @code
2292 @item @var{type}& operator += (@var{type}&, const @var{type}&)
2293 @cindex @code{operator += ()}
2294 @itemx @var{type}& operator -= (@var{type}&, const @var{type}&)
2295 @cindex @code{operator -= ()}
2296 @itemx @var{type}& operator *= (@var{type}&, const @var{type}&)
2297 @cindex @code{operator *= ()}
2298 @itemx @var{type}& operator /= (@var{type}&, const @var{type}&)
2299 @cindex @code{operator /= ()}
2300 @end table
2301
2302 For the class @code{cl_I}:
2303
2304 @table @code
2305 @item @var{type}& operator += (@var{type}&, const @var{type}&)
2306 @itemx @var{type}& operator -= (@var{type}&, const @var{type}&)
2307 @itemx @var{type}& operator *= (@var{type}&, const @var{type}&)
2308 @itemx @var{type}& operator &= (@var{type}&, const @var{type}&)
2309 @cindex @code{operator &= ()}
2310 @itemx @var{type}& operator |= (@var{type}&, const @var{type}&)
2311 @cindex @code{operator |= ()}
2312 @itemx @var{type}& operator ^= (@var{type}&, const @var{type}&)
2313 @cindex @code{operator ^= ()}
2314 @itemx @var{type}& operator <<= (@var{type}&, const @var{type}&)
2315 @cindex @code{operator <<= ()}
2316 @itemx @var{type}& operator >>= (@var{type}&, const @var{type}&)
2317 @cindex @code{operator >>= ()}
2318 @end table
2319
2320 For the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
2321 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}:
2322
2323 @table @code
2324 @item @var{type}& operator ++ (@var{type}& x)
2325 @cindex @code{operator ++ ()}
2326 The prefix operator @code{++x}.
2327
2328 @item void operator ++ (@var{type}& x, int)
2329 The postfix operator @code{x++}.
2330
2331 @item @var{type}& operator -- (@var{type}& x)
2332 @cindex @code{operator -- ()}
2333 The prefix operator @code{--x}.
2334
2335 @item void operator -- (@var{type}& x, int)
2336 The postfix operator @code{x--}.
2337 @end table
2338
2339 Note that by using these obfuscating operators, you wouldn't gain efficiency:
2340 In CLN @samp{x += y;} is exactly the same as  @samp{x = x+y;}, not more
2341 efficient.
2342
2343
2344 @chapter Input/Output
2345 @cindex Input/Output
2346
2347 @section Internal and printed representation
2348 @cindex representation
2349
2350 All computations deal with the internal representations of the numbers.
2351
2352 Every number has an external representation as a sequence of ASCII characters.
2353 Several external representations may denote the same number, for example,
2354 "20.0" and "20.000".
2355
2356 Converting an internal to an external representation is called ``printing'',
2357 @cindex printing
2358 converting an external to an internal representation is called ``reading''.
2359 @cindex reading
2360 In CLN, it is always true that conversion of an internal to an external
2361 representation and then back to an internal representation will yield the
2362 same internal representation. Symbolically: @code{read(print(x)) == x}.
2363 This is called ``print-read consistency''. 
2364
2365 Different types of numbers have different external representations (case
2366 is insignificant):
2367
2368 @table @asis
2369 @item Integers
2370 External representation: @var{sign}@{@var{digit}@}+. The reader also accepts the
2371 Common Lisp syntaxes @var{sign}@{@var{digit}@}+@code{.} with a trailing dot
2372 for decimal integers
2373 and the @code{#@var{n}R}, @code{#b}, @code{#o}, @code{#x} prefixes.
2374
2375 @item Rational numbers
2376 External representation: @var{sign}@{@var{digit}@}+@code{/}@{@var{digit}@}+.
2377 The @code{#@var{n}R}, @code{#b}, @code{#o}, @code{#x} prefixes are allowed
2378 here as well.
2379
2380 @item Floating-point numbers
2381 External representation: @var{sign}@{@var{digit}@}*@var{exponent} or
2382 @var{sign}@{@var{digit}@}*@code{.}@{@var{digit}@}*@var{exponent} or
2383 @var{sign}@{@var{digit}@}*@code{.}@{@var{digit}@}+. A precision specifier
2384 of the form _@var{prec} may be appended. There must be at least
2385 one digit in the non-exponent part. The exponent has the syntax
2386 @var{expmarker} @var{expsign} @{@var{digit}@}+.
2387 The exponent marker is
2388
2389 @itemize @asis
2390 @item
2391 @samp{s} for short-floats,
2392 @item
2393 @samp{f} for single-floats,
2394 @item
2395 @samp{d} for double-floats,
2396 @item
2397 @samp{L} for long-floats,
2398 @end itemize
2399
2400 or @samp{e}, which denotes a default float format. The precision specifying
2401 suffix has the syntax _@var{prec} where @var{prec} denotes the number of
2402 valid mantissa digits (in decimal, excluding leading zeroes), cf. also
2403 function @samp{float_format}.
2404
2405 @item Complex numbers
2406 External representation:
2407 @itemize @asis
2408 @item
2409 In algebraic notation: @code{@var{realpart}+@var{imagpart}i}. Of course,
2410 if @var{imagpart} is negative, its printed representation begins with
2411 a @samp{-}, and the @samp{+} between @var{realpart} and @var{imagpart}
2412 may be omitted. Note that this notation cannot be used when the @var{imagpart}
2413 is rational and the rational number's base is >18, because the @samp{i}
2414 is then read as a digit.
2415 @item
2416 In Common Lisp notation: @code{#C(@var{realpart} @var{imagpart})}.
2417 @end itemize
2418 @end table
2419
2420
2421 @section Input functions
2422
2423 Including @code{<cln/io.h>} defines a number of simple input functions
2424 that read from @code{std::istream&}:
2425
2426 @table @code
2427 @item int freadchar (std::istream& stream)
2428 Reads a character from @code{stream}. Returns @code{cl_EOF} (not a @samp{char}!)
2429 if the end of stream was encountered or an error occurred.
2430
2431 @item int funreadchar (std::istream& stream, int c)
2432 Puts back @code{c} onto @code{stream}. @code{c} must be the result of the
2433 last @code{freadchar} operation on @code{stream}.
2434 @end table
2435
2436 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
2437 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
2438 defines, in @code{<cln/@var{type}_io.h>}, the following input function:
2439
2440 @table @code
2441 @item std::istream& operator>> (std::istream& stream, @var{type}& result)
2442 Reads a number from @code{stream} and stores it in the @code{result}.
2443 @end table
2444
2445 The most flexible input functions, defined in @code{<cln/@var{type}_io.h>},
2446 are the following:
2447
2448 @table @code
2449 @item cl_N read_complex (std::istream& stream, const cl_read_flags& flags)
2450 @itemx cl_R read_real (std::istream& stream, const cl_read_flags& flags)
2451 @itemx cl_F read_float (std::istream& stream, const cl_read_flags& flags)
2452 @itemx cl_RA read_rational (std::istream& stream, const cl_read_flags& flags)
2453 @itemx cl_I read_integer (std::istream& stream, const cl_read_flags& flags)
2454 Reads a number from @code{stream}. The @code{flags} are parameters which
2455 affect the input syntax. Whitespace before the number is silently skipped.
2456
2457 @item cl_N read_complex (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
2458 @itemx cl_R read_real (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
2459 @itemx cl_F read_float (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
2460 @itemx cl_RA read_rational (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
2461 @itemx cl_I read_integer (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse)
2462 Reads a number from a string in memory. The @code{flags} are parameters which
2463 affect the input syntax. The string starts at @code{string} and ends at
2464 @code{string_limit} (exclusive limit). @code{string_limit} may also be
2465 @code{NULL}, denoting the entire string, i.e. equivalent to
2466 @code{string_limit = string + strlen(string)}. If @code{end_of_parse} is
2467 @code{NULL}, the string in memory must contain exactly one number and nothing
2468 more, else a fatal error will be signalled. If @code{end_of_parse}
2469 is not @code{NULL}, @code{*end_of_parse} will be assigned a pointer past
2470 the last parsed character (i.e. @code{string_limit} if nothing came after
2471 the number). Whitespace is not allowed.
2472 @end table
2473
2474 The structure @code{cl_read_flags} contains the following fields:
2475
2476 @table @code
2477 @item cl_read_syntax_t syntax
2478 The possible results of the read operation. Possible values are
2479 @code{syntax_number}, @code{syntax_real}, @code{syntax_rational},
2480 @code{syntax_integer}, @code{syntax_float}, @code{syntax_sfloat},
2481 @code{syntax_ffloat}, @code{syntax_dfloat}, @code{syntax_lfloat}.
2482
2483 @item cl_read_lsyntax_t lsyntax
2484 Specifies the language-dependent syntax variant for the read operation.
2485 Possible values are
2486
2487 @table @code
2488 @item lsyntax_standard
2489 accept standard algebraic notation only, no complex numbers,
2490 @item lsyntax_algebraic
2491 accept the algebraic notation @code{@var{x}+@var{y}i} for complex numbers,
2492 @item lsyntax_commonlisp
2493 accept the @code{#b}, @code{#o}, @code{#x} syntaxes for binary, octal,
2494 hexadecimal numbers,
2495 @code{#@var{base}R} for rational numbers in a given base,
2496 @code{#c(@var{realpart} @var{imagpart})} for complex numbers,
2497 @item lsyntax_all
2498 accept all of these extensions.
2499 @end table
2500
2501 @item unsigned int rational_base
2502 The base in which rational numbers are read.
2503
2504 @item float_format_t float_flags.default_float_format
2505 The float format used when reading floats with exponent marker @samp{e}.
2506
2507 @item float_format_t float_flags.default_lfloat_format
2508 The float format used when reading floats with exponent marker @samp{l}.
2509
2510 @item cl_boolean float_flags.mantissa_dependent_float_format
2511 When this flag is true, floats specified with more digits than corresponding
2512 to the exponent marker they contain, but without @var{_nnn} suffix, will get a
2513 precision corresponding to their number of significant digits.
2514 @end table
2515
2516
2517 @section Output functions
2518
2519 Including @code{<cln/io.h>} defines a number of simple output functions
2520 that write to @code{std::ostream&}:
2521
2522 @table @code
2523 @item void fprintchar (std::ostream& stream, char c)
2524 Prints the character @code{x} literally on the @code{stream}.
2525
2526 @item void fprint (std::ostream& stream, const char * string)
2527 Prints the @code{string} literally on the @code{stream}.
2528
2529 @item void fprintdecimal (std::ostream& stream, int x)
2530 @itemx void fprintdecimal (std::ostream& stream, const cl_I& x)
2531 Prints the integer @code{x} in decimal on the @code{stream}.
2532
2533 @item void fprintbinary (std::ostream& stream, const cl_I& x)
2534 Prints the integer @code{x} in binary (base 2, without prefix)
2535 on the @code{stream}.
2536
2537 @item void fprintoctal (std::ostream& stream, const cl_I& x)
2538 Prints the integer @code{x} in octal (base 8, without prefix)
2539 on the @code{stream}.
2540
2541 @item void fprinthexadecimal (std::ostream& stream, const cl_I& x)
2542 Prints the integer @code{x} in hexadecimal (base 16, without prefix)
2543 on the @code{stream}.
2544 @end table
2545
2546 Each of the classes @code{cl_N}, @code{cl_R}, @code{cl_RA}, @code{cl_I},
2547 @code{cl_F}, @code{cl_SF}, @code{cl_FF}, @code{cl_DF}, @code{cl_LF}
2548 defines, in @code{<cln/@var{type}_io.h>}, the following output functions:
2549
2550 @table @code
2551 @item void fprint (std::ostream& stream, const @var{type}& x)
2552 @itemx std::ostream& operator<< (std::ostream& stream, const @var{type}& x)
2553 Prints the number @code{x} on the @code{stream}. The output may depend
2554 on the global printer settings in the variable @code{default_print_flags}.
2555 The @code{ostream} flags and settings (flags, width and locale) are
2556 ignored.
2557 @end table
2558
2559 The most flexible output function, defined in @code{<cln/@var{type}_io.h>},
2560 are the following:
2561 @example
2562 void print_complex  (std::ostream& stream, const cl_print_flags& flags,
2563                      const cl_N& z);
2564 void print_real     (std::ostream& stream, const cl_print_flags& flags,
2565                      const cl_R& z);
2566 void print_float    (std::ostream& stream, const cl_print_flags& flags,
2567                      const cl_F& z);
2568 void print_rational (std::ostream& stream, const cl_print_flags& flags,
2569                      const cl_RA& z);
2570 void print_integer  (std::ostream& stream, const cl_print_flags& flags,
2571                      const cl_I& z);
2572 @end example
2573 Prints the number @code{x} on the @code{stream}. The @code{flags} are
2574 parameters which affect the output.
2575
2576 The structure type @code{cl_print_flags} contains the following fields:
2577
2578 @table @code
2579 @item unsigned int rational_base
2580 The base in which rational numbers are printed. Default is @code{10}.
2581
2582 @item cl_boolean rational_readably
2583 If this flag is true, rational numbers are printed with radix specifiers in
2584 Common Lisp syntax (@code{#@var{n}R} or @code{#b} or @code{#o} or @code{#x}
2585 prefixes, trailing dot). Default is false.
2586
2587 @item cl_boolean float_readably
2588 If this flag is true, type specific exponent markers have precedence over 'E'.
2589 Default is false.
2590
2591 @item float_format_t default_float_format
2592 Floating point numbers of this format will be printed using the 'E' exponent
2593 marker. Default is @code{float_format_ffloat}.
2594
2595 @item cl_boolean complex_readably
2596 If this flag is true, complex numbers will be printed using the Common Lisp
2597 syntax @code{#C(@var{realpart} @var{imagpart})}. Default is false.
2598
2599 @item cl_string univpoly_varname
2600 Univariate polynomials with no explicit indeterminate name will be printed
2601 using this variable name. Default is @code{"x"}.
2602 @end table
2603
2604 The global variable @code{default_print_flags} contains the default values,
2605 used by the function @code{fprint}.
2606
2607
2608 @chapter Rings
2609
2610 CLN has a class of abstract rings.
2611
2612 @example
2613                          Ring
2614                        cl_ring
2615                      <cln/ring.h>
2616 @end example
2617
2618 Rings can be compared for equality:
2619
2620 @table @code
2621 @item bool operator== (const cl_ring&, const cl_ring&)
2622 @itemx bool operator!= (const cl_ring&, const cl_ring&)
2623 These compare two rings for equality.
2624 @end table
2625
2626 Given a ring @code{R}, the following members can be used.
2627
2628 @table @code
2629 @item void R->fprint (std::ostream& stream, const cl_ring_element& x)
2630 @cindex @code{fprint ()}
2631 @itemx cl_boolean R->equal (const cl_ring_element& x, const cl_ring_element& y)
2632 @cindex @code{equal ()}
2633 @itemx cl_ring_element R->zero ()
2634 @cindex @code{zero ()}
2635 @itemx cl_boolean R->zerop (const cl_ring_element& x)
2636 @cindex @code{zerop ()}
2637 @itemx cl_ring_element R->plus (const cl_ring_element& x, const cl_ring_element& y)
2638 @cindex @code{plus ()}
2639 @itemx cl_ring_element R->minus (const cl_ring_element& x, const cl_ring_element& y)
2640 @cindex @code{minus ()}
2641 @itemx cl_ring_element R->uminus (const cl_ring_element& x)
2642 @cindex @code{uminus ()}
2643 @itemx cl_ring_element R->one ()
2644 @cindex @code{one ()}
2645 @itemx cl_ring_element R->canonhom (const cl_I& x)
2646 @cindex @code{canonhom ()}
2647 @itemx cl_ring_element R->mul (const cl_ring_element& x, const cl_ring_element& y)
2648 @cindex @code{mul ()}
2649 @itemx cl_ring_element R->square (const cl_ring_element& x)
2650 @cindex @code{square ()}
2651 @itemx cl_ring_element R->expt_pos (const cl_ring_element& x, const cl_I& y)
2652 @cindex @code{expt_pos ()}
2653 @end table
2654
2655 The following rings are built-in.
2656
2657 @table @code
2658 @item cl_null_ring cl_0_ring
2659 The null ring, containing only zero.
2660
2661 @item cl_complex_ring cl_C_ring
2662 The ring of complex numbers. This corresponds to the type @code{cl_N}.
2663
2664 @item cl_real_ring cl_R_ring
2665 The ring of real numbers. This corresponds to the type @code{cl_R}.
2666
2667 @item cl_rational_ring cl_RA_ring
2668 The ring of rational numbers. This corresponds to the type @code{cl_RA}.
2669
2670 @item cl_integer_ring cl_I_ring
2671 The ring of integers. This corresponds to the type @code{cl_I}.
2672 @end table
2673
2674 Type tests can be performed for any of @code{cl_C_ring}, @code{cl_R_ring},
2675 @code{cl_RA_ring}, @code{cl_I_ring}:
2676
2677 @table @code
2678 @item cl_boolean instanceof (const cl_number& x, const cl_number_ring& R)
2679 @cindex @code{instanceof ()}
2680 Tests whether the given number is an element of the number ring R.
2681 @end table
2682
2683
2684 @chapter Modular integers
2685 @cindex modular integer
2686
2687 @section Modular integer rings
2688 @cindex ring
2689
2690 CLN implements modular integers, i.e. integers modulo a fixed integer N.
2691 The modulus is explicitly part of every modular integer. CLN doesn't
2692 allow you to (accidentally) mix elements of different modular rings,
2693 e.g. @code{(3 mod 4) + (2 mod 5)} will result in a runtime error.
2694 (Ideally one would imagine a generic data type @code{cl_MI(N)}, but C++
2695 doesn't have generic types. So one has to live with runtime checks.)
2696
2697 The class of modular integer rings is
2698
2699 @example
2700                          Ring
2701                        cl_ring
2702                      <cln/ring.h>
2703                           |
2704                           |
2705                  Modular integer ring
2706                     cl_modint_ring
2707                   <cln/modinteger.h>
2708 @end example
2709 @cindex @code{cl_modint_ring}
2710
2711 and the class of all modular integers (elements of modular integer rings) is
2712
2713 @example
2714                     Modular integer
2715                          cl_MI
2716                    <cln/modinteger.h>
2717 @end example
2718
2719 Modular integer rings are constructed using the function
2720
2721 @table @code
2722 @item cl_modint_ring find_modint_ring (const cl_I& N)
2723 @cindex @code{find_modint_ring ()}
2724 This function returns the modular ring @samp{Z/NZ}. It takes care
2725 of finding out about special cases of @code{N}, like powers of two
2726 and odd numbers for which Montgomery multiplication will be a win,
2727 @cindex Montgomery multiplication
2728 and precomputes any necessary auxiliary data for computing modulo @code{N}.
2729 There is a cache table of rings, indexed by @code{N} (or, more precisely,
2730 by @code{abs(N)}). This ensures that the precomputation costs are reduced
2731 to a minimum.
2732 @end table
2733
2734 Modular integer rings can be compared for equality:
2735
2736 @table @code
2737 @item bool operator== (const cl_modint_ring&, const cl_modint_ring&)
2738 @cindex @code{operator == ()}
2739 @itemx bool operator!= (const cl_modint_ring&, const cl_modint_ring&)
2740 @cindex @code{operator != ()}
2741 These compare two modular integer rings for equality. Two different calls
2742 to @code{find_modint_ring} with the same argument necessarily return the
2743 same ring because it is memoized in the cache table.
2744 @end table
2745
2746 @section Functions on modular integers
2747
2748 Given a modular integer ring @code{R}, the following members can be used.
2749
2750 @table @code
2751 @item cl_I R->modulus
2752 @cindex @code{modulus}
2753 This is the ring's modulus, normalized to be nonnegative: @code{abs(N)}.
2754
2755 @item cl_MI R->zero()
2756 @cindex @code{zero ()}
2757 This returns @code{0 mod N}.
2758
2759 @item cl_MI R->one()
2760 @cindex @code{one ()}
2761 This returns @code{1 mod N}.
2762
2763 @item cl_MI R->canonhom (const cl_I& x)
2764 @cindex @code{canonhom ()}
2765 This returns @code{x mod N}.
2766
2767 @item cl_I R->retract (const cl_MI& x)
2768 @cindex @code{retract ()}
2769 This is a partial inverse function to @code{R->canonhom}. It returns the
2770 standard representative (@code{>=0}, @code{<N}) of @code{x}.
2771
2772 @item cl_MI R->random(random_state& randomstate)
2773 @itemx cl_MI R->random()
2774 @cindex @code{random ()}
2775 This returns a random integer modulo @code{N}.
2776 @end table
2777
2778 The following operations are defined on modular integers.
2779
2780 @table @code
2781 @item cl_modint_ring x.ring ()
2782 @cindex @code{ring ()}
2783 Returns the ring to which the modular integer @code{x} belongs.
2784
2785 @item cl_MI operator+ (const cl_MI&, const cl_MI&)
2786 @cindex @code{operator + ()}
2787 Returns the sum of two modular integers. One of the arguments may also
2788 be a plain integer.
2789
2790 @item cl_MI operator- (const cl_MI&, const cl_MI&)
2791 @cindex @code{operator - ()}
2792 Returns the difference of two modular integers. One of the arguments may also
2793 be a plain integer.
2794
2795 @item cl_MI operator- (const cl_MI&)
2796 Returns the negative of a modular integer.
2797
2798 @item cl_MI operator* (const cl_MI&, const cl_MI&)
2799 @cindex @code{operator * ()}
2800 Returns the product of two modular integers. One of the arguments may also
2801 be a plain integer.
2802
2803 @item cl_MI square (const cl_MI&)
2804 @cindex @code{square ()}
2805 Returns the square of a modular integer.
2806
2807 @item cl_MI recip (const cl_MI& x)
2808 @cindex @code{recip ()}
2809 Returns the reciprocal @code{x^-1} of a modular integer @code{x}. @code{x}
2810 must be coprime to the modulus, otherwise an error message is issued.
2811
2812 @item cl_MI div (const cl_MI& x, const cl_MI& y)
2813 @cindex @code{div ()}
2814 Returns the quotient @code{x*y^-1} of two modular integers @code{x}, @code{y}.
2815 @code{y} must be coprime to the modulus, otherwise an error message is issued.
2816
2817 @item cl_MI expt_pos (const cl_MI& x, const cl_I& y)
2818 @cindex @code{expt_pos ()}
2819 @code{y} must be > 0. Returns @code{x^y}.
2820
2821 @item cl_MI expt (const cl_MI& x, const cl_I& y)
2822 @cindex @code{expt ()}
2823 Returns @code{x^y}. If @code{y} is negative, @code{x} must be coprime to the
2824 modulus, else an error message is issued.
2825
2826 @item cl_MI operator<< (const cl_MI& x, const cl_I& y)
2827 @cindex @code{operator << ()}
2828 Returns @code{x*2^y}.
2829
2830 @item cl_MI operator>> (const cl_MI& x, const cl_I& y)
2831 @cindex @code{operator >> ()}
2832 Returns @code{x*2^-y}. When @code{y} is positive, the modulus must be odd,
2833 or an error message is issued.
2834
2835 @item bool operator== (const cl_MI&, const cl_MI&)
2836 @cindex @code{operator == ()}
2837 @itemx bool operator!= (const cl_MI&, const cl_MI&)
2838 @cindex @code{operator != ()}
2839 Compares two modular integers, belonging to the same modular integer ring,
2840 for equality.
2841
2842 @item cl_boolean zerop (const cl_MI& x)
2843 @cindex @code{zerop ()}
2844 Returns true if @code{x} is @code{0 mod N}.
2845 @end table
2846
2847 The following output functions are defined (see also the chapter on
2848 input/output).
2849
2850 @table @code
2851 @item void fprint (std::ostream& stream, const cl_MI& x)
2852 @cindex @code{fprint ()}
2853 @itemx std::ostream& operator<< (std::ostream& stream, const cl_MI& x)
2854 @cindex @code{operator << ()}
2855 Prints the modular integer @code{x} on the @code{stream}. The output may depend
2856 on the global printer settings in the variable @code{default_print_flags}.
2857 @end table
2858
2859
2860 @chapter Symbolic data types
2861 @cindex symbolic type
2862
2863 CLN implements two symbolic (non-numeric) data types: strings and symbols.
2864
2865 @section Strings
2866 @cindex string
2867 @cindex @code{cl_string}
2868
2869 The class
2870
2871 @example
2872                       String
2873                      cl_string
2874                    <cln/string.h>
2875 @end example
2876
2877 implements immutable strings.
2878
2879 Strings are constructed through the following constructors:
2880
2881 @table @code
2882 @item cl_string (const char * s)
2883 Returns an immutable copy of the (zero-terminated) C string @code{s}.
2884
2885 @item cl_string (const char * ptr, unsigned long len)
2886 Returns an immutable copy of the @code{len} characters at
2887 @code{ptr[0]}, @dots{}, @code{ptr[len-1]}. NUL characters are allowed.
2888 @end table
2889
2890 The following functions are available on strings:
2891
2892 @table @code
2893 @item operator =
2894 Assignment from @code{cl_string} and @code{const char *}.
2895
2896 @item s.length()
2897 @cindex @code{length ()}
2898 @itemx strlen(s)
2899 @cindex @code{strlen ()}
2900 Returns the length of the string @code{s}.
2901
2902 @item s[i]
2903 @cindex @code{operator [] ()}
2904 Returns the @code{i}th character of the string @code{s}.
2905 @code{i} must be in the range @code{0 <= i < s.length()}.
2906
2907 @item bool equal (const cl_string& s1, const cl_string& s2)
2908 @cindex @code{equal ()}
2909 Compares two strings for equality. One of the arguments may also be a
2910 plain @code{const char *}.
2911 @end table
2912
2913 @section Symbols
2914 @cindex symbol
2915 @cindex @code{cl_symbol}
2916
2917 Symbols are uniquified strings: all symbols with the same name are shared.
2918 This means that comparison of two symbols is fast (effectively just a pointer
2919 comparison), whereas comparison of two strings must in the worst case walk
2920 both strings until their end.
2921 Symbols are used, for example, as tags for properties, as names of variables
2922 in polynomial rings, etc.
2923
2924 Symbols are constructed through the following constructor:
2925
2926 @table @code
2927 @item cl_symbol (const cl_string& s)
2928 Looks up or creates a new symbol with a given name.
2929 @end table
2930
2931 The following operations are available on symbols:
2932
2933 @table @code
2934 @item cl_string (const cl_symbol& sym)
2935 Conversion to @code{cl_string}: Returns the string which names the symbol
2936 @code{sym}.
2937
2938 @item bool equal (const cl_symbol& sym1, const cl_symbol& sym2)
2939 @cindex @code{equal ()}
2940 Compares two symbols for equality. This is very fast.
2941 @end table
2942
2943
2944 @chapter Univariate polynomials
2945 @cindex polynomial
2946 @cindex univariate polynomial
2947
2948 @section Univariate polynomial rings
2949
2950 CLN implements univariate polynomials (polynomials in one variable) over an
2951 arbitrary ring. The indeterminate variable may be either unnamed (and will be
2952 printed according to @code{default_print_flags.univpoly_varname}, which
2953 defaults to @samp{x}) or carry a given name. The base ring and the
2954 indeterminate are explicitly part of every polynomial. CLN doesn't allow you to
2955 (accidentally) mix elements of different polynomial rings, e.g.
2956 @code{(a^2+1) * (b^3-1)} will result in a runtime error. (Ideally this should
2957 return a multivariate polynomial, but they are not yet implemented in CLN.)
2958
2959 The classes of univariate polynomial rings are
2960
2961 @example
2962                            Ring
2963                          cl_ring
2964                        <cln/ring.h>
2965                             |
2966                             |
2967                  Univariate polynomial ring
2968                       cl_univpoly_ring
2969                       <cln/univpoly.h>
2970                             |
2971            +----------------+-------------------+
2972            |                |                   |
2973  Complex polynomial ring    |    Modular integer polynomial ring
2974  cl_univpoly_complex_ring   |        cl_univpoly_modint_ring
2975  <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
2976                             |
2977            +----------------+
2978            |                |
2979    Real polynomial ring     |
2980    cl_univpoly_real_ring    |
2981    <cln/univpoly_real.h>    |
2982                             |
2983            +----------------+
2984            |                |
2985  Rational polynomial ring   |
2986  cl_univpoly_rational_ring  |
2987  <cln/univpoly_rational.h>  |
2988                             |
2989            +----------------+
2990            |
2991  Integer polynomial ring
2992  cl_univpoly_integer_ring
2993  <cln/univpoly_integer.h>
2994 @end example
2995
2996 and the corresponding classes of univariate polynomials are
2997
2998 @example
2999                    Univariate polynomial
3000                           cl_UP
3001                       <cln/univpoly.h>
3002                             |
3003            +----------------+-------------------+
3004            |                |                   |
3005    Complex polynomial       |      Modular integer polynomial
3006         cl_UP_N             |                cl_UP_MI
3007  <cln/univpoly_complex.h>   |        <cln/univpoly_modint.h>
3008                             |
3009            +----------------+
3010            |                |
3011      Real polynomial        |
3012         cl_UP_R             |
3013   <cln/univpoly_real.h>     |
3014                             |
3015            +----------------+
3016            |                |
3017    Rational polynomial      |
3018         cl_UP_RA            |
3019  <cln/univpoly_rational.h>  |
3020                             |
3021            +----------------+
3022            |
3023    Integer polynomial
3024         cl_UP_I
3025  <cln/univpoly_integer.h>
3026 @end example
3027
3028 Univariate polynomial rings are constructed using the functions
3029
3030 @table @code
3031 @item cl_univpoly_ring find_univpoly_ring (const cl_ring& R)
3032 @itemx cl_univpoly_ring find_univpoly_ring (const cl_ring& R, const cl_symbol& varname)
3033 This function returns the polynomial ring @samp{R[X]}, unnamed or named.
3034 @code{R} may be an arbitrary ring. This function takes care of finding out
3035 about special cases of @code{R}, such as the rings of complex numbers,
3036 real numbers, rational numbers, integers, or modular integer rings.
3037 There is a cache table of rings, indexed by @code{R} and @code{varname}.
3038 This ensures that two calls of this function with the same arguments will
3039 return the same polynomial ring.
3040
3041 @itemx cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R)
3042 @cindex @code{find_univpoly_ring ()}
3043 @itemx cl_univpoly_complex_ring find_univpoly_ring (const cl_complex_ring& R, const cl_symbol& varname)
3044 @itemx cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R)
3045 @itemx cl_univpoly_real_ring find_univpoly_ring (const cl_real_ring& R, const cl_symbol& varname)
3046 @itemx cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R)
3047 @itemx cl_univpoly_rational_ring find_univpoly_ring (const cl_rational_ring& R, const cl_symbol& varname)
3048 @itemx cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R)
3049 @itemx cl_univpoly_integer_ring find_univpoly_ring (const cl_integer_ring& R, const cl_symbol& varname)
3050 @itemx cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R)
3051 @itemx cl_univpoly_modint_ring find_univpoly_ring (const cl_modint_ring& R, const cl_symbol& varname)
3052 These functions are equivalent to the general @code{find_univpoly_ring},
3053 only the return type is more specific, according to the base ring's type.
3054 @end table
3055
3056 @section Functions on univariate polynomials
3057
3058 Given a univariate polynomial ring @code{R}, the following members can be used.
3059
3060 @table @code
3061 @item cl_ring R->basering()
3062 @cindex @code{basering ()}
3063 This returns the base ring, as passed to @samp{find_univpoly_ring}.
3064
3065 @item cl_UP R->zero()
3066 @cindex @code{zero ()}
3067 This returns @code{0 in R}, a polynomial of degree -1.
3068
3069 @item cl_UP R->one()
3070 @cindex @code{one ()}
3071 This returns @code{1 in R}, a polynomial of degree <= 0.
3072
3073 @item cl_UP R->canonhom (const cl_I& x)
3074 @cindex @code{canonhom ()}
3075 This returns @code{x in R}, a polynomial of degree <= 0.
3076
3077 @item cl_UP R->monomial (const cl_ring_element& x, uintL e)
3078 @cindex @code{monomial ()}
3079 This returns a sparse polynomial: @code{x * X^e}, where @code{X} is the
3080 indeterminate.
3081
3082 @item cl_UP R->create (sintL degree)
3083 @cindex @code{create ()}
3084 Creates a new polynomial with a given degree. The zero polynomial has degree
3085 @code{-1}. After creating the polynomial, you should put in the coefficients,
3086 using the @code{set_coeff} member function, and then call the @code{finalize}
3087 member function.
3088 @end table
3089
3090 The following are the only destructive operations on univariate polynomials.
3091
3092 @table @code
3093 @item void set_coeff (cl_UP& x, uintL index, const cl_ring_element& y)
3094 @cindex @code{set_coeff ()}
3095 This changes the coefficient of @code{X^index} in @code{x} to be @code{y}.
3096 After changing a polynomial and before applying any "normal" operation on it,
3097 you should call its @code{finalize} member function.
3098
3099 @item void finalize (cl_UP& x)
3100 @cindex @code{finalize ()}
3101 This function marks the endpoint of destructive modifications of a polynomial.
3102 It normalizes the internal representation so that subsequent computations have
3103 less overhead. Doing normal computations on unnormalized polynomials may
3104 produce wrong results or crash the program.
3105 @end table
3106
3107 The following operations are defined on univariate polynomials.
3108
3109 @table @code
3110 @item cl_univpoly_ring x.ring ()
3111 @cindex @code{ring ()}
3112 Returns the ring to which the univariate polynomial @code{x} belongs.
3113
3114 @item cl_UP operator+ (const cl_UP&, const cl_UP&)
3115 @cindex @code{operator + ()}
3116 Returns the sum of two univariate polynomials.
3117
3118 @item cl_UP operator- (const cl_UP&, const cl_UP&)
3119 @cindex @code{operator - ()}
3120 Returns the difference of two univariate polynomials.
3121
3122 @item cl_UP operator- (const cl_UP&)
3123 Returns the negative of a univariate polynomial.
3124
3125 @item cl_UP operator* (const cl_UP&, const cl_UP&)
3126 @cindex @code{operator * ()}
3127 Returns the product of two univariate polynomials. One of the arguments may
3128 also be a plain integer or an element of the base ring.
3129
3130 @item cl_UP square (const cl_UP&)
3131 @cindex @code{square ()}
3132 Returns the square of a univariate polynomial.
3133
3134 @item cl_UP expt_pos (const cl_UP& x, const cl_I& y)
3135 @cindex @code{expt_pos ()}
3136 @code{y} must be > 0. Returns @code{x^y}.
3137
3138 @item bool operator== (const cl_UP&, const cl_UP&)
3139 @cindex @code{operator == ()}
3140 @itemx bool operator!= (const cl_UP&, const cl_UP&)
3141 @cindex @code{operator != ()}
3142 Compares two univariate polynomials, belonging to the same univariate
3143 polynomial ring, for equality.
3144
3145 @item cl_boolean zerop (const cl_UP& x)
3146 @cindex @code{zerop ()}
3147 Returns true if @code{x} is @code{0 in R}.
3148
3149 @item sintL degree (const cl_UP& x)
3150 @cindex @code{degree ()}
3151 Returns the degree of the polynomial. The zero polynomial has degree @code{-1}.
3152
3153 @item cl_ring_element coeff (const cl_UP& x, uintL index)
3154 @cindex @code{coeff ()}
3155 Returns the coefficient of @code{X^index} in the polynomial @code{x}.
3156
3157 @item cl_ring_element x (const cl_ring_element& y)
3158 @cindex @code{operator () ()}
3159 Evaluation: If @code{x} is a polynomial and @code{y} belongs to the base ring,
3160 then @samp{x(y)} returns the value of the substitution of @code{y} into
3161 @code{x}.
3162
3163 @item cl_UP deriv (const cl_UP& x)
3164 @cindex @code{deriv ()}
3165 Returns the derivative of the polynomial @code{x} with respect to the
3166 indeterminate @code{X}.
3167 @end table
3168
3169 The following output functions are defined (see also the chapter on
3170 input/output).
3171
3172 @table @code
3173 @item void fprint (std::ostream& stream, const cl_UP& x)
3174 @cindex @code{fprint ()}
3175 @itemx std::ostream& operator<< (std::ostream& stream, const cl_UP& x)
3176 @cindex @code{operator << ()}
3177 Prints the univariate polynomial @code{x} on the @code{stream}. The output may
3178 depend on the global printer settings in the variable
3179 @code{default_print_flags}.
3180 @end table
3181
3182 @section Special polynomials
3183
3184 The following functions return special polynomials.
3185
3186 @table @code
3187 @item cl_UP_I tschebychev (sintL n)
3188 @cindex @code{tschebychev ()}
3189 @cindex Chebyshev polynomial
3190 Returns the n-th Chebyshev polynomial (n >= 0).
3191
3192 @item cl_UP_I hermite (sintL n)
3193 @cindex @code{hermite ()}
3194 @cindex Hermite polynomial
3195 Returns the n-th Hermite polynomial (n >= 0).
3196
3197 @item cl_UP_RA legendre (sintL n)
3198 @cindex @code{legendre ()}
3199 @cindex Legende polynomial
3200 Returns the n-th Legendre polynomial (n >= 0).
3201
3202 @item cl_UP_I laguerre (sintL n)
3203 @cindex @code{laguerre ()}
3204 @cindex Laguerre polynomial
3205 Returns the n-th Laguerre polynomial (n >= 0).
3206 @end table
3207
3208 Information how to derive the differential equation satisfied by each
3209 of these polynomials from their definition can be found in the
3210 @code{doc/polynomial/} directory.
3211
3212
3213 @chapter Internals
3214
3215 @section Why C++ ?
3216 @cindex advocacy
3217
3218 Using C++ as an implementation language provides
3219
3220 @itemize @bullet
3221 @item
3222 Efficiency: It compiles to machine code.
3223
3224 @item
3225 @cindex portability
3226 Portability: It runs on all platforms supporting a C++ compiler. Because
3227 of the availability of GNU C++, this includes all currently used 32-bit and
3228 64-bit platforms, independently of the quality of the vendor's C++ compiler.
3229
3230 @item
3231 Type safety: The C++ compilers knows about the number types and complains if,
3232 for example, you try to assign a float to an integer variable. However,
3233 a drawback is that C++ doesn't know about generic types, hence a restriction
3234 like that @code{operator+ (const cl_MI&, const cl_MI&)} requires that both
3235 arguments belong to the same modular ring cannot be expressed as a compile-time
3236 information.
3237
3238 @item
3239 Algebraic syntax: The elementary operations @code{+}, @code{-}, @code{*},
3240 @code{=}, @code{==}, ... can be used in infix notation, which is more
3241 convenient than Lisp notation @samp{(+ x y)} or C notation @samp{add(x,y,&z)}.
3242 @end itemize
3243
3244 With these language features, there is no need for two separate languages,
3245 one for the implementation of the library and one in which the library's users
3246 can program. This means that a prototype implementation of an algorithm
3247 can be integrated into the library immediately after it has been tested and
3248 debugged. No need to rewrite it in a low-level language after having prototyped
3249 in a high-level language.
3250
3251
3252 @section Memory efficiency
3253
3254 In order to save memory allocations, CLN implements:
3255
3256 @itemize @bullet
3257 @item
3258 Object sharing: An operation like @code{x+0} returns @code{x} without copying
3259 it.
3260 @item
3261 @cindex garbage collection
3262 @cindex reference counting
3263 Garbage collection: A reference counting mechanism makes sure that any
3264 number object's storage is freed immediately when the last reference to the
3265 object is gone.
3266 @item
3267 @cindex immediate numbers
3268 Small integers are represented as immediate values instead of pointers
3269 to heap allocated storage. This means that integers @code{> -2^29},
3270 @code{< 2^29} don't consume heap memory, unless they were explicitly allocated
3271 on the heap.
3272 @end itemize
3273
3274
3275 @section Speed efficiency
3276
3277 Speed efficiency is obtained by the combination of the following tricks
3278 and algorithms:
3279
3280 @itemize @bullet
3281 @item
3282 Small integers, being represented as immediate values, don't require
3283 memory access, just a couple of instructions for each elementary operation.
3284 @item
3285 The kernel of CLN has been written in assembly language for some CPUs
3286 (@code{i386}, @code{m68k}, @code{sparc}, @code{mips}, @code{arm}).
3287 @item
3288 On all CPUs, CLN may be configured to use the superefficient low-level
3289 routines from GNU GMP version 3.
3290 @item
3291 For large numbers, CLN uses, instead of the standard @code{O(N^2)}
3292 algorithm, the Karatsuba multiplication, which is an
3293 @iftex
3294 @tex
3295 $O(N^{1.6})$
3296 @end tex
3297 @end iftex
3298 @ifinfo
3299 @code{O(N^1.6)}
3300 @end ifinfo
3301 algorithm.
3302 @item
3303 For very large numbers (more than 12000 decimal digits), CLN uses
3304 @iftex
3305 Sch{@"o}nhage-Strassen
3306 @cindex Sch{@"o}nhage-Strassen multiplication
3307 @end iftex
3308 @ifinfo
3309 Schönhage-Strassen
3310 @cindex Schönhage-Strassen multiplication
3311 @end ifinfo
3312 multiplication, which is an asymptotically optimal multiplication 
3313 algorithm.
3314 @item
3315 These fast multiplication algorithms also give improvements in the speed
3316 of division and radix conversion.
3317 @end itemize
3318
3319
3320 @section Garbage collection
3321 @cindex garbage collection
3322
3323 All the number classes are reference count classes: They only contain a pointer
3324 to an object in the heap. Upon construction, assignment and destruction of
3325 number objects, only the objects' reference count are manipulated.
3326
3327 Memory occupied by number objects are automatically reclaimed as soon as
3328 their reference count drops to zero.
3329
3330 For number rings, another strategy is implemented: There is a cache of,
3331 for example, the modular integer rings. A modular integer ring is destroyed
3332 only if its reference count dropped to zero and the cache is about to be
3333 resized. The effect of this strategy is that recently used rings remain
3334 cached, whereas undue memory consumption through cached rings is avoided.
3335
3336
3337 @chapter Using the library
3338
3339 For the following discussion, we will assume that you have installed
3340 the CLN source in @code{$CLN_DIR} and built it in @code{$CLN_TARGETDIR}.
3341 For example, for me it's @code{CLN_DIR="$HOME/cln"} and
3342 @code{CLN_TARGETDIR="$HOME/cln/linuxelf"}. You might define these as
3343 environment variables, or directly substitute the appropriate values.
3344
3345
3346 @section Compiler options
3347 @cindex compiler options
3348
3349 Until you have installed CLN in a public place, the following options are
3350 needed:
3351
3352 When you compile CLN application code, add the flags
3353 @example
3354    -I$CLN_DIR/include -I$CLN_TARGETDIR/include
3355 @end example
3356 to the C++ compiler's command line (@code{make} variable CFLAGS or CXXFLAGS).
3357 When you link CLN application code to form an executable, add the flags
3358 @example
3359    $CLN_TARGETDIR/src/libcln.a
3360 @end example
3361 to the C/C++ compiler's command line (@code{make} variable LIBS).
3362
3363 If you did a @code{make install}, the include files are installed in a
3364 public directory (normally @code{/usr/local/include}), hence you don't
3365 need special flags for compiling. The library has been installed to a
3366 public directory as well (normally @code{/usr/local/lib}), hence when
3367 linking a CLN application it is sufficient to give the flag @code{-lcln}.
3368
3369 Since CLN version 1.1, there are two tools to make the creation of
3370 software packages that use CLN easier:
3371 @itemize @bullet
3372 @item
3373 @cindex @code{cln-config}
3374 @code{cln-config} is a shell script that you can use to determine the
3375 compiler and linker command line options required to compile and link a
3376 program with CLN.  Start it with @code{--help} to learn about its options
3377 or consult the manpage that comes with it.
3378 @item
3379 @cindex @code{AC_PATH_CLN}
3380 @code{AC_PATH_CLN} is for packages configured using GNU automake.
3381 The synopsis is:
3382 @example
3383 @code{AC_PATH_CLN([@var{MIN-VERSION}, [@var{ACTION-IF-FOUND} [, @var{ACTION-IF-NOT-FOUND}]]])}
3384 @end example
3385 This macro determines the location of CLN using @code{cln-config}, which
3386 is either found in the user's path, or from the environment variable
3387 @code{CLN_CONFIG}.  It tests the installed libraries to make sure that
3388 their version is not earlier than @var{MIN-VERSION} (a default version
3389 will be used if not specified). If the required version was found, sets
3390 the @env{CLN_CPPFLAGS} and the @env{CLN_LIBS} variables. This
3391 macro is in the file @file{cln.m4} which is installed in
3392 @file{$datadir/aclocal}. Note that if automake was installed with a
3393 different @samp{--prefix} than CLN, you will either have to manually
3394 move @file{cln.m4} to automake's @file{$datadir/aclocal}, or give
3395 aclocal the @samp{-I} option when running it. Here is a possible example
3396 to be included in your package's @file{configure.ac}:
3397 @example
3398 AC_PATH_CLN(1.1.0, [
3399   LIBS="$LIBS $CLN_LIBS"
3400   CPPFLAGS="$CPPFLAGS $CLN_CPPFLAGS"
3401 ], AC_MSG_ERROR([No suitable installed version of CLN could be found.]))
3402 @end example
3403 @end itemize
3404
3405
3406 @section Compatibility to old CLN versions
3407 @cindex namespace
3408 @cindex compatibility
3409
3410 As of CLN version 1.1 all non-macro identifiers were hidden in namespace
3411 @code{cln} in order to avoid potential name clashes with other C++
3412 libraries. If you have an old application, you will have to manually
3413 port it to the new scheme. The following principles will help during
3414 the transition:
3415 @itemize @bullet
3416 @item
3417 All headers are now in a separate subdirectory. Instead of including
3418 @code{cl_}@var{something}@code{.h}, include
3419 @code{cln/}@var{something}@code{.h} now.
3420 @item
3421 All public identifiers (typenames and functions) have lost their
3422 @code{cl_} prefix.  Exceptions are all the typenames of number types,
3423 (cl_N, cl_I, cl_MI, @dots{}), rings, symbolic types (cl_string,
3424 cl_symbol) and polynomials (cl_UP_@var{type}).  (This is because their
3425 names would not be mnemonic enough once the namespace @code{cln} is
3426 imported. Even in a namespace we favor @code{cl_N} over @code{N}.)
3427 @item
3428 All public @emph{functions} that had by a @code{cl_} in their name still
3429 carry that @code{cl_} if it is intrinsic part of a typename (as in
3430 @code{cl_I_to_int ()}).
3431 @end itemize
3432 When developing other libraries, please keep in mind not to import the
3433 namespace @code{cln} in one of your public header files by saying
3434 @code{using namespace cln;}. This would propagate to other applications
3435 and can cause name clashes there.
3436
3437
3438 @section Include files
3439 @cindex include files
3440 @cindex header files
3441
3442 Here is a summary of the include files and their contents.
3443
3444 @table @code
3445 @item <cln/object.h>
3446 General definitions, reference counting, garbage collection.
3447 @item <cln/number.h>
3448 The class cl_number.
3449 @item <cln/complex.h>
3450 Functions for class cl_N, the complex numbers.
3451 @item <cln/real.h>
3452 Functions for class cl_R, the real numbers.
3453 @item <cln/float.h>
3454 Functions for class cl_F, the floats.
3455 @item <cln/sfloat.h>
3456 Functions for class cl_SF, the short-floats.
3457 @item <cln/ffloat.h>
3458 Functions for class cl_FF, the single-floats.
3459 @item <cln/dfloat.h>
3460 Functions for class cl_DF, the double-floats.
3461 @item <cln/lfloat.h>
3462 Functions for class cl_LF, the long-floats.
3463 @item <cln/rational.h>
3464 Functions for class cl_RA, the rational numbers.
3465 @item <cln/integer.h>
3466 Functions for class cl_I, the integers.
3467 @item <cln/io.h>
3468 Input/Output.
3469 @item <cln/complex_io.h>
3470 Input/Output for class cl_N, the complex numbers.
3471 @item <cln/real_io.h>
3472 Input/Output for class cl_R, the real numbers.
3473 @item <cln/float_io.h>
3474 Input/Output for class cl_F, the floats.
3475 @item <cln/sfloat_io.h>
3476 Input/Output for class cl_SF, the short-floats.
3477 @item <cln/ffloat_io.h>
3478 Input/Output for class cl_FF, the single-floats.
3479 @item <cln/dfloat_io.h>
3480 Input/Output for class cl_DF, the double-floats.
3481 @item <cln/lfloat_io.h>
3482 Input/Output for class cl_LF, the long-floats.
3483 @item <cln/rational_io.h>
3484 Input/Output for class cl_RA, the rational numbers.
3485 @item <cln/integer_io.h>
3486 Input/Output for class cl_I, the integers.
3487 @item <cln/input.h>
3488 Flags for customizing input operations.
3489 @item <cln/output.h>
3490 Flags for customizing output operations.
3491 @item <cln/malloc.h>
3492 @code{malloc_hook}, @code{free_hook}.
3493 @item <cln/abort.h>
3494 @code{cl_abort}.
3495 @item <cln/condition.h>
3496 Conditions/exceptions.
3497 @item <cln/string.h>
3498 Strings.
3499 @item <cln/symbol.h>
3500 Symbols.
3501 @item <cln/proplist.h>
3502 Property lists.
3503 @item <cln/ring.h>
3504 General rings.
3505 @item <cln/null_ring.h>
3506 The null ring.
3507 @item <cln/complex_ring.h>
3508 The ring of complex numbers.
3509 @item <cln/real_ring.h>
3510 The ring of real numbers.
3511 @item <cln/rational_ring.h>
3512 The ring of rational numbers.
3513 @item <cln/integer_ring.h>
3514 The ring of integers.
3515 @item <cln/numtheory.h>
3516 Number threory functions.
3517 @item <cln/modinteger.h>
3518 Modular integers.
3519 @item <cln/V.h>
3520 Vectors.
3521 @item <cln/GV.h>
3522 General vectors.
3523 @item <cln/GV_number.h>
3524 General vectors over cl_number.
3525 @item <cln/GV_complex.h>
3526 General vectors over cl_N.
3527 @item <cln/GV_real.h>
3528 General vectors over cl_R.
3529 @item <cln/GV_rational.h>
3530 General vectors over cl_RA.
3531 @item <cln/GV_integer.h>
3532 General vectors over cl_I.
3533 @item <cln/GV_modinteger.h>
3534 General vectors of modular integers.
3535 @item <cln/SV.h>
3536 Simple vectors.
3537 @item <cln/SV_number.h>
3538 Simple vectors over cl_number.
3539 @item <cln/SV_complex.h>
3540 Simple vectors over cl_N.
3541 @item <cln/SV_real.h>
3542 Simple vectors over cl_R.
3543 @item <cln/SV_rational.h>
3544 Simple vectors over cl_RA.
3545 @item <cln/SV_integer.h>
3546 Simple vectors over cl_I.
3547 @item <cln/SV_ringelt.h>
3548 Simple vectors of general ring elements.
3549 @item <cln/univpoly.h>
3550 Univariate polynomials.
3551 @item <cln/univpoly_integer.h>
3552 Univariate polynomials over the integers.
3553 @item <cln/univpoly_rational.h>
3554 Univariate polynomials over the rational numbers.
3555 @item <cln/univpoly_real.h>
3556 Univariate polynomials over the real numbers.
3557 @item <cln/univpoly_complex.h>
3558 Univariate polynomials over the complex numbers.
3559 @item <cln/univpoly_modint.h>
3560 Univariate polynomials over modular integer rings.
3561 @item <cln/timing.h>
3562 Timing facilities.
3563 @item <cln/cln.h>
3564 Includes all of the above.
3565 @end table
3566
3567
3568 @section An Example
3569
3570 A function which computes the nth Fibonacci number can be written as follows.
3571 @cindex Fibonacci number
3572
3573 @example
3574 #include <cln/integer.h>
3575 #include <cln/real.h>
3576 using namespace cln;
3577
3578 // Returns F_n, computed as the nearest integer to
3579 // ((1+sqrt(5))/2)^n/sqrt(5). Assume n>=0.
3580 const cl_I fibonacci (int n)
3581 @{
3582         // Need a precision of ((1+sqrt(5))/2)^-n.
3583         float_format_t prec = float_format((int)(0.208987641*n+5));
3584         cl_R sqrt5 = sqrt(cl_float(5,prec));
3585         cl_R phi = (1+sqrt5)/2;
3586         return round1( expt(phi,n)/sqrt5 );
3587 @}
3588 @end example
3589
3590 Let's explain what is going on in detail.
3591
3592 The include file @code{<cln/integer.h>} is necessary because the type
3593 @code{cl_I} is used in the function, and the include file @code{<cln/real.h>}
3594 is needed for the type @code{cl_R} and the floating point number functions.
3595 The order of the include files does not matter.  In order not to write
3596 out @code{cln::}@var{foo} in this simple example we can safely import
3597 the whole namespace @code{cln}.
3598
3599 Then comes the function declaration. The argument is an @code{int}, the
3600 result an integer. The return type is defined as @samp{const cl_I}, not
3601 simply @samp{cl_I}, because that allows the compiler to detect typos like
3602 @samp{fibonacci(n) = 100}. It would be possible to declare the return
3603 type as @code{const cl_R} (real number) or even @code{const cl_N} (complex
3604 number). We use the most specialized possible return type because functions
3605 which call @samp{fibonacci} will be able to profit from the compiler's type
3606 analysis: Adding two integers is slightly more efficient than adding the
3607 same objects declared as complex numbers, because it needs less type
3608 dispatch. Also, when linking to CLN as a non-shared library, this minimizes
3609 the size of the resulting executable program.
3610
3611 The result will be computed as expt(phi,n)/sqrt(5), rounded to the nearest
3612 integer. In order to get a correct result, the absolute error should be less
3613 than 1/2, i.e. the relative error should be less than sqrt(5)/(2*expt(phi,n)).
3614 To this end, the first line computes a floating point precision for sqrt(5)
3615 and phi.
3616
3617 Then sqrt(5) is computed by first converting the integer 5 to a floating point
3618 number and than taking the square root. The converse, first taking the square
3619 root of 5, and then converting to the desired precision, would not work in
3620 CLN: The square root would be computed to a default precision (normally
3621 single-float precision), and the following conversion could not help about
3622 the lacking accuracy. This is because CLN is not a symbolic computer algebra
3623 system and does not represent sqrt(5) in a non-numeric way.
3624
3625 The type @code{cl_R} for sqrt5 and, in the following line, phi is the only
3626 possible choice. You cannot write @code{cl_F} because the C++ compiler can
3627 only infer that @code{cl_float(5,prec)} is a real number. You cannot write
3628 @code{cl_N} because a @samp{round1} does not exist for general complex
3629 numbers.
3630
3631 When the function returns, all the local variables in the function are
3632 automatically reclaimed (garbage collected). Only the result survives and
3633 gets passed to the caller.
3634
3635 The file @code{fibonacci.cc} in the subdirectory @code{examples}
3636 contains this implementation together with an even faster algorithm.
3637
3638 @section Debugging support
3639 @cindex debugging
3640
3641 When debugging a CLN application with GNU @code{gdb}, two facilities are
3642 available from the library:
3643
3644 @itemize @bullet
3645 @item The library does type checks, range checks, consistency checks at
3646 many places. When one of these fails, the function @code{cl_abort()} is
3647 called. Its default implementation is to perform an @code{exit(1)}, so
3648 you won't have a core dump. But for debugging, it is best to set a
3649 breakpoint at this function:
3650 @example
3651 (gdb) break cl_abort
3652 @end example
3653 When this breakpoint is hit, look at the stack's backtrace:
3654 @example
3655 (gdb) where
3656 @end example
3657
3658 @item The debugger's normal @code{print} command doesn't know about
3659 CLN's types and therefore prints mostly useless hexadecimal addresses.
3660 CLN offers a function @code{cl_print}, callable from the debugger,
3661 for printing number objects. In order to get this function, you have
3662 to define the macro @samp{CL_DEBUG} and then include all the header files
3663 for which you want @code{cl_print} debugging support. For example:
3664 @cindex @code{CL_DEBUG}
3665 @example
3666 #define CL_DEBUG
3667 #include <cln/string.h>
3668 @end example
3669 Now, if you have in your program a variable @code{cl_string s}, and
3670 inspect it under @code{gdb}, the output may look like this:
3671 @example
3672 (gdb) print s
3673 $7 = @{<cl_gcpointer> = @{ = @{pointer = 0x8055b60, heappointer = 0x8055b60,
3674   word = 134568800@}@}, @}
3675 (gdb) call cl_print(s)
3676 (cl_string) ""
3677 $8 = 134568800
3678 @end example
3679 Note that the output of @code{cl_print} goes to the program's error output,
3680 not to gdb's standard output.
3681
3682 Note, however, that the above facility does not work with all CLN types,
3683 only with number objects and similar. Therefore CLN offers a member function
3684 @code{debug_print()} on all CLN types. The same macro @samp{CL_DEBUG}
3685 is needed for this member function to be implemented. Under @code{gdb},
3686 you call it like this:
3687 @cindex @code{debug_print ()}
3688 @example
3689 (gdb) print s
3690 $7 = @{<cl_gcpointer> = @{ = @{pointer = 0x8055b60, heappointer = 0x8055b60,
3691   word = 134568800@}@}, @}
3692 (gdb) call s.debug_print()
3693 (cl_string) ""
3694 (gdb) define cprint
3695 >call ($1).debug_print()
3696 >end
3697 (gdb) cprint s
3698 (cl_string) ""
3699 @end example
3700 Unfortunately, this feature does not seem to work under all circumstances.
3701 @end itemize
3702
3703
3704 @chapter Customizing
3705 @cindex customizing
3706
3707 @section Error handling
3708
3709 When a fatal error occurs, an error message is output to the standard error
3710 output stream, and the function @code{cl_abort} is called. The default
3711 version of this function (provided in the library) terminates the application.
3712 To catch such a fatal error, you need to define the function @code{cl_abort}
3713 yourself, with the prototype
3714 @example
3715 #include <cln/abort.h>
3716 void cl_abort (void);
3717 @end example
3718 @cindex @code{cl_abort ()}
3719 This function must not return control to its caller.
3720
3721
3722 @section Floating-point underflow
3723 @cindex underflow
3724
3725 Floating point underflow denotes the situation when a floating-point number
3726 is to be created which is so close to @code{0} that its exponent is too
3727 low to be represented internally. By default, this causes a fatal error.
3728 If you set the global variable
3729 @example
3730 cl_boolean cl_inhibit_floating_point_underflow
3731 @end example
3732 to @code{cl_true}, the error will be inhibited, and a floating-point zero
3733 will be generated instead.  The default value of 
3734 @code{cl_inhibit_floating_point_underflow} is @code{cl_false}.
3735
3736
3737 @section Customizing I/O
3738
3739 The output of the function @code{fprint} may be customized by changing the
3740 value of the global variable @code{default_print_flags}.
3741 @cindex @code{default_print_flags}
3742
3743
3744 @section Customizing the memory allocator
3745
3746 Every memory allocation of CLN is done through the function pointer
3747 @code{malloc_hook}. Freeing of this memory is done through the function
3748 pointer @code{free_hook}. The default versions of these functions,
3749 provided in the library, call @code{malloc} and @code{free} and check
3750 the @code{malloc} result against @code{NULL}.
3751 If you want to provide another memory allocator, you need to define
3752 the variables @code{malloc_hook} and @code{free_hook} yourself,
3753 like this:
3754 @example
3755 #include <cln/malloc.h>
3756 namespace cln @{
3757         void* (*malloc_hook) (size_t size) = @dots{};
3758         void (*free_hook) (void* ptr)      = @dots{};
3759 @}
3760 @end example
3761 @cindex @code{malloc_hook ()}
3762 @cindex @code{free_hook ()}
3763 The @code{cl_malloc_hook} function must not return a @code{NULL} pointer.
3764
3765 It is not possible to change the memory allocator at runtime, because
3766 it is already called at program startup by the constructors of some
3767 global variables.
3768
3769
3770
3771
3772 @c Indices
3773
3774 @unnumbered Index
3775
3776 @printindex my
3777
3778
3779 @c Table of contents
3780 @contents
3781
3782
3783 @bye