diff options
Diffstat (limited to 'mpc/doc/mpc.info')
-rw-r--r-- | mpc/doc/mpc.info | 1799 |
1 files changed, 1799 insertions, 0 deletions
diff --git a/mpc/doc/mpc.info b/mpc/doc/mpc.info new file mode 100644 index 0000000000..6b41675908 --- /dev/null +++ b/mpc/doc/mpc.info @@ -0,0 +1,1799 @@ +This is mpc.info, produced by makeinfo version 5.2 from mpc.texi. + +This manual is for GNU MPC, a library for multiple precision complex +arithmetic, version 1.0.3 of February 2015. + + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012 INRIA + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections. A copy of the license is + included in the section entitled "GNU Free Documentation License." +INFO-DIR-SECTION GNU Packages +START-INFO-DIR-ENTRY +* mpc: (mpc)Multiple Precision Complex Library. +END-INFO-DIR-ENTRY + + +File: mpc.info, Node: Top, Next: Copying, Up: (dir) + +GNU MPC +******* + +This manual documents how to install and use the GNU Multiple Precision +Complex Library, version 1.0.3 + +* Menu: + +* Copying:: GNU MPC Copying Conditions (LGPL). +* Introduction to GNU MPC:: Brief introduction to GNU MPC. +* Installing GNU MPC:: How to configure and compile the GNU MPC library. +* Reporting Bugs:: How to usefully report bugs. +* GNU MPC Basics:: What every GNU MPC user should know. +* Complex Functions:: Functions for arithmetic on complex numbers. +* References:: +* Concept Index:: +* Function Index:: +* GNU Free Documentation License:: + + +File: mpc.info, Node: Copying, Next: Introduction to GNU MPC, Prev: Top, Up: Top + +GNU MPC Copying Conditions +************************** + +GNU MPC is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + + GNU MPC is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +General Public License for more details. + + You should have received a copy of the GNU Lesser General Public +License along with this program. If not, see +<http://www.gnu.org/licenses/>. + + +File: mpc.info, Node: Introduction to GNU MPC, Next: Installing GNU MPC, Prev: Copying, Up: Top + +1 Introduction to GNU MPC +************************* + +GNU MPC is a portable library written in C for arbitrary precision +arithmetic on complex numbers providing correct rounding. It implements +a multiprecision equivalent of the C99 standard. It builds upon the GNU +MP and the GNU MPFR libraries. + +1.1 How to use this Manual +========================== + +Everyone should read *note GNU MPC Basics::. If you need to install the +library yourself, you need to read *note Installing GNU MPC::, too. + + The remainder of the manual can be used for later reference, although +it is probably a good idea to skim through it. + + +File: mpc.info, Node: Installing GNU MPC, Next: Reporting Bugs, Prev: Introduction to GNU MPC, Up: Top + +2 Installing GNU MPC +******************** + +To build GNU MPC, you first have to install GNU MP (version 4.3.2 or +higher) and GNU MPFR (version 2.4.2 or higher) on your computer. You +need a C compiler; GCC version 4.4 or higher is recommended, since GNU +MPC may trigger a bug in previous versions, see the thread at +<http://lists.gforge.inria.fr/pipermail/mpc-discuss/2011-February/000823.html>. +And you need a standard Unix 'make' program, plus some other standard +Unix utility programs. + + Here are the steps needed to install the library on Unix systems: + + 1. 'tar xzf mpc-1.0.3.tar.gz' + + 2. 'cd mpc-1.0.3' + + 3. './configure' + + if GMP and GNU MPFR are installed into standard directories, that + is, directories that are searched by default by the compiler and + the linking tools. + + './configure --with-gmp=<gmp_install_dir>' + + is used to indicate a different location where GMP is installed. + Alternatively, you can specify directly GMP include and GMP lib + directories with './configure --with-gmp-lib=<gmp_lib_dir> + --with-gmp-include=<gmp_include_dir>'. + + './configure --with-mpfr=<mpfr_install_dir>' + + is used to indicate a different location where GNU MPFR is + installed. Alternatively, you can specify directly GNU MPFR + include and GNU MPFR lib directories with './configure + --with-mpf-lib=<mpfr_lib_dir> + --with-mpfr-include=<mpfr_include_dir>'. + + Another useful parameter is '--prefix', which can be used to + specify an alternative installation location instead of + '/usr/local'; see 'make install' below. + + To enable checking for memory leaks using 'valgrind' during 'make + check', add the parameter '--enable-valgrind-tests'. + + If for debugging purposes you wish to log calls to GNU MPC + functions from within your code, add the parameter + '--enable-logging'. In your code, replace the inclusion of 'mpc.h' + by 'mpc-log.h' and link the executable dynamically. Then all calls + to functions with only complex arguments are printed to 'stderr' in + the following form: First, the function name is given, followed by + its type such as 'c_cc', meaning that the function has one complex + result (one 'c' in front of the '_'), computed from two complex + arguments (two 'c' after the '_'). Then, the precisions of the + real and the imaginary part of the first result is given, followed + by the second one and so on. Finally, for each argument, the + precisions of its real and imaginary part are specified and the + argument itself is printed in hexadecimal via the function + 'mpc_out_str' (*note String and Stream Input and Output::). The + option requires a dynamic library, so it may not be combined with + '--disable-shared'. + + Use './configure --help' for an exhaustive list of parameters. + + 4. 'make' + + This compiles GNU MPC in the working directory. + + 5. 'make check' + + This will make sure GNU MPC was built correctly. + + If you get error messages, please report them to + 'mpc-discuss@lists.gforge.inria.fr' (*Note Reporting Bugs::, for + information on what to include in useful bug reports). + + 6. 'make install' + + This will copy the file 'mpc.h' to the directory + '/usr/local/include', the file 'libmpc.a' to the directory + '/usr/local/lib', and the file 'mpc.info' to the directory + '/usr/local/share/info' (or if you passed the '--prefix' option to + 'configure', using the prefix directory given as argument to + '--prefix' instead of '/usr/local'). Note: you need write + permissions on these directories. + +2.1 Other 'make' Targets +======================== + +There are some other useful make targets: + + * 'info' + + Create an info version of the manual, in 'mpc.info'. + + * 'pdf' + + Create a PDF version of the manual, in 'doc/mpc.pdf'. + + * 'dvi' + + Create a DVI version of the manual, in 'doc/mpc.dvi'. + + * 'ps' + + Create a Postscript version of the manual, in 'doc/mpc.ps'. + + * 'html' + + Create an HTML version of the manual, in several pages in the + directory 'doc/mpc.html'; if you want only one output HTML file, + then type 'makeinfo --html --no-split mpc.texi' instead. + + * 'clean' + + Delete all object files and archive files, but not the + configuration files. + + * 'distclean' + + Delete all files not included in the distribution. + + * 'uninstall' + + Delete all files copied by 'make install'. + +2.2 Known Build Problems +======================== + +On AIX, if GMP was built with the 64-bit ABI, before building and +testing GNU MPC, it might be necessary to set the 'OBJECT_MODE' +environment variable to 64 by, e.g., + + 'export OBJECT_MODE=64' + + This has been tested with the C compiler IBM XL C/C++ Enterprise +Edition V8.0 for AIX, version: 08.00.0000.0021, GMP 4.2.4 and GNU MPFR +2.4.1. + + Please report any other problems you encounter to +'mpc-discuss@lists.gforge.inria.fr'. *Note Reporting Bugs::. + + +File: mpc.info, Node: Reporting Bugs, Next: GNU MPC Basics, Prev: Installing GNU MPC, Up: Top + +3 Reporting Bugs +**************** + +If you think you have found a bug in the GNU MPC library, please +investigate and report it. We have made this library available to you, +and it is not to ask too much from you, to ask you to report the bugs +that you find. + + There are a few things you should think about when you put your bug +report together. + + You have to send us a test case that makes it possible for us to +reproduce the bug. Include instructions on how to run the test case. + + You also have to explain what is wrong; if you get a crash, or if the +results printed are incorrect and in that case, in what way. + + Please include compiler version information in your bug report. This +can be extracted using 'gcc -v', or 'cc -V' on some machines. Also, +include the output from 'uname -a'. + + If your bug report is good, we will do our best to help you to get a +corrected version of the library; if the bug report is poor, we will not +do anything about it (aside of chiding you to send better bug reports). + + Send your bug report to: 'mpc-discuss@lists.gforge.inria.fr'. + + If you think something in this manual is unclear, or downright +incorrect, or if the language needs to be improved, please send a note +to the same address. + + +File: mpc.info, Node: GNU MPC Basics, Next: Complex Functions, Prev: Reporting Bugs, Up: Top + +4 GNU MPC Basics +**************** + +All declarations needed to use GNU MPC are collected in the include file +'mpc.h'. It is designed to work with both C and C++ compilers. You +should include that file in any program using the GNU MPC library by +adding the line + #include "mpc.h" + +4.1 Nomenclature and Types +========================== + +"Complex number" or "Complex" for short, is a pair of two arbitrary +precision floating-point numbers (for the real and imaginary parts). +The C data type for such objects is 'mpc_t'. + +The "Precision" is the number of bits used to represent the mantissa of +the real and imaginary parts; the corresponding C data type is +'mpfr_prec_t'. For more details on the allowed precision range, *note +(mpfr.info)Nomenclature and Types::. + +The "rounding mode" specifies the way to round the result of a complex +operation, in case the exact result can not be represented exactly in +the destination mantissa; the corresponding C data type is 'mpc_rnd_t'. +A complex rounding mode is a pair of two rounding modes: one for the +real part, one for the imaginary part. + +4.2 Function Classes +==================== + +There is only one class of functions in the GNU MPC library, namely +functions for complex arithmetic. The function names begin with 'mpc_'. +The associated type is 'mpc_t'. + +4.3 GNU MPC Variable Conventions +================================ + +As a general rule, all GNU MPC functions expect output arguments before +input arguments. This notation is based on an analogy with the +assignment operator. + + GNU MPC allows you to use the same variable for both input and output +in the same expression. For example, the main function for +floating-point multiplication, 'mpc_mul', can be used like this: +'mpc_mul (x, x, x, rnd_mode)'. This computes the square of X with +rounding mode 'rnd_mode' and puts the result back in X. + + Before you can assign to an GNU MPC variable, you need to initialize +it by calling one of the special initialization functions. When you are +done with a variable, you need to clear it out, using one of the +functions for that purpose. + + A variable should only be initialized once, or at least cleared out +between each initialization. After a variable has been initialized, it +may be assigned to any number of times. + + For efficiency reasons, avoid to initialize and clear out a variable +in loops. Instead, initialize it before entering the loop, and clear it +out after the loop has exited. + + You do not need to be concerned about allocating additional space for +GNU MPC variables, since each of its real and imaginary part has a +mantissa of fixed size. Hence unless you change its precision, or clear +and reinitialize it, a complex variable will have the same allocated +space during all its life. + +4.4 Rounding Modes +================== + +A complex rounding mode is of the form 'MPC_RNDxy' where 'x' and 'y' are +one of 'N' (to nearest), 'Z' (towards zero), 'U' (towards plus +infinity), 'D' (towards minus infinity). The first letter refers to the +rounding mode for the real part, and the second one for the imaginary +part. For example 'MPC_RNDZU' indicates to round the real part towards +zero, and the imaginary part towards plus infinity. + + The 'round to nearest' mode works as in the IEEE P754 standard: in +case the number to be rounded lies exactly in the middle of two +representable numbers, it is rounded to the one with the least +significant bit set to zero. For example, the number 5, which is +represented by (101) in binary, is rounded to (100)=4 with a precision +of two bits, and not to (110)=6. + +4.5 Return Value +================ + +Most GNU MPC functions have a return value of type 'int', which is used +to indicate the position of the rounded real and imaginary parts with +respect to the exact (infinite precision) values. If this integer is +'i', the macros 'MPC_INEX_RE(i)' and 'MPC_INEX_IM(i)' give 0 if the +corresponding rounded value is exact, a negative value if the rounded +value is less than the exact one, and a positive value if it is greater +than the exact one. Similarly, functions computing a result of type +'mpfr_t' return an integer that is 0, positive or negative depending on +whether the rounded value is the same, larger or smaller then the exact +result. + + Some functions, such as 'mpc_sin_cos', compute two complex results; +the macros 'MPC_INEX1(i)' and 'MPC_INEX2(i)', applied to the return +value 'i' of such a function, yield the exactness value corresponding to +the first or the second computed value, respectively. + +4.6 Branch Cuts And Special Values +================================== + +Some complex functions have branch cuts, across which the function is +discontinous. In GNU MPC, the branch cuts chosen are the same as those +specified for the corresponding functions in the ISO C99 standard. + + Likewise, when evaluated at a point whose real or imaginary part is +either infinite or a NaN or a signed zero, a function returns the same +value as those specified for the corresponding function in the ISO C99 +standard. + + +File: mpc.info, Node: Complex Functions, Next: References, Prev: GNU MPC Basics, Up: Top + +5 Complex Functions +******************* + +The complex functions expect arguments of type 'mpc_t'. + + The GNU MPC floating-point functions have an interface that is +similar to the GNU MP integer functions. The function prefix for +operations on complex numbers is 'mpc_'. + + The precision of a computation is defined as follows: Compute the +requested operation exactly (with "infinite precision"), and round the +result to the destination variable precision with the given rounding +mode. + + The GNU MPC complex functions are intended to be a smooth extension +of the IEEE P754 arithmetic. The results obtained on one computer +should not differ from the results obtained on a computer with a +different word size. + +* Menu: + +* Initializing Complex Numbers:: +* Assigning Complex Numbers:: +* Converting Complex Numbers:: +* String and Stream Input and Output:: +* Complex Comparison:: +* Projection & Decomposing:: +* Basic Arithmetic:: +* Power Functions and Logarithm:: +* Trigonometric Functions:: +* Miscellaneous Complex Functions:: +* Advanced Functions:: +* Internals:: + + +File: mpc.info, Node: Initializing Complex Numbers, Next: Assigning Complex Numbers, Up: Complex Functions + +5.1 Initialization Functions +============================ + +An 'mpc_t' object must be initialized before storing the first value in +it. The functions 'mpc_init2' and 'mpc_init3' are used for that +purpose. + + -- Function: void mpc_init2 (mpc_t Z, mpfr_prec_t PREC) + Initialize Z to precision PREC bits and set its real and imaginary + parts to NaN. Normally, a variable should be initialized once only + or at least be cleared, using 'mpc_clear', between initializations. + + -- Function: void mpc_init3 (mpc_t Z, mpfr_prec_t PREC_R, mpfr_prec_t + PREC_I) + Initialize Z with the precision of its real part being PREC_R bits + and the precision of its imaginary part being PREC_I bits, and set + the real and imaginary parts to NaN. + + -- Function: void mpc_clear (mpc_t Z) + Free the space occupied by Z. Make sure to call this function for + all 'mpc_t' variables when you are done with them. + + Here is an example on how to initialize complex variables: + { + mpc_t x, y; + mpc_init2 (x, 256); /* precision _exactly_ 256 bits */ + mpc_init3 (y, 100, 50); /* 100/50 bits for the real/imaginary part */ + ... + mpc_clear (x); + mpc_clear (y); + } + + The following function is useful for changing the precision during a +calculation. A typical use would be for adjusting the precision +gradually in iterative algorithms like Newton-Raphson, making the +computation precision closely match the actual accurate part of the +numbers. + + -- Function: void mpc_set_prec (mpc_t X, mpfr_prec_t PREC) + Reset the precision of X to be *exactly* PREC bits, and set its + real/imaginary parts to NaN. The previous value stored in X is + lost. It is equivalent to a call to 'mpc_clear(x)' followed by a + call to 'mpc_init2(x, prec)', but more efficient as no allocation + is done in case the current allocated space for the mantissa of X + is sufficient. + + -- Function: mpfr_prec_t mpc_get_prec (mpc_t X) + If the real and imaginary part of X have the same precision, it is + returned, otherwise, 0 is returned. + + -- Function: void mpc_get_prec2 (mpfr_prec_t* PR, mpfr_prec_t* PI, + mpc_t X) + Returns the precision of the real part of X via PR and of its + imaginary part via PI. + + +File: mpc.info, Node: Assigning Complex Numbers, Next: Converting Complex Numbers, Prev: Initializing Complex Numbers, Up: Complex Functions + +5.2 Assignment Functions +======================== + +These functions assign new values to already initialized complex numbers +(*note Initializing Complex Numbers::). When using any functions with +'intmax_t' or 'uintmax_t' parameters, you must include '<stdint.h>' or +'<inttypes.h>' _before_ 'mpc.h', to allow 'mpc.h' to define prototypes +for these functions. Similarly, functions with parameters of type +'complex' or 'long complex' are defined only if '<complex.h>' is +included _before_ 'mpc.h'. If you need assignment functions that are +not in the current API, you can define them using the 'MPC_SET_X_Y' +macro (*note Advanced Functions::). + + -- Function: int mpc_set (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set the value of ROP from OP, rounded to the precision of ROP with + the given rounding mode RND. + + -- Function: int mpc_set_ui (mpc_t ROP, unsigned long int OP, mpc_rnd_t + RND) + -- Function: int mpc_set_si (mpc_t ROP, long int OP, mpc_rnd_t RND) + -- Function: int mpc_set_uj (mpc_t ROP, uintmax_t OP, mpc_rnd_t RND) + -- Function: int mpc_set_sj (mpc_t ROP, intmax_t OP, mpc_rnd_t RND) + -- Function: int mpc_set_d (mpc_t ROP, double OP, mpc_rnd_t RND) + -- Function: int mpc_set_ld (mpc_t ROP, long double OP, mpc_rnd_t RND) + -- Function: int mpc_set_dc (mpc_t ROP, double _Complex OP, mpc_rnd_t + RND) + -- Function: int mpc_set_ldc (mpc_t ROP, long double _Complex OP, + mpc_rnd_t RND) + -- Function: int mpc_set_z (mpc_t ROP, mpz_t OP mpc_rnd_t RND) + -- Function: int mpc_set_q (mpc_t ROP, mpq_t OP mpc_rnd_t RND) + -- Function: int mpc_set_f (mpc_t ROP, mpf_t OP mpc_rnd_t RND) + -- Function: int mpc_set_fr (mpc_t ROP, mpfr_t OP, mpc_rnd_t RND) + Set the value of ROP from OP, rounded to the precision of ROP with + the given rounding mode RND. The argument OP is interpreted as + real, so the imaginary part of ROP is set to zero with a positive + sign. Please note that even a 'long int' may have to be rounded, + if the destination precision is less than the machine word width. + For 'mpc_set_d', be careful that the input number OP may not be + exactly representable as a double-precision number (this happens + for 0.1 for instance), in which case it is first rounded by the C + compiler to a double-precision number, and then only to a complex + number. + + -- Function: int mpc_set_ui_ui (mpc_t ROP, unsigned long int OP1, + unsigned long int OP2, mpc_rnd_t RND) + -- Function: int mpc_set_si_si (mpc_t ROP, long int OP1, long int OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_uj_uj (mpc_t ROP, uintmax_t OP1, uintmax_t + OP2, mpc_rnd_t RND) + -- Function: int mpc_set_sj_sj (mpc_t ROP, intmax_t OP1, intmax_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_d_d (mpc_t ROP, double OP1, double OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_ld_ld (mpc_t ROP, long double OP1, long double + OP2, mpc_rnd_t RND) + -- Function: int mpc_set_z_z (mpc_t ROP, mpz_t OP1, mpz_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_q_q (mpc_t ROP, mpq_t OP1, mpq_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_f_f (mpc_t ROP, mpf_t OP1, mpf_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_set_fr_fr (mpc_t ROP, mpfr_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + Set the real part of ROP from OP1, and its imaginary part from OP2, + according to the rounding mode RND. + + Beware that the behaviour of 'mpc_set_fr_fr' is undefined if OP1 or + OP2 is a pointer to the real or imaginary part of ROP. To exchange + the real and the imaginary part of a complex number, either use + 'mpfr_swap (mpc_realref (rop), mpc_imagref (rop))', which also + exchanges the precisions of the two parts; or use a temporary + variable. + + For functions assigning complex variables from strings or input +streams, *note String and Stream Input and Output::. + + -- Function: void mpc_set_nan (mpc_t ROP) + Set ROP to Nan+i*NaN. + + -- Function: void mpc_swap (mpc_t OP1, mpc_t OP2) + Swap the values of OP1 and OP2 efficiently. Warning: The + precisions are exchanged, too; in case these are different, + 'mpc_swap' is thus not equivalent to three 'mpc_set' calls using a + third auxiliary variable. + + +File: mpc.info, Node: Converting Complex Numbers, Next: String and Stream Input and Output, Prev: Assigning Complex Numbers, Up: Complex Functions + +5.3 Conversion Functions +======================== + +The following functions are available only if '<complex.h>' is included +_before_ 'mpc.h'. + + -- Function: double _Complex mpc_get_dc (mpc_t OP, mpc_rnd_t RND) + -- Function: long double _Complex mpc_get_ldc (mpc_t OP, mpc_rnd_t RND) + Convert OP to a C complex number, using the rounding mode RND. + + For functions converting complex variables to strings or stream +output, *note String and Stream Input and Output::. + + +File: mpc.info, Node: String and Stream Input and Output, Next: Complex Comparison, Prev: Converting Complex Numbers, Up: Complex Functions + +5.4 String and Stream Input and Output +====================================== + + -- Function: int mpc_strtoc (mpc_t ROP, const char *NPTR, char + **ENDPTR, int BASE, mpc_rnd_t RND) + Read a complex number from a string NPTR in base BASE, rounded to + the precision of ROP with the given rounding mode RND. The BASE + must be either 0 or a number from 2 to 36 (otherwise the behaviour + is undefined). If NPTR starts with valid data, the result is + stored in ROP, the usual inexact value is returned (*note Return + Value: return-value.) and, if ENDPTR is not the null pointer, + *ENDPTR points to the character just after the valid data. + Otherwise, ROP is set to 'NaN + i * NaN', -1 is returned and, if + ENDPTR is not the null pointer, the value of NPTR is stored in the + location referenced by ENDPTR. + + The expected form of a complex number string is either a real + number (an optional leading whitespace, an optional sign followed + by a floating-point number), or a pair of real numbers in + parentheses separated by whitespace. If a real number is read, the + missing imaginary part is set to +0. The form of a floating-point + number depends on the base and is described in the documentation of + 'mpfr_strtofr' (*note (mpfr.info)Assignment Functions::). For + instance, '"3.1415926"', '"(1.25e+7 +.17)"', '"(@nan@ 2)"' and + '"(-0 -7)"' are valid strings for BASE = 10. If BASE = 0, then a + prefix may be used to indicate the base in which the floating-point + number is written. Use prefix '0b' for binary numbers, prefix '0x' + for hexadecimal numbers, and no prefix for decimal numbers. The + real and imaginary part may then be written in different bases. + For instance, '"(1.024e+3 +2.05e+3)"' and '"(0b1p+10 +0x802)"' are + valid strings for 'base'=0 and represent the same value. + + -- Function: int mpc_set_str (mpc_t ROP, const char *S, int BASE, + mpc_rnd_t rnd) + Set ROP to the value of the string S in base BASE, rounded to the + precision of ROP with the given rounding mode RND. See the + documentation of 'mpc_strtoc' for a detailed description of the + valid string formats. Contrarily to 'mpc_strtoc', 'mpc_set_str' + requires the _whole_ string to represent a valid complex number + (potentially followed by additional white space). This function + returns the usual inexact value (*note Return Value: return-value.) + if the entire string up to the final null character is a valid + number in base BASE; otherwise it returns -1, and ROP is set to + NaN+i*NaN. + + -- Function: char * mpc_get_str (int B, size_t N, mpc_t OP, mpc_rnd_t + RND) + Convert OP to a string containing its real and imaginary parts, + separated by a space and enclosed in a pair of parentheses. The + numbers are written in base B (which may vary from 2 to 36) and + rounded according to RND. The number of significant digits, at + least 2, is given by N. It is also possible to let N be zero, in + which case the number of digits is chosen large enough so that + re-reading the printed value with the same precision, assuming both + output and input use rounding to nearest, will recover the original + value of OP. Note that 'mpc_get_str' uses the decimal point of the + current locale if available, and '.' otherwise. + + The string is generated using the current memory allocation + function ('malloc' by default, unless it has been modified using + the custom memory allocation interface of 'gmp'); once it is not + needed any more, it should be freed by calling 'mpc_free_str'. + + -- Function: void mpc_free_str (char *STR) + Free the string STR, which needs to have been allocated by a call + to 'mpc_get_str'. + + The following two functions read numbers from input streams and write +them to output streams. When using any of these functions, you need to +include 'stdio.h' _before_ 'mpc.h'. + + -- Function: int mpc_inp_str (mpc_t ROP, FILE *STREAM, size_t *READ, + int BASE, mpc_rnd_t RND) + Input a string in base BASE in the same format as for 'mpc_strtoc' + from stdio stream STREAM, rounded according to RND, and put the + read complex number into ROP. If STREAM is the null pointer, ROP + is read from 'stdin'. Return the usual inexact value; if an error + occurs, set ROP to 'NaN + i * NaN' and return -1. If READ is not + the null pointer, it is set to the number of read characters. + + Unlike 'mpc_strtoc', the function 'mpc_inp_str' does not possess + perfect knowledge of the string to transform and has to read it + character by character, so it behaves slightly differently: It + tries to read a string describing a complex number and processes + this string through a call to 'mpc_set_str'. Precisely, after + skipping optional whitespace, a minimal string is read according to + the regular expression 'mpfr | '(' \s* mpfr \s+ mpfr \s* ')'', + where '\s' denotes a whitespace, and 'mpfr' is either a string + containing neither whitespaces nor parentheses, or + 'nan(n-char-sequence)' or '@nan@(n-char-sequence)' (regardless of + capitalisation) with 'n-char-sequence' a string of ascii letters, + digits or ''_''. + + For instance, upon input of '"nan(13 1)"', the function + 'mpc_inp_str' starts to recognise a value of NaN followed by an + n-char-sequence indicated by the opening parenthesis; as soon as + the space is reached, it becocmes clear that the expression in + parentheses is not an n-char-sequence, and the error flag -1 is + returned after 6 characters have been consumed from the stream (the + whitespace itself remaining in the stream). The function + 'mpc_strtoc', on the other hand, may track back when reaching the + whitespace; it treats the string as the two successive complex + numbers 'NaN + i * 0' and '13 + i'. It is thus recommended to have + a whitespace follow each floating point number to avoid this + problem. + + -- Function: size_t mpc_out_str (FILE *STREAM, int BASE, size_t + N_DIGITS, mpc_t OP, mpc_rnd_t RND) + Output OP on stdio stream STREAM in base BASE, rounded according to + RND, in the same format as for 'mpc_strtoc' If STREAM is the null + pointer, ROP is written to 'stdout'. + + Return the number of characters written. + + +File: mpc.info, Node: Complex Comparison, Next: Projection & Decomposing, Prev: String and Stream Input and Output, Up: Complex Functions + +5.5 Comparison Functions +======================== + + -- Function: int mpc_cmp (mpc_t OP1, mpc_t OP2) + -- Function: int mpc_cmp_si_si (mpc_t OP1, long int OP2R, long int + OP2I) + -- Macro: int mpc_cmp_si (mpc_t OP1, long int OP2) + + Compare OP1 and OP2, where in the case of 'mpc_cmp_si_si', OP2 is + taken to be OP2R + i OP2I. The return value C can be decomposed + into 'x = MPC_INEX_RE(c)' and 'y = MPC_INEX_IM(c)', such that X is + positive if the real part of OP1 is greater than that of OP2, zero + if both real parts are equal, and negative if the real part of OP1 + is less than that of OP2, and likewise for Y. Both OP1 and OP2 are + considered to their full own precision, which may differ. It is + not allowed that one of the operands has a NaN (Not-a-Number) part. + + The storage of the return value is such that equality can be simply + checked with 'mpc_cmp (op1, op2) == 0'. + + +File: mpc.info, Node: Projection & Decomposing, Next: Basic Arithmetic, Prev: Complex Comparison, Up: Complex Functions + +5.6 Projection and Decomposing Functions +======================================== + + -- Function: int mpc_real (mpfr_t ROP, mpc_t OP, mpfr_rnd_t RND) + Set ROP to the value of the real part of OP rounded in the + direction RND. + + -- Function: int mpc_imag (mpfr_t ROP, mpc_t OP, mpfr_rnd_t RND) + Set ROP to the value of the imaginary part of OP rounded in the + direction RND. + + -- Macro: mpfr_t mpc_realref (mpc_t OP) + -- Macro: mpfr_t mpc_imagref (mpc_t OP) + Return a reference to the real part and imaginary part of OP, + respectively. The 'mpfr' functions can be used on the result of + these macros (note that the 'mpfr_t' type is itself a pointer). + + -- Function: int mpc_arg (mpfr_t ROP, mpc_t OP, mpfr_rnd_t RND) + Set ROP to the argument of OP, with a branch cut along the negative + real axis. + + -- Function: int mpc_proj (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Compute a projection of OP onto the Riemann sphere. Set ROP to OP + rounded in the direction RND, except when at least one part of OP + is infinite (even if the other part is a NaN) in which case the + real part of ROP is set to plus infinity and its imaginary part to + a signed zero with the same sign as the imaginary part of OP. + + +File: mpc.info, Node: Basic Arithmetic, Next: Power Functions and Logarithm, Prev: Projection & Decomposing, Up: Complex Functions + +5.7 Basic Arithmetic Functions +============================== + +All the following functions are designed in such a way that, when +working with real numbers instead of complex numbers, their complexity +should essentially be the same as with the GNU MPFR library, with only a +marginal overhead due to the GNU MPC layer. + + -- Function: int mpc_add (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_add_ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Function: int mpc_add_fr (mpc_t ROP, mpc_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + Set ROP to OP1 + OP2 rounded according to RND. + + -- Function: int mpc_sub (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_sub_fr (mpc_t ROP, mpc_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_fr_sub (mpc_t ROP, mpfr_t OP1, mpc_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_sub_ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Macro: int mpc_ui_sub (mpc_t ROP, unsigned long int OP1, mpc_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_ui_ui_sub (mpc_t ROP, unsigned long int RE1, + unsigned long int IM1, mpc_t OP2, mpc_rnd_t RND) + Set ROP to OP1 - OP2 rounded according to RND. For + 'mpc_ui_ui_sub', OP1 is RE1 + IM1. + + -- Function: int mpc_neg (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to -OP rounded according to RND. Just changes the sign if + ROP and OP are the same variable. + + -- Function: int mpc_mul (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_mul_ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Function: int mpc_mul_si (mpc_t ROP, mpc_t OP1, long int OP2, + mpc_rnd_t RND) + -- Function: int mpc_mul_fr (mpc_t ROP, mpc_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + Set ROP to OP1 times OP2 rounded according to RND. Note: for + 'mpc_mul', in case OP1 and OP2 have the same value, use 'mpc_sqr' + for better efficiency. + + -- Function: int mpc_mul_i (mpc_t ROP, mpc_t OP, int SGN, mpc_rnd_t + RND) + Set ROP to OP times the imaginary unit i if SGN is non-negative, + set ROP to OP times -i otherwise, in both cases rounded according + to RND. + + -- Function: int mpc_sqr (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the square of OP rounded according to RND. + + -- Function: int mpc_fma (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_t OP3, + mpc_rnd_t RND) + Set ROP to OP1*OP2+OP3, rounded according to RND, with only one + final rounding. + + -- Function: int mpc_div (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_div_ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Function: int mpc_div_fr (mpc_t ROP, mpc_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + -- Function: int mpc_ui_div (mpc_t ROP, unsigned long int OP1, mpc_t + OP2, mpc_rnd_t RND) + -- Function: int mpc_fr_div (mpc_t ROP, mpfr_t OP1, mpc_t OP2, + mpc_rnd_t RND) + Set ROP to OP1/OP2 rounded according to RND. + + -- Function: int mpc_conj (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the conjugate of OP rounded according to RND. Just + changes the sign of the imaginary part if ROP and OP are the same + variable. + + -- Function: int mpc_abs (mpfr_t ROP, mpc_t OP, mpfr_rnd_t RND) + Set the floating-point number ROP to the absolute value of OP, + rounded in the direction RND. + + -- Function: int mpc_norm (mpfr_t ROP, mpc_t OP, mpfr_rnd_t RND) + Set the floating-point number ROP to the norm of OP (i.e., the + square of its absolute value), rounded in the direction RND. + + -- Function: int mpc_mul_2ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Function: int mpc_mul_2si (mpc_t ROP, mpc_t OP1, long int OP2, + mpc_rnd_t RND) + Set ROP to OP1 times 2 raised to OP2 rounded according to RND. + Just modifies the exponents of the real and imaginary parts by OP2 + when ROP and OP1 are identical. + + -- Function: int mpc_div_2ui (mpc_t ROP, mpc_t OP1, unsigned long int + OP2, mpc_rnd_t RND) + -- Function: int mpc_div_2si (mpc_t ROP, mpc_t OP1, long int OP2, + mpc_rnd_t RND) + Set ROP to OP1 divided by 2 raised to OP2 rounded according to RND. + Just modifies the exponents of the real and imaginary parts by OP2 + when ROP and OP1 are identical. + + +File: mpc.info, Node: Power Functions and Logarithm, Next: Trigonometric Functions, Prev: Basic Arithmetic, Up: Complex Functions + +5.8 Power Functions and Logarithm +================================= + + -- Function: int mpc_sqrt (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the square root of OP rounded according to RND. The + returned value ROP has a non-negative real part, and if its real + part is zero, a non-negative imaginary part. + + -- Function: int mpc_pow (mpc_t ROP, mpc_t OP1, mpc_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_pow_d (mpc_t ROP, mpc_t OP1, double OP2, mpc_rnd_t + RND) + -- Function: int mpc_pow_ld (mpc_t ROP, mpc_t OP1, long double OP2, + mpc_rnd_t RND) + -- Function: int mpc_pow_si (mpc_t ROP, mpc_t OP1, long OP2, mpc_rnd_t + RND) + -- Function: int mpc_pow_ui (mpc_t ROP, mpc_t OP1, unsigned long OP2, + mpc_rnd_t RND) + -- Function: int mpc_pow_z (mpc_t ROP, mpc_t OP1, mpz_t OP2, mpc_rnd_t + RND) + -- Function: int mpc_pow_fr (mpc_t ROP, mpc_t OP1, mpfr_t OP2, + mpc_rnd_t RND) + Set ROP to OP1 raised to the power OP2, rounded according to RND. + For 'mpc_pow_d', 'mpc_pow_ld', 'mpc_pow_si', 'mpc_pow_ui', + 'mpc_pow_z' and 'mpc_pow_fr', the imaginary part of OP2 is + considered as +0. When both OP1 and OP2 are zero, the result has + real part 1, and imaginary part 0, with sign being the opposite of + that of OP2. + + -- Function: int mpc_exp (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the exponential of OP, rounded according to RND with the + precision of ROP. + + -- Function: int mpc_log (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + -- Function: int mpc_log10 (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the natural and base-10 logarithm of OP respectively, + rounded according to RND with the precision of ROP. The principal + branch is chosen, with the branch cut on the negative real axis, so + that the imaginary part of the result lies in ]-\pi , \pi] and + ]-\pi/log(10) , \pi/log(10)] respectively. + + +File: mpc.info, Node: Trigonometric Functions, Next: Miscellaneous Complex Functions, Prev: Power Functions and Logarithm, Up: Complex Functions + +5.9 Trigonometric Functions +=========================== + + -- Function: int mpc_sin (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the sine of OP, rounded according to RND with the + precision of ROP. + + -- Function: int mpc_cos (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the cosine of OP, rounded according to RND with the + precision of ROP. + + -- Function: int mpc_sin_cos (mpc_t ROP_SIN, mpc_t ROP_COS, mpc_t OP, + mpc_rnd_t RND_SIN, mpc_rnd_t RND_COS) + Set ROP_SIN to the sine of OP, rounded according to RND_SIN with + the precision of ROP_SIN, and ROP_COS to the cosine of OP, rounded + according to RND_COS with the precision of ROP_COS. + + -- Function: int mpc_tan (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the tangent of OP, rounded according to RND with the + precision of ROP. + + -- Function: int mpc_sinh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the hyperbolic sine of OP, rounded according to RND with + the precision of ROP. + + -- Function: int mpc_cosh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the hyperbolic cosine of OP, rounded according to RND + with the precision of ROP. + + -- Function: int mpc_tanh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the hyperbolic tangent of OP, rounded according to RND + with the precision of ROP. + + -- Function: int mpc_asin (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + -- Function: int mpc_acos (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + -- Function: int mpc_atan (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the inverse sine, inverse cosine, inverse tangent of OP, + rounded according to RND with the precision of ROP. + + -- Function: int mpc_asinh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + -- Function: int mpc_acosh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + -- Function: int mpc_atanh (mpc_t ROP, mpc_t OP, mpc_rnd_t RND) + Set ROP to the inverse hyperbolic sine, inverse hyperbolic cosine, + inverse hyperbolic tangent of OP, rounded according to RND with the + precision of ROP. The branch cut of MPC_ACOSH is (-\infty, 1). + + +File: mpc.info, Node: Miscellaneous Complex Functions, Next: Advanced Functions, Prev: Trigonometric Functions, Up: Complex Functions + +5.10 Miscellaneous Functions +============================ + + -- Function: int mpc_urandom (mpc_t ROP, gmp_randstate_t STATE) + Generate a uniformly distributed random complex in the unit square + [0, 1] x [0, 1]. Return 0, unless an exponent in the real or + imaginary part is not in the current exponent range, in which case + that part is set to NaN and a zero value is returned. The second + argument is a 'gmp_randstate_t' structure which should be created + using the GMP 'rand_init' function, see the GMP manual. + + -- Function: const char * mpc_get_version (void) + Return the GNU MPC version, as a null-terminated string. + + -- Macro: MPC_VERSION + -- Macro: MPC_VERSION_MAJOR + -- Macro: MPC_VERSION_MINOR + -- Macro: MPC_VERSION_PATCHLEVEL + -- Macro: MPC_VERSION_STRING + 'MPC_VERSION' is the version of GNU MPC as a preprocessing + constant. 'MPC_VERSION_MAJOR', 'MPC_VERSION_MINOR' and + 'MPC_VERSION_PATCHLEVEL' are respectively the major, minor and + patch level of GNU MPC version, as preprocessing constants. + 'MPC_VERSION_STRING' is the version as a string constant, which can + be compared to the result of 'mpc_get_version' to check at run time + the header file and library used match: + if (strcmp (mpc_get_version (), MPC_VERSION_STRING)) + fprintf (stderr, "Warning: header and library do not match\n"); + Note: Obtaining different strings is not necessarily an error, as + in general, a program compiled with some old GNU MPC version can be + dynamically linked with a newer GNU MPC library version (if allowed + by the library versioning system). + + -- Macro: long MPC_VERSION_NUM (MAJOR, MINOR, PATCHLEVEL) + Create an integer in the same format as used by 'MPC_VERSION' from + the given MAJOR, MINOR and PATCHLEVEL. Here is an example of how + to check the GNU MPC version at compile time: + #if (!defined(MPC_VERSION) || (MPC_VERSION<MPC_VERSION_NUM(2,1,0))) + # error "Wrong GNU MPC version." + #endif + + +File: mpc.info, Node: Advanced Functions, Next: Internals, Prev: Miscellaneous Complex Functions, Up: Complex Functions + +5.11 Advanced Functions +======================= + + -- Macro: MPC_SET_X_Y (REAL_SUFFIX, IMAG_SUFFIX, ROP, REAL, IMAG, RND) + The macro MPC_SET_X_Y is designed to serve as the body of an + assignment function and cannot be used by itself. The REAL_SUFFIX + and IMAG_SUFFIX parameters are the types of the real and imaginary + part, that is, the 'x' in the 'mpfr_set_x' function one would use + to set the part; for the mpfr type, use 'fr'. REAL (respectively + IMAG) is the value you want to assign to the real (resp. + imaginary) part, its type must conform to REAL_SUFFIX (resp. + IMAG_SUFFIX). RND is the 'mpc_rnd_t' rounding mode. The return + value is the usual inexact value (*note Return Value: + return-value.). + + For instance, you can define mpc_set_ui_fr as follows: + int mpc_set_ui_fr (mpc_t rop, long int re, double im, mpc_rnd_t rnd) + MPC_SET_X_Y (ui, fr, rop, re, im, rnd); + + +File: mpc.info, Node: Internals, Prev: Advanced Functions, Up: Complex Functions + +5.12 Internals +============== + +These macros and functions are mainly designed for the implementation of +GNU MPC, but may be useful for users too. However, no upward +compatibility is guaranteed. You need to include 'mpc-impl.h' to use +them. + + The macro 'MPC_MAX_PREC(z)' gives the maximum of the precisions of +the real and imaginary parts of a complex number. + + +File: mpc.info, Node: References, Next: Concept Index, Prev: Complex Functions, Up: Top + +References +********** + + * Torbjo"rn Granlund et al. 'gmp' - GNU multiprecision library. + Version 4.2.4, <http://gmplib.org/>. + + * Guillaume Hanrot, Vincent Lefe`vre, Patrick Pe'lissier, Paul + Zimmermann et al. 'mpfr' - A library for multiple-precision + floating-point computations with exact rounding. Version 2.4.1, + <http://www.mpfr.org>. + + * IEEE standard for binary floating-point arithmetic, Technical + Report ANSI-IEEE Standard 754-1985, New York, 1985. Approved March + 21, 1985: IEEE Standards Board; approved July 26, 1985: American + National Standards Institute, 18 pages. + + * Donald E. Knuth, "The Art of Computer Programming", vol 2, + "Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981. + + * ISO/IEC 9899:1999, Programming languages — C. + + +File: mpc.info, Node: Concept Index, Next: Function Index, Prev: References, Up: Top + +Concept Index +************* + + +* Menu: + +* Arithmetic functions: Basic Arithmetic. (line 6) +* Comparison functions: Complex Comparison. (line 6) +* Complex arithmetic functions: Basic Arithmetic. (line 6) +* Complex assignment functions: Assigning Complex Numbers. + (line 6) +* Complex comparisons functions: Complex Comparison. (line 6) +* Complex functions: Complex Functions. (line 6) +* Complex number: GNU MPC Basics. (line 15) +* Conditions for copying GNU MPC: Copying. (line 6) +* Conversion functions: Converting Complex Numbers. + (line 6) +* Copying conditions: Copying. (line 6) +* Installation: Installing GNU MPC. (line 6) +* Logarithm: Power Functions and Logarithm. + (line 6) +* Miscellaneous complex functions: Miscellaneous Complex Functions. + (line 6) +* 'mpc.h': GNU MPC Basics. (line 6) +* Power functions: Power Functions and Logarithm. + (line 6) +* Precision: GNU MPC Basics. (line 19) +* Projection and Decomposing Functions: Projection & Decomposing. + (line 6) +* Reporting bugs: Reporting Bugs. (line 6) +* Rounding Mode: GNU MPC Basics. (line 24) +* String and stream input and output: String and Stream Input and Output. + (line 6) +* Trigonometric functions: Trigonometric Functions. + (line 6) +* User-defined precision: Complex Functions. (line 12) + + +File: mpc.info, Node: Function Index, Next: GNU Free Documentation License, Prev: Concept Index, Up: Top + +Function Index +************** + + +* Menu: + +* _Complex: Converting Complex Numbers. + (line 9) +* mpc_abs: Basic Arithmetic. (line 81) +* mpc_acos: Trigonometric Functions. + (line 37) +* mpc_acosh: Trigonometric Functions. + (line 43) +* mpc_add: Basic Arithmetic. (line 11) +* mpc_add_fr: Basic Arithmetic. (line 15) +* mpc_add_ui: Basic Arithmetic. (line 13) +* mpc_arg: Projection & Decomposing. + (line 20) +* mpc_asin: Trigonometric Functions. + (line 36) +* mpc_asinh: Trigonometric Functions. + (line 42) +* mpc_atan: Trigonometric Functions. + (line 38) +* mpc_atanh: Trigonometric Functions. + (line 44) +* mpc_clear: Initializing Complex Numbers. + (line 21) +* mpc_cmp: Complex Comparison. (line 6) +* mpc_cmp_si: Complex Comparison. (line 9) +* mpc_cmp_si_si: Complex Comparison. (line 7) +* mpc_conj: Basic Arithmetic. (line 76) +* mpc_cos: Trigonometric Functions. + (line 10) +* mpc_cosh: Trigonometric Functions. + (line 28) +* mpc_div: Basic Arithmetic. (line 64) +* mpc_div_2si: Basic Arithmetic. (line 99) +* mpc_div_2ui: Basic Arithmetic. (line 97) +* mpc_div_fr: Basic Arithmetic. (line 68) +* mpc_div_ui: Basic Arithmetic. (line 66) +* mpc_exp: Power Functions and Logarithm. + (line 32) +* mpc_fma: Basic Arithmetic. (line 59) +* mpc_free_str: String and Stream Input and Output. + (line 66) +* mpc_fr_div: Basic Arithmetic. (line 72) +* mpc_fr_sub: Basic Arithmetic. (line 23) +* mpc_get_ldc: Converting Complex Numbers. + (line 10) +* mpc_get_prec: Initializing Complex Numbers. + (line 49) +* mpc_get_prec2: Initializing Complex Numbers. + (line 53) +* mpc_get_str: String and Stream Input and Output. + (line 48) +* mpc_get_version: Miscellaneous Complex Functions. + (line 14) +* mpc_imag: Projection & Decomposing. + (line 10) +* mpc_imagref: Projection & Decomposing. + (line 15) +* mpc_init2: Initializing Complex Numbers. + (line 10) +* mpc_init3: Initializing Complex Numbers. + (line 15) +* mpc_inp_str: String and Stream Input and Output. + (line 74) +* mpc_log: Power Functions and Logarithm. + (line 36) +* mpc_log10: Power Functions and Logarithm. + (line 37) +* mpc_mul: Basic Arithmetic. (line 38) +* mpc_mul_2si: Basic Arithmetic. (line 91) +* mpc_mul_2ui: Basic Arithmetic. (line 89) +* mpc_mul_fr: Basic Arithmetic. (line 44) +* mpc_mul_i: Basic Arithmetic. (line 50) +* mpc_mul_si: Basic Arithmetic. (line 42) +* mpc_mul_ui: Basic Arithmetic. (line 40) +* mpc_neg: Basic Arithmetic. (line 34) +* mpc_norm: Basic Arithmetic. (line 85) +* mpc_out_str: String and Stream Input and Output. + (line 109) +* mpc_pow: Power Functions and Logarithm. + (line 11) +* mpc_pow_d: Power Functions and Logarithm. + (line 13) +* mpc_pow_fr: Power Functions and Logarithm. + (line 23) +* mpc_pow_ld: Power Functions and Logarithm. + (line 15) +* mpc_pow_si: Power Functions and Logarithm. + (line 17) +* mpc_pow_ui: Power Functions and Logarithm. + (line 19) +* mpc_pow_z: Power Functions and Logarithm. + (line 21) +* mpc_proj: Projection & Decomposing. + (line 24) +* mpc_real: Projection & Decomposing. + (line 6) +* mpc_realref: Projection & Decomposing. + (line 14) +* 'mpc_rnd_t': GNU MPC Basics. (line 24) +* mpc_set: Assigning Complex Numbers. + (line 16) +* mpc_set_d: Assigning Complex Numbers. + (line 25) +* mpc_set_dc: Assigning Complex Numbers. + (line 27) +* mpc_set_d_d: Assigning Complex Numbers. + (line 54) +* mpc_set_f: Assigning Complex Numbers. + (line 33) +* mpc_set_fr: Assigning Complex Numbers. + (line 34) +* mpc_set_fr_fr: Assigning Complex Numbers. + (line 64) +* mpc_set_f_f: Assigning Complex Numbers. + (line 62) +* mpc_set_ld: Assigning Complex Numbers. + (line 26) +* mpc_set_ldc: Assigning Complex Numbers. + (line 29) +* mpc_set_ld_ld: Assigning Complex Numbers. + (line 56) +* mpc_set_nan: Assigning Complex Numbers. + (line 79) +* mpc_set_prec: Initializing Complex Numbers. + (line 41) +* mpc_set_q: Assigning Complex Numbers. + (line 32) +* mpc_set_q_q: Assigning Complex Numbers. + (line 60) +* mpc_set_si: Assigning Complex Numbers. + (line 22) +* mpc_set_si_si: Assigning Complex Numbers. + (line 48) +* mpc_set_sj: Assigning Complex Numbers. + (line 24) +* mpc_set_sj_sj: Assigning Complex Numbers. + (line 52) +* mpc_set_str: String and Stream Input and Output. + (line 35) +* mpc_set_ui: Assigning Complex Numbers. + (line 20) +* mpc_set_ui_ui: Assigning Complex Numbers. + (line 46) +* mpc_set_uj: Assigning Complex Numbers. + (line 23) +* mpc_set_uj_uj: Assigning Complex Numbers. + (line 50) +* MPC_SET_X_Y: Advanced Functions. (line 6) +* mpc_set_z: Assigning Complex Numbers. + (line 31) +* mpc_set_z_z: Assigning Complex Numbers. + (line 58) +* mpc_sin: Trigonometric Functions. + (line 6) +* mpc_sinh: Trigonometric Functions. + (line 24) +* mpc_sin_cos: Trigonometric Functions. + (line 14) +* mpc_sqr: Basic Arithmetic. (line 56) +* mpc_sqrt: Power Functions and Logarithm. + (line 6) +* mpc_strtoc: String and Stream Input and Output. + (line 6) +* mpc_sub: Basic Arithmetic. (line 19) +* mpc_sub_fr: Basic Arithmetic. (line 21) +* mpc_sub_ui: Basic Arithmetic. (line 25) +* mpc_swap: Assigning Complex Numbers. + (line 82) +* 'mpc_t': GNU MPC Basics. (line 15) +* mpc_tan: Trigonometric Functions. + (line 20) +* mpc_tanh: Trigonometric Functions. + (line 32) +* mpc_ui_div: Basic Arithmetic. (line 70) +* mpc_ui_sub: Basic Arithmetic. (line 27) +* mpc_ui_ui_sub: Basic Arithmetic. (line 29) +* mpc_urandom: Miscellaneous Complex Functions. + (line 6) +* MPC_VERSION: Miscellaneous Complex Functions. + (line 17) +* MPC_VERSION_MAJOR: Miscellaneous Complex Functions. + (line 18) +* MPC_VERSION_MINOR: Miscellaneous Complex Functions. + (line 19) +* MPC_VERSION_NUM: Miscellaneous Complex Functions. + (line 36) +* MPC_VERSION_PATCHLEVEL: Miscellaneous Complex Functions. + (line 20) +* MPC_VERSION_STRING: Miscellaneous Complex Functions. + (line 21) +* 'mpfr_prec_t': GNU MPC Basics. (line 19) + + +File: mpc.info, Node: GNU Free Documentation License, Prev: Function Index, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <http://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <http://www.gnu.org/copyleft/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + + +Tag Table: +Node: Top736 +Node: Copying1443 +Node: Introduction to GNU MPC2215 +Node: Installing GNU MPC2934 +Node: Reporting Bugs8019 +Node: GNU MPC Basics9363 +Ref: return-value13040 +Node: Complex Functions14491 +Node: Initializing Complex Numbers15651 +Node: Assigning Complex Numbers18038 +Node: Converting Complex Numbers22438 +Node: String and Stream Input and Output23063 +Node: Complex Comparison29620 +Node: Projection & Decomposing30695 +Node: Basic Arithmetic32072 +Node: Power Functions and Logarithm36645 +Node: Trigonometric Functions38712 +Node: Miscellaneous Complex Functions40937 +Node: Advanced Functions43113 +Node: Internals44186 +Node: References44637 +Node: Concept Index45540 +Node: Function Index47854 +Node: GNU Free Documentation License61638 + +End Tag Table |