[BACK]Return to mpfr.texi CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpfr

Annotation of OpenXM_contrib/gmp/mpfr/mpfr.texi, Revision 1.1

1.1     ! ohara       1: \input texinfo    @c -*-texinfo-*-
        !             2: @c %**start of header
        !             3: @setfilename mpfr.info
        !             4: @settitle MPFR 2.0.1
        !             5: @synindex tp fn
        !             6: @iftex
        !             7: @afourpaper
        !             8: @end iftex
        !             9: @comment %**end of header
        !            10:
        !            11: @ifinfo
        !            12: @format
        !            13: START-INFO-DIR-ENTRY
        !            14: * mpfr: (mpfr.info).               Multiple Precision Floating-Point Reliable Library.
        !            15: END-INFO-DIR-ENTRY
        !            16: @end format
        !            17: @end ifinfo
        !            18:
        !            19: @c smallbook
        !            20:
        !            21: @iftex
        !            22: @finalout
        !            23: @end iftex
        !            24:
        !            25: @c Note: the edition number is listed in *three* places; please update
        !            26: @c all three.  Also, update the month and year where appropriate.
        !            27:
        !            28: @c ==> Update edition number for settitle and subtitle, and in the
        !            29: @c ==> following paragraph; update date, too.
        !            30:
        !            31:
        !            32: @ifinfo
        !            33: This file documents MPFR, a library for reliable multiple precision floating-point arithmetic
        !            34:
        !            35: Copyright (C) 1999-2002, Free Software Foundation.
        !            36:
        !            37: Permission is granted to make and distribute verbatim copies of
        !            38: this manual provided the copyright notice and this permission notice
        !            39: are preserved on all copies.
        !            40:
        !            41: @ignore
        !            42: Permission is granted to process this file through TeX and print the
        !            43: results, provided the printed document carries copying permission
        !            44: notice identical to this one except for the removal of this paragraph
        !            45: (this paragraph not being relevant to the printed manual).
        !            46:
        !            47: @end ignore
        !            48: Permission is granted to copy and distribute modified versions of this
        !            49: manual under the conditions for verbatim copying, provided that the entire
        !            50: resulting derived work is distributed under the terms of a permission
        !            51: notice identical to this one.
        !            52:
        !            53: Permission is granted to copy and distribute translations of this manual
        !            54: into another language, under the above conditions for modified versions,
        !            55: except that this permission notice may be stated in a translation approved
        !            56: by the Foundation.
        !            57: @end ifinfo
        !            58:
        !            59: @setchapternewpage on
        !            60: @titlepage
        !            61: @c  use the new format for titles
        !            62:
        !            63: @title MPFR
        !            64: @subtitle The Multiple Precision Floating-Point Reliable Library
        !            65: @subtitle Edition 2.0.1
        !            66: @subtitle April 2002
        !            67:
        !            68: @author The MPFR team, LORIA/INRIA Lorraine
        !            69:
        !            70: @c Include the Distribution inside the titlepage so
        !            71: @c that headings are turned off.
        !            72:
        !            73: @tex
        !            74: \global\parindent=0pt
        !            75: \global\parskip=8pt
        !            76: \global\baselineskip=13pt
        !            77: @end tex
        !            78:
        !            79: @page
        !            80: @vskip 0pt plus 1filll
        !            81: Copyright @copyright{} 1999-2002 Free Software Foundation
        !            82:
        !            83: @sp 2
        !            84:
        !            85: Published by the Free Software Foundation @*
        !            86: 59 Temple Place - Suite 330 @*
        !            87: Boston, MA 02111-1307, USA @*
        !            88:
        !            89: Permission is granted to make and distribute verbatim copies of
        !            90: this manual provided the copyright notice and this permission notice
        !            91: are preserved on all copies.
        !            92:
        !            93: Permission is granted to copy and distribute modified versions of this
        !            94: manual under the conditions for verbatim copying, provided that the entire
        !            95: resulting derived work is distributed under the terms of a permission
        !            96: notice identical to this one.
        !            97:
        !            98: Permission is granted to copy and distribute translations of this manual
        !            99: into another language, under the above conditions for modified versions,
        !           100: except that this permission notice may be stated in a translation approved
        !           101: by the Foundation.
        !           102: @end titlepage
        !           103: @headings double
        !           104:
        !           105: @ifinfo
        !           106: @node Top, Copying, (dir), (dir)
        !           107:
        !           108: @top MPFR
        !           109:
        !           110: This manual documents how to install and use the Multiple Precision
        !           111: Floating-Point Reliable Library, version 2.0.1
        !           112:
        !           113: @end ifinfo
        !           114:
        !           115: @menu
        !           116: * Copying::                   GMP Copying Conditions (LGPL).
        !           117: * Introduction to MPFR::      Brief introduction to MPFR.
        !           118: * Installing MPFR::           How to configure and compile the MPFR library.
        !           119: * MPFR Basics::               What every MPFR user should now.
        !           120: * Reporting Bugs::            How to usefully report bugs.
        !           121: * Floating-point Functions::  Functions for arithmetic on floats.
        !           122:
        !           123: * Contributors::
        !           124: * References::
        !           125: * Concept Index::
        !           126: * Function Index::
        !           127: @end menu
        !           128:
        !           129: @node Copying, Introduction to MPFR, Top, Top
        !           130: @comment  node-name, next, previous,  up
        !           131: @unnumbered MPFR Copying Conditions
        !           132: @cindex Copying conditions
        !           133: @cindex Conditions for copying MPFR
        !           134:
        !           135: This library is @dfn{free}; this means that everyone is free to use it and
        !           136: free to redistribute it on a free basis.  The library is not in the public
        !           137: domain; it is copyrighted and there are restrictions on its distribution, but
        !           138: these restrictions are designed to permit everything that a good cooperating
        !           139: citizen would want to do.  What is not allowed is to try to prevent others
        !           140: from further sharing any version of this library that they might get from
        !           141: you.@refill
        !           142:
        !           143: Specifically, we want to make sure that you have the right to give away copies
        !           144: of the library, that you receive source code or else can get it if you want
        !           145: it, that you can change this library or use pieces of it in new free programs,
        !           146: and that you know you can do these things.@refill
        !           147:
        !           148: To make sure that everyone has such rights, we have to forbid you to deprive
        !           149: anyone else of these rights.  For example, if you distribute copies of the
        !           150: MPFR library, you must give the recipients all the rights that you have.  You
        !           151: must make sure that they, too, receive or can get the source code.  And you
        !           152: must tell them their rights.@refill
        !           153:
        !           154: Also, for our own protection, we must make certain that everyone finds out
        !           155: that there is no warranty for the MPFR library.  If it is modified by
        !           156: someone else and passed on, we want their recipients to know that what they
        !           157: have is not what we distributed, so that any problems introduced by others
        !           158: will not reflect on our reputation.@refill
        !           159:
        !           160: The precise conditions of the license for the MPFR library are found in the
        !           161: Lesser General Public License that accompanies the source code.
        !           162: See the file COPYING.LIB.@refill
        !           163:
        !           164: @node Introduction to MPFR, Installing MPFR, Copying, Top
        !           165: @comment  node-name,  next,  previous,  up
        !           166: @chapter Introduction to MPFR
        !           167:
        !           168:
        !           169: MPFR is a portable library written in C for arbitrary precision arithmetic
        !           170: on reliable floating-point numbers. It is based on the GNU MP library.
        !           171: It aims to extend the class of floating-point numbers provided by the
        !           172: GNU MP library by @dfn{reliable} floating-point numbers. It may replace
        !           173: the GNU MP floating-point numbers in a future release. The main differences
        !           174: with the @code{mpf} class are:
        !           175:
        !           176: @itemize @bullet
        !           177: @item the @code{mpfr} code is portable, i.e. the result of any operation
        !           178: does not depend (or should not) on the machine word size
        !           179: @code{mp_bits_per_limb} (32 or 64 on most machines);
        !           180: @item the precision in bits can be set exactly to any valid value
        !           181: for each variable (including very small precision);
        !           182: @item @code{mpfr} provides the four rounding modes from the IEEE 754
        !           183: standard.
        !           184: @end itemize
        !           185:
        !           186: In particular, with a precision of 53 bits, @code{mpfr} should be able
        !           187: to exactly reproduce all computations with double-precision machine
        !           188: floating-point
        !           189: numbers (@code{double} type in C), except the default exponent range
        !           190: is much wider and subnormal numbers are not implemented.
        !           191:
        !           192: This version of MPFR is released under the GNU Lesser General Public
        !           193: License.
        !           194: It is permitted to link MPFR to non-free programs, as long as when
        !           195: distributing them the MPFR source code and a means to re-link with a
        !           196: modified MPFR is provided.
        !           197:
        !           198: @section How to use this Manual
        !           199:
        !           200: Everyone should read @ref{MPFR Basics}.  If you need to install the library
        !           201: yourself, you need to read @ref{Installing MPFR}, too.
        !           202:
        !           203: The rest of the manual can be used for later reference, although it is
        !           204: probably a good idea to glance through it.
        !           205:
        !           206: @node Installing MPFR, Reporting Bugs, Introduction to MPFR, Top
        !           207: @comment  node-name,  next,  previous,  up
        !           208: @chapter Installing MPFR
        !           209: @cindex Installation
        !           210:
        !           211: To build MPFR, you first have to install GNU MP
        !           212: (version 4.0.1 or higher) on your computer.
        !           213: You need a C compiler, preferably GCC, but any reasonable compiler should
        !           214: work.  And you need a standard Unix @samp{make} program, plus some other
        !           215: standard Unix utility programs.
        !           216:
        !           217: Here are the steps needed to install the library on Unix systems
        !           218: (more details are provided in the @file{INSTALL} file):
        !           219:
        !           220: @enumerate
        !           221: @item
        !           222: In most cases, @samp{./configure --with-gmp=/usr/local/gmp} should work,
        !           223: where the directory @samp{/usr/local/gmp} is where you have installed
        !           224: GNU MP.
        !           225: When you install GNU MP, you have to copy the files
        !           226: @samp{config.h},
        !           227: @samp{gmp-impl.h}, @samp{gmp-mparam.h} and
        !           228: @samp{longlong.h} from the GNU MP source directory
        !           229: to @samp{/usr/local/gmp/include};
        !           230: these additional files are needed by MPFR.
        !           231: If you get error messages, you might check that you use the same compiler
        !           232: and compile options as for GNU MP (see the @file{INSTALL} file).
        !           233:
        !           234: @item
        !           235: @samp{make}
        !           236:
        !           237: This will compile MPFR, and create a library archive file @file{libmpfr.a}
        !           238: in the working directory.
        !           239:
        !           240: @item
        !           241: @samp{make check}
        !           242:
        !           243: This will make sure MPFR was built correctly.
        !           244: If you get error messages, please
        !           245: report this to @samp{mpfr@@loria.fr}.  (@xref{Reporting Bugs}, for
        !           246: information on what to include in useful bug reports.)
        !           247:
        !           248: @item
        !           249: @samp{make install}
        !           250:
        !           251: This will copy the files @file{mpfr.h} and @file{mpf2mpfr.h},
        !           252: and @file{libmpfr.a},
        !           253: to the directories @file{/usr/local/include} and @file{/usr/local/lib}
        !           254: respectively (or if you passed the @samp{--prefix} option to
        !           255: @file{configure}, to the directory given as argument to @samp{--prefix}).
        !           256: This will also install @file{mpfr.info} in @file{/usr/local/info}.
        !           257: @end enumerate
        !           258:
        !           259: There are some other useful make targets:
        !           260:
        !           261: @itemize @bullet
        !           262: @item
        !           263: @samp{mpfr.dvi} or @samp{dvi}
        !           264:
        !           265: Create a DVI version of the manual, in @file{mpfr.dvi}.
        !           266: @c and a set of info files, in @file{mpfr.info}, @file{mpfr.info-1}, @file{mpfr.info-2}, etc.
        !           267:
        !           268: @item
        !           269: @samp{mpfr.ps}
        !           270:
        !           271: Create a Postscript version of the manual, in @file{mpfr.ps}.
        !           272:
        !           273: @c @item
        !           274: @c @samp{html}
        !           275: @c Create a HTML version of the manual, in @file{mpfr.html}.
        !           276:
        !           277: @item
        !           278: @samp{clean}
        !           279:
        !           280: Delete all object files and archive files, but not the configuration files.
        !           281:
        !           282: @item
        !           283: @samp{distclean}
        !           284:
        !           285: Delete all files not included in the distribution.
        !           286:
        !           287: @item
        !           288: @samp{uninstall}
        !           289: Delete all files copied by @samp{make install}.
        !           290: @end itemize
        !           291:
        !           292:
        !           293: @section Known Build Problems
        !           294:
        !           295: MPFR suffers from all bugs from the GNU MP library, plus many many more.
        !           296:
        !           297: Please report other problems to @samp{mpfr@@loria.fr}.
        !           298: @xref{Reporting Bugs}.
        !           299: Some bug fixes are available on the MPFR web page
        !           300: @samp{http://www.loria.fr/projets/mpfr/} or @samp{http://www.mpfr.org/}.
        !           301:
        !           302:
        !           303: @node Reporting Bugs, MPFR Basics, Installing MPFR, Top
        !           304: @comment  node-name,  next,  previous,  up
        !           305: @chapter Reporting Bugs
        !           306: @cindex Reporting bugs
        !           307:
        !           308: If you think you have found a bug in the MPFR library, first have a look on the
        !           309: MPFR web page @samp{http://www.loria.fr/projets/mpfr/} or
        !           310: @samp{http://www.mpfr.org/}: perhaps this bug is already known,
        !           311: in which case you will find a workaround for it.
        !           312: Otherwise, please investigate
        !           313: and report it. We have made this library available to you, and it is not to ask
        !           314: too much from you, to ask you to report the bugs that you find.
        !           315:
        !           316: There are a few things you should think about when you put your bug report
        !           317: together.
        !           318:
        !           319: You have to send us a test case that makes it possible for us to reproduce the
        !           320: bug.  Include instructions on how to run the test case.
        !           321:
        !           322: You also have to explain what is wrong; if you get a crash, or if the results
        !           323: printed are incorrect and in that case, in what way.
        !           324:
        !           325: Please include compiler version information
        !           326: in your bug report.  This can be extracted using @samp{cc -V} on some
        !           327: machines, or,
        !           328: if you're using gcc, @samp{gcc -v}.  Also, include the output from @samp{uname
        !           329: -a}.
        !           330:
        !           331: If your bug report is good, we will do our best to help you to get a corrected
        !           332: version of the library; if the bug report is poor, we won't do anything about
        !           333: it (aside of chiding you to send better bug reports).
        !           334:
        !           335: Send your bug report to: @samp{mpfr@@loria.fr}.
        !           336:
        !           337: If you think something in this manual is unclear, or downright incorrect, or if
        !           338: the language needs to be improved, please send a note to the same address.
        !           339:
        !           340: @node MPFR Basics, Floating-point Functions, Reporting Bugs, Top
        !           341: @comment  node-name,  next,  previous,  up
        !           342: @chapter MPFR Basics
        !           343:
        !           344:
        !           345: @cindex @file{mpfr.h}
        !           346: All declarations needed to use MPFR are collected in the include file
        !           347: @file{mpfr.h}.  It is designed to work with both C and C++ compilers.
        !           348: You should include that file in any program using the MPFR library:
        !           349:
        !           350: @code{#include "mpfr.h"}
        !           351:
        !           352: @section Nomenclature and Types
        !           353:
        !           354: @cindex Floating-point number
        !           355: @tindex @code{mpfr_t}
        !           356: @noindent
        !           357: @dfn{Floating-point number} or @dfn{Float} for short, is an arbitrary precision
        !           358: mantissa with a limited precision exponent.  The C data type for such objects
        !           359: is @code{mpfr_t}.
        !           360: A floating-point number can have three special values: Not-a-Number (NaN)
        !           361: or plus or minus Infinity. NaN represents a value which cannot be represented
        !           362: in the floating-point format, like 0 divided by 0, or Infinity minus Infinity.
        !           363:
        !           364:
        !           365: @cindex Precision
        !           366: @tindex @code{mp_prec_t}
        !           367: @noindent
        !           368: The @dfn{Precision} is the number of bits used to represent the mantissa
        !           369: of a floating-point number;
        !           370: the corresponding C data type is @code{mp_prec_t}.
        !           371: The precision can be any integer between @code{MPFR_PREC_MIN} and
        !           372: @code{MPFR_PREC_MAX}. In the current implementation, @code{MPFR_PREC_MIN}
        !           373: is equal to 2 and @code{MPFR_PREC_MAX} is equal to @code{ULONG_MAX}.
        !           374:
        !           375: @cindex Rounding Mode
        !           376: @tindex @code{mp_rnd_t}
        !           377: @noindent
        !           378: The @dfn{rounding mode} specifies the way to round the result of a
        !           379: floating-point operation, in case the exact result can not be represented
        !           380: exactly in the destination mantissa;
        !           381: the corresponding C data type is @code{mp_rnd_t}.
        !           382:
        !           383: @cindex Limb
        !           384: @c @tindex @code{mp_limb_t}
        !           385: @noindent
        !           386: A @dfn{limb} means the part of a multi-precision number that fits in a single
        !           387: word.  (We chose this word because a limb of the human body is analogous to a
        !           388: digit, only larger, and containing several digits.)  Normally a limb contains
        !           389: 32 or 64 bits.  The C data type for a limb is @code{mp_limb_t}.
        !           390:
        !           391: @section Function Classes
        !           392:
        !           393: There is only one class of functions in the MPFR library:
        !           394:
        !           395: @enumerate
        !           396: @item
        !           397: Functions for floating-point arithmetic, with names beginning with
        !           398: @code{mpfr_}.  The associated type is @code{mpfr_t}.
        !           399: @end enumerate
        !           400:
        !           401:
        !           402: @section MPFR Variable Conventions
        !           403:
        !           404: As a general rule, all MPFR functions expect output arguments before input
        !           405: arguments.  This notation is based on an analogy with the assignment operator.
        !           406:
        !           407: MPFR allows you to use the same variable for both input and output in the same
        !           408: expression.  For example, the main function for floating-point multiplication,
        !           409: @code{mpfr_mul}, can be used like this: @code{mpfr_mul (x, x, x, rnd_mode)}.
        !           410: This
        !           411: computes the square of @var{x} with rounding mode @code{rnd_mode}
        !           412: and puts the result back in @var{x}.
        !           413:
        !           414: Before you can assign to an MPFR variable, you need to initialize it by calling
        !           415: one of the special initialization functions.  When you're done with a
        !           416: variable, you need to clear it out, using one of the functions for that
        !           417: purpose.
        !           418:
        !           419: A variable should only be initialized once, or at least cleared out between
        !           420: each initialization.  After a variable has been initialized, it may be
        !           421: assigned to any number of times.
        !           422:
        !           423: For efficiency reasons, avoid to initialize and clear out a variable in loops.
        !           424: Instead, initialize it before entering the loop, and clear it out after the
        !           425: loop has exited.
        !           426:
        !           427: You don't need to be concerned about allocating additional space for MPFR
        !           428: variables, since any variable has a mantissa of fixed size.
        !           429: Hence unless you change its precision, or clear and reinitialize it,
        !           430: a floating-point variable will have the same allocated space during all its
        !           431: life.
        !           432:
        !           433: @section Compatibility with MPF
        !           434:
        !           435: A header file @file{mpf2mpfr.h} is included in the distribution of MPFR for
        !           436: compatibility with the GNU MP class MPF.
        !           437: After inserting the following two lines after the @code{#include "gmp.h"}
        !           438: line,
        !           439:
        !           440: @code{#include "mpfr.h"}
        !           441:
        !           442: @code{#include "mpf2mpfr.h"}
        !           443:
        !           444: any program written for
        !           445: MPF can be linked directly with MPFR without any changes.
        !           446: All operations are then performed with the default MPFR rounding mode,
        !           447: which can be reset with @code{mpfr_set_default_rounding_mode}.
        !           448:
        !           449: @deftypevr {Global Variable} {mp_rnd_t} __gmp_default_rounding_mode
        !           450: The default rounding mode (to nearest initially).
        !           451: @end deftypevr
        !           452:
        !           453: @section Getting the Latest Version of MPFR
        !           454:
        !           455: The latest version of MPFR is available from
        !           456: @samp{http://www.loria.fr/projets/mpfr/} or @samp{http://www.mpfr.org/}.
        !           457:
        !           458: @node Floating-point Functions, Contributors, MPFR Basics, Top
        !           459: @comment  node-name,  next,  previous,  up
        !           460: @chapter Floating-point Functions
        !           461: @cindex Floating-point functions
        !           462: @cindex Float functions
        !           463:
        !           464: The floating-point functions expect arguments of type @code{mpfr_t}.
        !           465:
        !           466: The MPFR floating-point functions have an interface that is similar to the
        !           467: GNU MP
        !           468: integer functions.  The function prefix for floating-point operations is
        !           469: @code{mpfr_}.
        !           470:
        !           471: There is one significant characteristic of floating-point numbers that has
        !           472: motivated a difference between this function class and other MPFR function
        !           473: classes: the inherent inexactness of floating-point arithmetic.  The user has
        !           474: to specify the precision of each variable.  A computation that assigns a
        !           475: variable will take place with the precision of the assigned variable; the
        !           476: cost of that computation should not depend from the
        !           477: precision of variables used as input on average.
        !           478:
        !           479: @cindex User-defined precision
        !           480: The precision of a calculation is defined as follows: Compute the requested
        !           481: operation exactly (with ``infinite precision''), and round the result to
        !           482: the destination variable precision with the given rounding mode.
        !           483: Even if the user has asked for a very
        !           484: high precision, MP will not calculate with superfluous digits.  For example,
        !           485: if two low-precision numbers of nearly equal magnitude are added, the
        !           486: precision of the result will be limited to what is required to represent the
        !           487: result accurately.
        !           488:
        !           489: The MPFR floating-point functions are intended to be a smooth extension
        !           490: of the IEEE P754 arithmetic. The results obtained on one
        !           491: computer should not differ from the results obtained on a computer with a
        !           492: different word size.
        !           493:
        !           494: @menu
        !           495: * Rounding Modes::
        !           496: * Exceptions::
        !           497: * Initializing Floats::
        !           498: * Assigning Floats::
        !           499: * Simultaneous Float Init & Assign::
        !           500: * Converting Floats::
        !           501: * Float Arithmetic::
        !           502: * Float Comparison::
        !           503: * I/O of Floats::
        !           504: * Miscellaneous Float Functions::
        !           505: @end menu
        !           506:
        !           507: @node Rounding Modes, Exceptions, Floating-point Functions, Floating-point Functions
        !           508: @cindex Rounding modes
        !           509: @section Rounding Modes
        !           510:
        !           511: The following four rounding modes are supported:
        !           512: @itemize @bullet
        !           513: @item @code{GMP_RNDN}: round to nearest
        !           514: @item @code{GMP_RNDZ}: round towards zero
        !           515: @item @code{GMP_RNDU}: round towards plus infinity
        !           516: @item @code{GMP_RNDD}: round towards minus infinity
        !           517: @end itemize
        !           518: The @samp{round to nearest} mode works as in the IEEE P754 standard: in case
        !           519: the number to be rounded lies exactly in the middle of two representable
        !           520: numbers, it is rounded to the one with the least significant bit set to zero.
        !           521: For example, the number 5, which is represented by (101) in binary, is rounded
        !           522: to (100)=4 with a precision of two bits, and not to (110)=6.
        !           523: This rule avoids the @dfn{drift} phenomenon mentioned by Knuth in volume 2
        !           524: of The Art of Computer Programming (section 4.2.2, pages 221-222).
        !           525:
        !           526: Most MPFR functions take as first argument the destination variable,
        !           527: as second and following arguments the input variables,
        !           528: as last argument a rounding mode, and
        !           529: have a return value of type @code{int}. If this value is zero, it means
        !           530: that the value stored in the destination variable is the exact result of
        !           531: the corresponding mathematical function. If the returned value is positive
        !           532: (resp. negative), it means the value stored in the destination variable
        !           533: is greater (resp. lower) than the exact result.
        !           534: For example with the @code{GMP_RNDU} rounding mode, the returned value
        !           535: is usually positive, except when the result is exact, in which case it is
        !           536: zero.
        !           537: In the case of an infinite result, it is considered as inexact when it was
        !           538: obtained by overflow, and exact otherwise.
        !           539: A NaN result (Not-a-Number) always corresponds to an inexact return value.
        !           540:
        !           541: @deftypefun void mpfr_set_default_rounding_mode (mp_rnd_t @var{rnd})
        !           542: Sets the default rounding mode to @var{rnd}.
        !           543: The default rounding mode is to nearest initially.
        !           544: @end deftypefun
        !           545:
        !           546: @deftypefun int mpfr_round_prec (mpfr_t @var{x}, mp_rnd_t @var{rnd}, mp_prec_t @var{prec})
        !           547: Rounds @var{x} according to @var{rnd} with precision @var{prec}, which
        !           548: may be different from that of @var{x}.
        !           549: If @var{prec} is greater or equal to the precision of @var{x}, then new
        !           550: space is allocated for the mantissa, and it is filled with zeroes.
        !           551: Otherwise, the mantissa is rounded to precision @var{prec} with the given
        !           552: direction. In both cases, the precision of @var{x} is changed to @var{prec}.
        !           553: The returned value is zero when the result is exact, positive when it is
        !           554: greater than the original value of @var{x}, and negative when it is smaller.
        !           555: The precision @var{prec} can be any integer between @code{MPFR_PREC_MIN} and
        !           556: @code{MPFR_PREC_MAX}.
        !           557: @end deftypefun
        !           558:
        !           559: @deftypefun void mpfr_set_machine_rnd_mode (mp_rnd_t @var{rnd})
        !           560: Set the machine rounding mode to @var{rnd}.
        !           561: This function is provided only when the operating system supports the
        !           562: ISOC9X standard interface for setting rounding modes (i.e. through the
        !           563: header file <fenv.h>).
        !           564: @end deftypefun
        !           565:
        !           566: @deftypefun {char *} mpfr_print_rnd_mode (mp_rnd_t @var{rnd})
        !           567: Returns the input string (GMP_RNDD, GMP_RNDU, GMP_RNDN, GMP_RNDZ)
        !           568: corresponding to the rounding mode @var{rnd} or a null pointer if
        !           569: @var{rnd} is an invalid rounding mode.
        !           570: @end deftypefun
        !           571:
        !           572: @node Exceptions, Initializing Floats, Rounding Modes, Floating-point Functions
        !           573: @comment  node-name,  next,  previous,  up
        !           574: @section Exceptions
        !           575:
        !           576: Note: Overflow handling is still experimental and currently implemented
        !           577: very partially. If an overflow occurs internally at the wrong place,
        !           578: anything can happen (crash, wrong results, etc).
        !           579:
        !           580: @deftypefun mp_exp_t mpfr_get_emin (void)
        !           581: @deftypefunx mp_exp_t mpfr_get_emax (void)
        !           582: Return the (current) smallest and largest exponents allowed for a
        !           583: floating-point variable.
        !           584: @end deftypefun
        !           585:
        !           586: @deftypefun int mpfr_set_emin (mp_exp_t @var{exp})
        !           587: @deftypefunx int mpfr_set_emax (mp_exp_t @var{exp})
        !           588: Set the smallest and largest exponents allowed for a floating-point variable.
        !           589: Return a non-zero value when @var{exp} is not in the range accepted by the
        !           590: implementation (in that case the smallest or largest exponent is not changed),
        !           591: and zero otherwise.
        !           592: If the user changes the exponent range, it is her/his responsibility to check
        !           593: that all current floating-point variables are in the new allowed range
        !           594: (for example using @code{mpfr_check_range},
        !           595: otherwise the subsequent
        !           596: behaviour will be undefined, in the sense of the ISO C standard.
        !           597: @end deftypefun
        !           598:
        !           599: @deftypefun int  mpfr_check_range (mpfr_t @var{x}, mp_rnd_t @var{rnd})
        !           600: Return zero if the exponent of @var{x} is in the current allowed range
        !           601: (see @code{mpfr_get_emin} and @code{mpfr_get_emax}),
        !           602: otherwise reset @var{x} according to the current floating-point system
        !           603: and the rounding mode @var{rnd}, and return a positive value if the
        !           604: rounded result is larger than the original one, a negative value otherwise
        !           605: (the result cannot be exact in that case).
        !           606: @end deftypefun
        !           607:
        !           608: @deftypefun void mpfr_clear_underflow (void)
        !           609: @deftypefunx void mpfr_clear_overflow (void)
        !           610: @deftypefunx void mpfr_clear_nanflag (void)
        !           611: @deftypefunx void mpfr_clear_inexflag (void)
        !           612: Clear the underflow, overflow, invalid, and inexact flags.
        !           613: @end deftypefun
        !           614:
        !           615: @deftypefun void mpfr_clear_flags (void)
        !           616: Clear all global flags (underflow, overflow, inexact, invalid).
        !           617: @end deftypefun
        !           618:
        !           619: @deftypefun int mpfr_underflow_p (void)
        !           620: @deftypefunx int mpfr_overflow_p (void)
        !           621: @deftypefunx int mpfr_nanflag_p (void)
        !           622: @deftypefunx int mpfr_inexflag_p (void)
        !           623: Return the corresponding (underflow, overflow, invalid, inexact) flag,
        !           624: which is non-zero iff the flag is set.
        !           625: @end deftypefun
        !           626:
        !           627: @node Initializing Floats, Assigning Floats, Exceptions, Floating-point Functions
        !           628: @comment  node-name,  next,  previous,  up
        !           629: @section Initialization and Assignment Functions
        !           630:
        !           631: @deftypefun void mpfr_set_default_prec (mp_prec_t @var{prec})
        !           632: Set the default precision to be @strong{exactly} @var{prec} bits.  The
        !           633: precision of a variable means the number of bits used to store its mantissa.
        !           634: All
        !           635: subsequent calls to @code{mpfr_init} will use this precision, but previously
        !           636: initialized variables are unaffected.
        !           637: This default precision is set to 53 bits initially.
        !           638: The precision can be any integer between @code{MPFR_PREC_MIN} and
        !           639: @code{MPFR_PREC_MAX}.
        !           640: @end deftypefun
        !           641:
        !           642: @deftypefun mp_prec_t mpfr_get_default_prec ()
        !           643: Returns the default MPFR precision in bits.
        !           644: @end deftypefun
        !           645:
        !           646: An @code{mpfr_t} object must be initialized before storing the first value in
        !           647: it.  The functions @code{mpfr_init} and @code{mpfr_init2} are used for that
        !           648: purpose.
        !           649:
        !           650: @deftypefun void mpfr_init (mpfr_t @var{x})
        !           651: Initialize @var{x}, and set its value to NaN.
        !           652: Normally, a variable should be initialized once only
        !           653: or at least be cleared, using @code{mpfr_clear}, between initializations.  The
        !           654: precision of @var{x} is the default precision, which can be changed
        !           655: by a call to @code{mpfr_set_default_prec}.
        !           656: @end deftypefun
        !           657:
        !           658: @deftypefun void mpfr_init2 (mpfr_t @var{x}, mp_prec_t @var{prec})
        !           659: Initialize @var{x}, set its precision to be @strong{exactly}
        !           660: @var{prec} bits, and set its value to NaN.
        !           661: Normally, a variable should be initialized once only or at
        !           662: least be cleared, using @code{mpfr_clear}, between initializations.
        !           663: To change the precision of a variable which has already been initialized,
        !           664: use @code{mpfr_set_prec} instead.
        !           665: The precision @var{prec} can be any integer between @code{MPFR_PREC_MIN} and
        !           666: @code{MPFR_PREC_MAX}.
        !           667: @end deftypefun
        !           668:
        !           669: @deftypefun void mpfr_clear (mpfr_t @var{x})
        !           670: Free the space occupied by @var{x}.  Make sure to call this function for all
        !           671: @code{mpfr_t} variables when you are done with them.
        !           672: @end deftypefun
        !           673:
        !           674: @need 2000
        !           675: Here is an example on how to initialize floating-point variables:
        !           676: @example
        !           677: @{
        !           678:   mpfr_t x, y;
        !           679:   mpfr_init (x);                       /* use default precision */
        !           680:   mpfr_init2 (y, 256);         /* precision @emph{exactly} 256 bits */
        !           681:   @dots{}
        !           682:   /* Unless the program is about to exit, do ... */
        !           683:   mpfr_clear (x);
        !           684:   mpfr_clear (y);
        !           685: @}
        !           686: @end example
        !           687:
        !           688: The following two functions are useful for changing the precision during a
        !           689: calculation.  A typical use would be for adjusting the precision gradually in
        !           690: iterative algorithms like Newton-Raphson, making the computation precision
        !           691: closely match the actual accurate part of the numbers.
        !           692:
        !           693: @deftypefun int mpfr_set_prec (mpfr_t @var{x}, mp_prec_t @var{prec})
        !           694: Reset the precision of @var{x} to be @strong{exactly} @var{prec} bits.
        !           695: The previous value stored in @var{x} is lost. It is equivalent to
        !           696: a call to @code{mpfr_clear(x)} followed by a call to
        !           697: @code{mpfr_init2(x, prec)}, but more efficient as no allocation is done in
        !           698: case the current allocated space for the mantissa of @var{x} is enough.
        !           699: The precision @var{prec} can be any integer between @code{MPFR_PREC_MIN} and
        !           700: @code{MPFR_PREC_MAX}.
        !           701: It returns a non-zero value iff the memory allocation failed.
        !           702:
        !           703: In case you want to keep the previous value stored in @var{x},
        !           704: use @code{mpfr_round_prec} instead.
        !           705: @end deftypefun
        !           706:
        !           707: @deftypefun mp_prec_t mpfr_get_prec (mpfr_t @var{x})
        !           708: Return the precision actually used for assignments of @var{x}, i.e.
        !           709: the number of bits used to store its mantissa.
        !           710: @end deftypefun
        !           711:
        !           712: @deftypefun void mpfr_set_prec_raw (mpfr_t @var{x}, unsigned long int @var{p})
        !           713: Reset the precision of @var{x} to be @strong{exactly} @var{prec} bits.
        !           714: The only difference with @code{mpfr_set_prec} is that @var{p} is assumed to
        !           715: be small enough so that the mantissa fits into the current allocated memory
        !           716: space for @var{x}. Otherwise an error will occur.
        !           717: @end deftypefun
        !           718:
        !           719: @node Assigning Floats, Simultaneous Float Init & Assign, Initializing Floats, Floating-point Functions
        !           720: @comment  node-name,  next,  previous,  up
        !           721: @section Assignment Functions
        !           722: @cindex Float assignment functions
        !           723:
        !           724: These functions assign new values to already initialized floats
        !           725: (@pxref{Initializing Floats}).
        !           726:
        !           727: @deftypefun int mpfr_set (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           728: @deftypefunx int mpfr_set_ui (mpfr_t @var{rop}, unsigned long int @var{op}, mp_rnd_t @var{rnd})
        !           729: @deftypefunx int mpfr_set_si (mpfr_t @var{rop}, long int @var{op}, mp_rnd_t @var{rnd}
        !           730: @deftypefunx int mpfr_set_d (mpfr_t @var{rop}, double @var{op}, mp_rnd_t @var{rnd})
        !           731: @deftypefunx int mpfr_set_z (mpfr_t @var{rop}, mpz_t @var{op}, mp_rnd_t @var{rnd})
        !           732: @deftypefunx int mpfr_set_q (mpfr_t @var{rop}, mpq_t @var{op}, mp_rnd_t @var{rnd})
        !           733: Set the value of @var{rop} from @var{op}, rounded to the precision of @var{rop}
        !           734: towards the given direction @var{rnd}.
        !           735: Please note that even a @code{long int} may have to be rounded,
        !           736: if the destination precision is less than the machine word width.
        !           737: The return value is zero when @var{rop}=@var{op}, positive when
        !           738: @var{rop}>@var{op},
        !           739: and negative when @var{rop}<@var{op}.
        !           740: For @code{mpfr_set_d}, be careful that the input number @var{op}
        !           741: may not be exactly representable as a double-precision number (this happens for
        !           742: 0.1 for instance), in which case it is first
        !           743: rounded by the C compiler to a double-precision number, and then only
        !           744: to a mpfr floating-point number.
        !           745: @end deftypefun
        !           746:
        !           747: @deftypefun int mpfr_set_str (mpfr_t @var{x}, char *@var{s}, int @var{base}, mp_rnd_t @var{rnd})
        !           748: Set @var{x} to the value of the string @var{s} in base @var{base} (between
        !           749: 2 and 36), rounded in direction @var{rnd} to the precision of @var{x}.
        !           750: The exponent is read in decimal.
        !           751: This function returns @minus{}1 if an internal overflow occurred (for
        !           752: instance, because the exponent is too large). Otherwise it returns 0
        !           753: if the base is valid and if the entire string up to the final '\0' is
        !           754: a valid number in base @var{base}, and 1 if the input is incorrect.
        !           755: @end deftypefun
        !           756:
        !           757: @deftypefun void mpfr_set_str_raw (mpfr_t @var{x}, char *@var{s})
        !           758: Set @var{x} to the value of the binary number in string @var{s}, which has to
        !           759: be of the
        !           760: form +/-xxxx.xxxxxxEyy. The exponent is read in decimal, but is interpreted
        !           761: as the power of two to be multiplied by the mantissa.
        !           762: The mantissa length of @var{s} has to be less or equal to the precision of
        !           763: @var{x}, otherwise an error occurs.
        !           764: If @var{s} starts with @code{N}, it is interpreted as NaN (Not-a-Number);
        !           765: if it starts with @code{I} after the sign, it is interpreted as infinity,
        !           766: with the corresponding sign.
        !           767: @end deftypefun
        !           768:
        !           769: @deftypefun int mpfr_set_f (mpfr_t @var{x}, mpf_t @var{y}, mp_rnd_t @var{rnd})
        !           770: Set @var{x} to the GNU MP floating-point number
        !           771: @var{y}, rounded with the @var{rnd} mode and the precision
        !           772: of @var{x}.
        !           773: The returned value is zero when @var{x}=@var{y}, positive when @var{x}>@var{y},
        !           774: and negative when @var{x}<@var{y}.
        !           775: @end deftypefun
        !           776:
        !           777: @deftypefun void mpfr_set_inf (mpfr_t @var{x}, int @var{sign})
        !           778: @deftypefunx void mpfr_set_nan (mpfr_t @var{x})
        !           779: Set the variable @var{x} to infinity or NaN (Not-a-Number) respectively.
        !           780: In @code{mpfr_set_inf}, @var{x} is set to plus infinity iff @var{sign} is
        !           781: positive.
        !           782: @end deftypefun
        !           783:
        !           784: @deftypefun void mpfr_swap (mpfr_t @var{x}, mpfr_t @var{y})
        !           785: Swap the values @var{x} and @var{y} efficiently. Warning: the
        !           786: precisions are exchanged too; in case the precisions are different,
        !           787: @code{mpfr_swap} is thus not equivalent to three @code{mpfr_set} calls
        !           788: using a third auxiliary variable.
        !           789: @end deftypefun
        !           790:
        !           791: @node Simultaneous Float Init & Assign, Converting Floats, Assigning Floats, Floating-point Functions
        !           792: @comment  node-name,  next,  previous,  up
        !           793: @section Combined Initialization and Assignment Functions
        !           794: @cindex Initialization and assignment functions
        !           795:
        !           796: @deftypefn Macro int mpfr_init_set (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           797: @deftypefnx Macro int mpfr_init_set_ui (mpfr_t @var{rop}, unsigned long int @var{op}, mp_rnd_t @var{rnd})
        !           798: @deftypefnx Macro int mpfr_init_set_si (mpfr_t @var{rop}, signed long int @var{op}, mp_rnd_t @var{rnd})
        !           799: @deftypefnx Macro int mpfr_init_set_d (mpfr_t @var{rop}, double @var{op}, mp_rnd_t @var{rnd})
        !           800: @deftypefnx Macro int mpfr_init_set_f (mpfr_t @var{rop}, mpf_t @var{op}, mp_rnd_t @var{rnd})
        !           801: @deftypefnx Macro int mpfr_init_set_z (mpfr_t @var{rop}, mpz_t @var{op}, mp_rnd_t @var{rnd})
        !           802: @deftypefnx Macro int mpfr_init_set_q (mpfr_t @var{rop}, mpq_t @var{op}, mp_rnd_t @var{rnd})
        !           803: Initialize @var{rop} and set its value from @var{op}, rounded to direction
        !           804: @var{rnd}.
        !           805: The precision of @var{rop} will be taken from the active default precision,
        !           806: as set by @code{mpfr_set_default_prec}.
        !           807: The return value if zero if @var{rop}=@var{op}, positive if @var{rop}>@var{op},
        !           808: and negative when @var{rop}<@var{op}.
        !           809: @end deftypefn
        !           810:
        !           811: @deftypefun int mpfr_init_set_str (mpfr_t @var{x}, char *@var{s}, int @var{base}, mp_rnd_t @var{rnd})
        !           812: Initialize @var{x} and set its value from
        !           813: the string @var{s} in base @var{base},
        !           814: rounded to direction @var{rnd}.
        !           815: See @code{mpfr_set_str}.
        !           816: @end deftypefun
        !           817:
        !           818: @node Converting Floats, Float Arithmetic, Simultaneous Float Init & Assign, Floating-point Functions
        !           819: @comment  node-name,  next,  previous,  up
        !           820: @section Conversion Functions
        !           821: @cindex Conversion functions
        !           822:
        !           823: @deftypefun double mpfr_get_d (mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           824: Convert @var{op} to a double, using the rounding mode @var{rnd}.
        !           825: @end deftypefun
        !           826:
        !           827: @deftypefun double mpfr_get_d1 (mpfr_t @var{op})
        !           828: Convert @var{op} to a double, using the default MPFR rounding mode
        !           829: (see function @code{mpfr_set_default_rounding_mode}).
        !           830: @end deftypefun
        !           831:
        !           832: @deftypefun mp_exp_t mpfr_get_z_exp (mpz_t @var{z}, mpfr_t @var{op})
        !           833: Puts the mantissa of @var{op} into @var{z}, and returns the exponent
        !           834: @var{exp} such that @var{op} equals @var{z} multiplied by two exponent
        !           835: @var{exp}.
        !           836: @end deftypefun
        !           837:
        !           838: @deftypefun {char *} mpfr_get_str (char *@var{str}, mp_exp_t *@var{expptr}, int @var{base}, size_t @var{n_digits}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           839: Convert @var{op} to a string of digits in base @var{base}, with rounding in
        !           840: direction @var{rnd}. The base may vary
        !           841: from 2 to 36.  Generate exactly @var{n_digits} significant digits.
        !           842:
        !           843: If @var{n_digits} is 0, it writes the maximum possible number of digits
        !           844: giving an exact rounding in the given base @var{base} with the direction
        !           845: @var{rnd}. In other words, if @var{op} was the exact rounding
        !           846: of a real number in direction @var{rnd}, then the written value is also
        !           847: an exact rounding in base @var{base} of that real number with the same
        !           848: precision. An error occurs when one is unable to determine the leading
        !           849: digit, which can happen especially if the precision of @var{op} is small.
        !           850:
        !           851: If @var{str} is a null pointer, space for the mantissa is allocated using
        !           852: the default allocation function, and a pointer to the string is returned.
        !           853: In that case, the user should her/himself free the corresponding memory
        !           854: with @code{(*_mp_free_func)(s, strlen(s) + 1)}.
        !           855:
        !           856: If @var{str} is not a null pointer, it should point to a block of storage
        !           857: large enough for the mantissa, i.e., @var{n_digits} + 2 or more. The extra
        !           858: two bytes are for a possible minus sign, and for the terminating null
        !           859: character.
        !           860:
        !           861: If the input number is a real number, the exponent is written through
        !           862: the pointer @var{expptr} (the current minimal exponent for 0).
        !           863:
        !           864: If @var{n_digits} is 0, note that the space requirements for @var{str}
        !           865: in this case will be impossible for the user to predetermine. Therefore,
        !           866: one needs to pass a null pointer for the string argument whenever
        !           867: @var{n_digits} is 0.
        !           868:
        !           869: The generated string is a fraction, with an implicit radix point immediately
        !           870: to the left of the first digit.  For example, the number 3.1416 would be
        !           871: returned as "31416" in the string and 1 written at @var{expptr}.
        !           872:
        !           873: A pointer to the string is returned, unless there is an error, in which
        !           874: case a null pointer is returned.
        !           875: @end deftypefun
        !           876:
        !           877:
        !           878: @node Float Arithmetic, Float Comparison, Converting Floats, Floating-point Functions
        !           879: @comment  node-name,  next,  previous,  up
        !           880: @section Basic Arithmetic Functions
        !           881: @cindex Float arithmetic functions
        !           882: @cindex Arithmetic functions
        !           883:
        !           884: @deftypefun int mpfr_add (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           885: @deftypefunx int mpfr_add_ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           886: @deftypefunx int mpfr_add_z (mpfr_t @var{rop}, mpfr_t @var{op1}, mpz_t @var{op2}, mp_rnd_t @var{rnd})
        !           887: @deftypefunx int mpfr_add_q (mpfr_t @var{rop}, mpfr_t @var{op1}, mpq_t @var{op2}, mp_rnd_t @var{rnd})
        !           888: Set @var{rop} to @var{op1} @math{+} @var{op2} rounded in the direction @var{rnd}.
        !           889: The return value is zero if @var{rop} is exactly @var{op1} @math{+} @var{op2},
        !           890: positive if @var{rop} is larger than @var{op1} @math{+} @var{op2},
        !           891: and negative if @var{rop} is smaller than @var{op1} @math{+} @var{op2}.
        !           892: @end deftypefun
        !           893:
        !           894: @deftypefun int mpfr_sub (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           895: @deftypefunx int mpfr_ui_sub (mpfr_t @var{rop}, unsigned long int @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           896: @deftypefunx int mpfr_sub_ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           897: @deftypefunx int mpfr_sub_z (mpfr_t @var{rop}, mpfr_t @var{op1}, mpz_t @var{op2}, mp_rnd_t @var{rnd})
        !           898: @deftypefunx int mpfr_sub_q (mpfr_t @var{rop}, mpfr_t @var{op1}, mpq_t @var{op2}, mp_rnd_t @var{rnd})
        !           899: Set @var{rop} to @var{op1} @minus{} @var{op2} rounded in the direction @var{rnd}.
        !           900: The return value is zero if @var{rop} is exactly @var{op1} @minus{} @var{op2},
        !           901: positive if @var{rop} is larger than @var{op1} @minus{} @var{op2},
        !           902: and negative if @var{rop} is smaller than @var{op1} @minus{} @var{op2}.
        !           903: @end deftypefun
        !           904:
        !           905: @deftypefun int mpfr_mul (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           906: @deftypefunx int mpfr_mul_ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           907: @deftypefunx int mpfr_mul_z (mpfr_t @var{rop}, mpfr_t @var{op1}, mpz_t @var{op2}, mp_rnd_t @var{rnd})
        !           908: @deftypefunx int mpfr_mul_q (mpfr_t @var{rop}, mpfr_t @var{op1}, mpq_t @var{op2}, mp_rnd_t @var{rnd})
        !           909: @ifinfo
        !           910: Set @var{rop} to @var{op1} times @var{op2} rounded in the direction @var{rnd}.
        !           911: Return 0 if the result is exact, a positive value if
        !           912: @var{rop}>@var{op1}*@var{op2}, a negative value otherwise.
        !           913: @end ifinfo
        !           914: @tex
        !           915: Set @var{rop} to $@var{op1} \times @var{op2}$ rounded in the direction @var{rnd}.
        !           916: Return 0 if the result is exact, a positive value if
        !           917: $@var{rop} > @var{op1} \times @var{op2}$, a negative value otherwise.
        !           918: @end tex
        !           919: @end deftypefun
        !           920:
        !           921: @deftypefun int mpfr_div (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           922: @deftypefunx int mpfr_ui_div (mpfr_t @var{rop}, unsigned long int @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           923: @deftypefunx int mpfr_div_ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           924: @deftypefunx int mpfr_div_z (mpfr_t @var{rop}, mpfr_t @var{op1}, mpz_t @var{op2}, mp_rnd_t @var{rnd})
        !           925: @deftypefunx int mpfr_div_q (mpfr_t @var{rop}, mpfr_t @var{op1}, mpq_t @var{op2}, mp_rnd_t @var{rnd})
        !           926: Set @var{rop} to @var{op1}/@var{op2} rounded in the direction @var{rnd}.
        !           927: These functions return 0 if the division is exact,
        !           928: a positive value when @var{rop} is larger than @var{op1} divided by @var{op2},
        !           929: and a negative value otherwise.
        !           930: @end deftypefun
        !           931:
        !           932: @deftypefun int mpfr_sqrt (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           933: @deftypefunx int mpfr_sqrt_ui (mpfr_t @var{rop}, unsigned long int @var{op}, mp_rnd_t @var{rnd})
        !           934: @ifinfo
        !           935: Set @var{rop} to the square root of @var{op} rounded in the direction @var{rnd}.
        !           936: @end ifinfo
        !           937: @tex
        !           938: Set @var{rop} to $\sqrt{@var{op}}$ rounded in the direction @var{rnd}.
        !           939: @end tex
        !           940: Set @var{rop} to NaN if @var{op} is negative.
        !           941: Return 0 if the operation is exact, a non-zero value otherwise.
        !           942: @end deftypefun
        !           943:
        !           944: @deftypefun int mpfr_pow_ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           945: @deftypefunx int mpfr_ui_pow_ui (mpfr_t @var{rop}, unsigned long int @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           946: Set @var{rop} to @var{op1} raised to @var{op2}. The computation is done by
        !           947: binary exponentiation.
        !           948: Return 0 if the result is exact, a non-zero value otherwise (but the sign
        !           949: of the return value has no meaning).
        !           950: @end deftypefun
        !           951:
        !           952: @deftypefun int mpfr_ui_pow (mpfr_t @var{rop}, unsigned long int @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           953: Set @var{rop} to @var{op1} raised to @var{op2},
        !           954: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !           955: Return zero iff the result is exact, a positive value when the
        !           956: result is greater than @var{op1} to the power @var{op2}, and a negative value
        !           957: when it is smaller.
        !           958: @end deftypefun
        !           959:
        !           960: @deftypefun int mpfr_pow_si (mpfr_t @var{rop}, mpfr_t @var{op1}, long int @var{op2}, mp_rnd_t @var{rnd})
        !           961: Set @var{rop} to @var{op1} raised to the power @var{op2},
        !           962: rounded to the direction @var{rnd} with the
        !           963: precision of @var{rop}.
        !           964: Return zero iff the result is exact.
        !           965: @end deftypefun
        !           966:
        !           967: @deftypefun int mpfr_pow (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !           968: Set @var{rop} to @var{op1} raised to the power @var{op2},
        !           969: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !           970: If @var{op1} is negative then @var{rop} is set to NaN,
        !           971: even if @var{op2} is an integer.
        !           972: Return zero iff the result is exact.
        !           973: @end deftypefun
        !           974:
        !           975: @deftypefun int mpfr_neg (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           976: Set @var{rop} to @minus{}@var{op} rounded in the direction @var{rnd}.
        !           977: Just changes the sign
        !           978: if @var{rop} and @var{op} are the same variable.
        !           979: @end deftypefun
        !           980:
        !           981: @deftypefun int mpfr_abs (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !           982: Set @var{rop} to the absolute value of @var{op},
        !           983: rounded in the direction @var{rnd}.
        !           984: Return 0 if the result is exact, a positive value if @var{rop} is larger than
        !           985: the absolute value of @var{op}, and a negative value otherwise.
        !           986: @end deftypefun
        !           987:
        !           988: @deftypefun int mpfr_mul_2exp (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           989: @deftypefunx int mpfr_mul_2ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !           990: @deftypefunx int mpfr_mul_2si (mpfr_t @var{rop}, mpfr_t @var{op1}, long int @var{op2}, mp_rnd_t @var{rnd})
        !           991: @ifinfo
        !           992: Set @var{rop} to @var{op1} times 2 raised to @var{op2}
        !           993: @end ifinfo
        !           994: @tex
        !           995: Set @var{rop} to $@var{op1} \times 2^{op2}$
        !           996: @end tex
        !           997: rounded to the direction @var{rnd}. Just increases the exponent by @var{op2}
        !           998: when @var{rop} and @var{op1} are identical.
        !           999: Return zero when @var{rop}=@var{op1}, a positive value when @var{rop}>@var{op1},
        !          1000: and a negative value when @var{rop}<@var{op1}.
        !          1001: Note: The @code{mpfr_mul_2exp} function is defined for compatibility reasons;
        !          1002: you should use @code{mpfr_mul_2ui} (or @code{mpfr_mul_2si}) instead.
        !          1003: @end deftypefun
        !          1004:
        !          1005: @deftypefun int mpfr_div_2exp (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !          1006: @deftypefunx int mpfr_div_2ui (mpfr_t @var{rop}, mpfr_t @var{op1}, unsigned long int @var{op2}, mp_rnd_t @var{rnd})
        !          1007: @deftypefunx int mpfr_div_2si (mpfr_t @var{rop}, mpfr_t @var{op1}, long int @var{op2}, mp_rnd_t @var{rnd})
        !          1008: @ifinfo
        !          1009: Set @var{rop} to @var{op1} divided by 2 raised to @var{op2}
        !          1010: @end ifinfo
        !          1011: @tex
        !          1012: Set @var{rop} to $@var{op1}/2^{op2}$
        !          1013: @end tex
        !          1014: rounded to the direction @var{rnd}. Just decreases the exponent by @var{op2}
        !          1015: when @var{rop} and @var{op1} are identical.
        !          1016: Return zero when @var{rop}=@var{op1}, a positive value when @var{rop}>@var{op1},
        !          1017: and a negative value when @var{rop}<@var{op1}.
        !          1018: Note: The @code{mpfr_div_2exp} function is defined for compatibility reasons;
        !          1019: you should use @code{mpfr_div_2ui} (or @code{mpfr_div_2si}) instead.
        !          1020: @end deftypefun
        !          1021:
        !          1022: @node Float Comparison, I/O of Floats, Float Arithmetic, Floating-point Functions
        !          1023: @comment  node-name,  next,  previous,  up
        !          1024: @section Comparison Functions
        !          1025: @cindex Float comparisons functions
        !          1026: @cindex Comparison functions
        !          1027:
        !          1028: @deftypefun int mpfr_cmp (mpfr_t @var{op1}, mpfr_t @var{op2})
        !          1029: @deftypefunx int mpfr_cmp_ui (mpfr_t @var{op1}, unsigned long int @var{op2})
        !          1030: @deftypefunx int mpfr_cmp_si (mpfr_t @var{op1}, signed long int @var{op2})
        !          1031: @ifinfo
        !          1032: Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
        !          1033: @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
        !          1034: @var{op2}.
        !          1035: @end ifinfo
        !          1036: @tex
        !          1037: Compare @var{op1} and @var{op2}.  Return a positive value if $@var{op1} >
        !          1038: @var{op2}$, zero if $@var{op1} = @var{op2}$, and a negative value if $@var{op1}
        !          1039: < @var{op2}$.
        !          1040: @end tex
        !          1041: Both @var{op1} and @var{op2} are considered to their full own precision,
        !          1042: which may differ. In case @var{op1} and @var{op2} are of same sign but
        !          1043: different, the absolute value returned is
        !          1044: one plus the absolute difference of their exponents.
        !          1045: It is not allowed that one of the operands is NaN (Not-a-Number).
        !          1046: @end deftypefun
        !          1047:
        !          1048: @deftypefun int mpfr_cmp_ui_2exp (mpfr_t @var{op1}, unsigned long int @var{op2}, int @var{e})
        !          1049: @deftypefunx int mpfr_cmp_si_2exp (mpfr_t @var{op1}, long int @var{op2}, int @var{e})
        !          1050: Compare @var{op1} and @var{op2} multiplied by two to the power @var{e}.
        !          1051: @end deftypefun
        !          1052:
        !          1053: @deftypefun int mpfr_eq (mpfr_t @var{op1}, mpfr_t @var{op2}, unsigned long int op3)
        !          1054: Return non-zero if the first @var{op3} bits of @var{op1} and @var{op2} are
        !          1055: equal, zero otherwise.  I.e., tests if @var{op1} and @var{op2} are
        !          1056: approximately equal.
        !          1057: @end deftypefun
        !          1058:
        !          1059: @deftypefun int mpfr_nan_p (mpfr_t @var{op})
        !          1060: Return non-zero if @var{op} is Not-a-Number (NaN), zero otherwise.
        !          1061: @end deftypefun
        !          1062:
        !          1063: @deftypefun int mpfr_inf_p (mpfr_t @var{op})
        !          1064: Return non-zero if @var{op} is plus or minus infinity, zero otherwise.
        !          1065: @end deftypefun
        !          1066:
        !          1067: @deftypefun int mpfr_number_p (mpfr_t @var{op})
        !          1068: Return non-zero if @var{op} is an ordinary number, i.e. neither Not-a-Number
        !          1069: nor plus or minus infinity.
        !          1070: @end deftypefun
        !          1071:
        !          1072: @deftypefun void mpfr_reldiff (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !          1073: Compute the relative difference between @var{op1} and @var{op2}
        !          1074: and store the result in @var{rop}.
        !          1075: This function does not guarantee the exact rounding on the relative difference;
        !          1076: it just computes abs(@var{op1}@minus{}@var{op2})/@var{op1}, using the
        !          1077: rounding mode @var{rnd} for all operations.
        !          1078: @end deftypefun
        !          1079:
        !          1080: @deftypefun int mpfr_sgn (mpfr_t @var{op})
        !          1081: Return a positive value if @var{op} > 0, zero if @var{op} = 0,
        !          1082: and a negative value if @var{op} < 0.
        !          1083: Its result is not specified when @var{op} is NaN (Not-a-Number).
        !          1084: @end deftypefun
        !          1085:
        !          1086: @section Special Functions
        !          1087: @cindex Special functions
        !          1088:
        !          1089: @deftypefun int mpfr_log (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1090: Set @var{rop} to the natural logarithm of @var{op},
        !          1091: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1092: Return zero when the result is exact
        !          1093: (this occurs in fact only when @var{op} is 0, 1, or +infinity)
        !          1094: and a non-zero value otherwise (except for rounding to nearest,
        !          1095: the sign of the return value is that of @var{rop}-log(@var{op}).
        !          1096: @end deftypefun
        !          1097:
        !          1098: @deftypefun int mpfr_exp (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1099: Set @var{rop} to the exponential of @var{op},
        !          1100: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1101: Return zero when the result is exact
        !          1102: (this occurs in fact only when @var{op} is -infinity, 0, or +infinity),
        !          1103: a positive value when the result is greater than the exponential of @var{op},
        !          1104: and a negative value when it is smaller.
        !          1105: @end deftypefun
        !          1106:
        !          1107: @deftypefun int mpfr_exp2 (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1108: Set @var{rop} to 2 power of @var{op},
        !          1109: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1110: Return zero iff the result is exact (this occurs in fact only when @var{op}
        !          1111: is -infinity, 0, or +infinity),
        !          1112: a positive value when the result is greater than the exponential of @var{op},
        !          1113: and a negative value when it is smaller.
        !          1114: @end deftypefun
        !          1115:
        !          1116: @deftypefun int mpfr_cos (mpfr_t @var{cop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1117: @deftypefunx int mpfr_sin (mpfr_t @var{sop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1118: @deftypefunx int mpfr_tan (mpfr_t @var{top}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1119: Set @var{cop} to the cosine of @var{op}, @var{sop} to the sine of @var{op},
        !          1120: @var{top} to the tangent of @var{op}, rounded to the direction @var{rnd} with
        !          1121: the precision of @var{rop}. Return 0 iff the result is exact (this occurs
        !          1122: in fact only when @var{op} is 0 i.e. the sine is 0, the cosine is 1, and the
        !          1123: tangent is 0).
        !          1124: @end deftypefun
        !          1125:
        !          1126: @deftypefun int mpfr_sin_cos (mpfr_t @var{sop}, mpfr_t @var{cop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1127: Set simultaneously @var{sop} to the sine of @var{op} and
        !          1128:                    @var{cop} to the cosine of @var{op},
        !          1129: rounded to the direction @var{rnd} with their corresponding precisions.
        !          1130: Return 0 iff both results are exact.
        !          1131: @end deftypefun
        !          1132:
        !          1133: @deftypefun int mpfr_acos (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1134: @deftypefunx int mpfr_asin (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1135: @deftypefunx int mpfr_atan (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1136: Set @var{rop} to the arc-cosine, arc-sine or arc-tangent of @var{op},
        !          1137: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1138: Return 0 iff the result is exact.
        !          1139: @end deftypefun
        !          1140:
        !          1141: @deftypefun int mpfr_cosh (mpfr_t @var{cop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1142: @deftypefunx int mpfr_sinh (mpfr_t @var{sop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1143: @deftypefunx int mpfr_tanh (mpfr_t @var{top}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1144: Set @var{cop} to the hyperbolic cosine of @var{op},
        !          1145:     @var{sop} to the hyperbolic sine of @var{op},
        !          1146:     @var{top} to the hyperbolic tangent of @var{op},
        !          1147: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1148: Return 0 iff the result is exact (this occurs in fact only when @var{op} is 0
        !          1149: i.e. the result is 1).
        !          1150: @end deftypefun
        !          1151:
        !          1152: @deftypefun int mpfr_acosh (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1153: @deftypefunx int mpfr_asinh (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1154: @deftypefunx int mpfr_atanh (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1155: Set @var{rop} to the inverse hyperbolic cosine, sine or tangent of @var{op},
        !          1156: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1157: Return 0 iff the result is exact.
        !          1158: @end deftypefun
        !          1159:
        !          1160: @deftypefun int mpfr_fac_ui (mpfr_t @var{rop}, unsigned long int  @var{op}, mp_rnd_t @var{rnd})
        !          1161: Set @var{rop} to the factorial of the unsigned long int @var{op},
        !          1162: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1163: Return 0 iff the result is exact.
        !          1164: @end deftypefun
        !          1165:
        !          1166: @deftypefun int mpfr_log1p (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1167: Set @var{rop} to the logarithm of one plus @var{op},
        !          1168: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1169: Return 0 iff the result is exact (this occurs in fact only when @var{op} is 0
        !          1170: i.e. the result is 0).
        !          1171: @end deftypefun
        !          1172:
        !          1173: @deftypefun int mpfr_expm1 (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1174: Set @var{rop} to the exponential of @var{op} minus one,
        !          1175: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1176: Return 0 iff the result is exact (this occurs in fact only when @var{op} is 0
        !          1177: i.e. the result is 0).
        !          1178: @end deftypefun
        !          1179:
        !          1180: @deftypefun int mpfr_log2 (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1181: @deftypefunx int mpfr_log10 (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1182: Set @var{rop} to the log[t] (t=2 or 10)(log x / log t) of @var{op}, rounded to the direction @var{rnd} with the precision of @var{rop}. Return 0 iff the result is exact (this occurs in fact only when @var{op} is 1 i.e. the result is 0).
        !          1183: @end deftypefun
        !          1184:
        !          1185: @deftypefun int mpfr_fma (mpfr_t @var{rop}, mpfr_t @var{opx},mpfr_t @var{opy},mpfr_t @var{opz}, mp_rnd_t @var{rnd})
        !          1186: Set @var{rop} to @var{opx} * @var{opy} + @var{opz}, rounded to the direction
        !          1187: @var{rnd} with the precision of @var{rop}. Return 0 iff the result is exact,
        !          1188: a positive value if @var{rop} is larger than @var{opx} * @var{opy} + @var{opz},
        !          1189: and a negative value otherwise.
        !          1190: @end deftypefun
        !          1191:
        !          1192: @deftypefun void mpfr_agm (mpfr_t @var{rop}, mpfr_t @var{op1}, mpfr_t @var{op2}, mp_rnd_t @var{rnd})
        !          1193: Set @var{rop} to the arithmetic-geometric mean of @var{op1} and @var{op2},
        !          1194: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1195: @end deftypefun
        !          1196:
        !          1197: @deftypefun void mpfr_const_log2 (mpfr_t @var{rop}, mp_rnd_t @var{rnd})
        !          1198: Set @var{rop} to the logarithm of 2 rounded to the direction @var{rnd}
        !          1199: with the precision of @var{rop}. This function stores the computed
        !          1200: value to avoid another calculation if a lower or equal precision is
        !          1201: requested.
        !          1202: @end deftypefun
        !          1203:
        !          1204: @deftypefun void mpfr_const_pi (mpfr_t @var{rop}, mp_rnd_t @var{rnd})
        !          1205: Set @var{rop} to the value of Pi rounded to the direction @var{rnd}
        !          1206: with the precision of @var{rop}. This function uses the Borwein, Borwein,
        !          1207: Plouffe formula which directly gives the expansion of Pi in base 16.
        !          1208: @end deftypefun
        !          1209:
        !          1210: @deftypefun void mpfr_const_euler (mpfr_t @var{rop}, mp_rnd_t @var{rnd})
        !          1211: Set @var{rop} to the value of Euler's constant 0.577...
        !          1212: rounded to the direction @var{rnd} with the precision of @var{rop}.
        !          1213: @end deftypefun
        !          1214:
        !          1215: @node I/O of Floats, Miscellaneous Float Functions, Float Comparison, Floating-point Functions
        !          1216: @comment  node-name,  next,  previous,  up
        !          1217: @section Input and Output Functions
        !          1218: @cindex Float input and output functions
        !          1219: @cindex Input functions
        !          1220: @cindex Output functions
        !          1221: @cindex I/O functions
        !          1222:
        !          1223: Functions that perform input from a standard input/output
        !          1224: stream, and functions that output to
        !          1225: a standard input/output stream.
        !          1226: Passing a null pointer for a @var{stream} argument to any of
        !          1227: these functions will make them read from @code{stdin} and write to
        !          1228: @code{stdout}, respectively.
        !          1229:
        !          1230: When using any of these functions, it is a good idea to include @file{stdio.h}
        !          1231: before @file{mpfr.h}, since that will allow @file{mpfr.h} to define prototypes
        !          1232: for these functions.
        !          1233:
        !          1234: @deftypefun size_t mpfr_out_str (FILE *@var{stream}, int @var{base}, size_t @var{n_digits}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1235: Output @var{op} on stdio stream @var{stream}, as a string of digits in
        !          1236: base @var{base}, rounded to direction @var{rnd}.
        !          1237: The base may vary from 2 to 36.  Print at most
        !          1238: @var{n_digits} significant digits, or if @var{n_digits} is 0, the maximum
        !          1239: number of digits accurately representable by @var{op}.
        !          1240:
        !          1241: In addition to the significant digits, a decimal point at the right of the
        !          1242: first digit and a
        !          1243: trailing exponent, in the form @samp{eNNN}, are printed.  If @var{base}
        !          1244: is greater than 10, @samp{@@} will be used instead of @samp{e} as
        !          1245: exponent delimiter.
        !          1246:
        !          1247: Return the number of bytes written, or if an error occurred, return 0.
        !          1248: @end deftypefun
        !          1249:
        !          1250: @deftypefun size_t mpfr_inp_str (mpfr_t @var{rop}, FILE *@var{stream}, int @var{base}, mp_rnd_t @var{rnd})
        !          1251: Input a string in base @var{base} from stdio stream @var{stream},
        !          1252: rounded in direction @var{rnd}, and put the
        !          1253: read float in @var{rop}.  The string is of the form @samp{M@@N} or, if the
        !          1254: base is 10 or less, alternatively @samp{MeN} or @samp{MEN}.
        !          1255: @samp{M} is the mantissa and
        !          1256: @samp{N} is the exponent.  The mantissa is always in the specified base.  The
        !          1257: exponent is
        !          1258: @c either in the specified base or, if @var{base} is negative,
        !          1259: in decimal.
        !          1260:
        !          1261: The argument @var{base} may be in the range 2 to 36.
        !          1262: @c , or @minus{}36 to
        !          1263: @c @minus{}2.  Negative values are used to specify that the exponent is in
        !          1264: @c decimal.
        !          1265:
        !          1266: Unlike the corresponding @code{mpz} function, the base will not be determined
        !          1267: from the leading characters of the string if @var{base} is 0.  This is so that
        !          1268: numbers like @samp{0.23} are not interpreted as octal.
        !          1269:
        !          1270: Return the number of bytes read, or if an error occurred, return 0.
        !          1271: @end deftypefun
        !          1272:
        !          1273: @deftypefun void mpfr_print_binary (mpfr_t @var{float})
        !          1274: Output @var{float} on stdout
        !          1275: in raw binary format (the exponent is in decimal, yet).
        !          1276: The last bits from the least significant limb which do not belong to
        !          1277: the mantissa are printed between square brackets;
        !          1278: they should always be zero.
        !          1279: @end deftypefun
        !          1280:
        !          1281: @c @deftypefun void mpfr_inp_raw (mpfr_t @var{float}, FILE *@var{stream})
        !          1282: @c Input from stdio stream @var{stream} in the format written by
        !          1283: @c @code{mpfr_out_raw}, and put the result in @var{float}.
        !          1284: @c @end deftypefun
        !          1285:
        !          1286:
        !          1287: @node Miscellaneous Float Functions,  , I/O of Floats, Floating-point Functions
        !          1288: @comment  node-name,  next,  previous,  up
        !          1289: @section Miscellaneous Functions
        !          1290: @cindex Miscellaneous float functions
        !          1291:
        !          1292: @deftypefun int mpfr_rint (mpfr_t @var{rop}, mpfr_t @var{op}, mp_rnd_t @var{rnd})
        !          1293: @deftypefunx int mpfr_ceil (mpfr_t @var{rop}, mpfr_t @var{op})
        !          1294: @deftypefunx int mpfr_floor (mpfr_t @var{rop}, mpfr_t @var{op})
        !          1295: @deftypefunx int mpfr_round (mpfr_t @var{rop}, mpfr_t @var{op})
        !          1296: @deftypefunx int mpfr_trunc (mpfr_t @var{rop}, mpfr_t @var{op})
        !          1297: Set @var{rop} to @var{op} rounded to an integer. @code{mpfr_ceil} rounds
        !          1298: to the next higher representable integer, @code{mpfr_floor} to the next lower,
        !          1299: @code{mpfr_round} to the nearest representable integer, rounding halfway cases
        !          1300: away from zero, and @code{mpfr_trunc} to the representable integer towards
        !          1301: zero. @code{mpfr_rint} behaves like one of these four functions, depending
        !          1302: on the rounding mode.
        !          1303: The returned value is zero when the result is exact, positive when it is
        !          1304: greater than the original value of @var{op}, and negative when it is smaller.
        !          1305: More precisely, the returned value is 0 when @var{op} is an integer
        !          1306: representable in @var{rop}, 1 or @minus{}1 when @var{op} is an integer
        !          1307: that is not representable in @var{rop}, 2 or @minus{}2 when @var{op} is
        !          1308: not an integer.
        !          1309: @end deftypefun
        !          1310:
        !          1311: @deftypefun void mpfr_urandomb (mpfr_t @var{rop}, gmp_randstate_t @var{state})
        !          1312: Generate a uniformly distributed random float in the interval 0 <= X < 1.
        !          1313: @end deftypefun
        !          1314:
        !          1315: @deftypefun void mpfr_random (mpfr_t @var{rop})
        !          1316: Generate a uniformly distributed random float in the interval 0 <= X < 1.
        !          1317: @end deftypefun
        !          1318:
        !          1319: @deftypefun void mpfr_random2 (mpfr_t @var{rop}, mp_size_t @var{max_size}, mp_exp_t @var{max_exp})
        !          1320: Generate a random float of at most @var{max_size} limbs, with long strings of
        !          1321: zeros and ones in the binary representation. The exponent of the number is in
        !          1322: the interval @minus{}@var{exp} to @var{exp}.
        !          1323: This function is useful for
        !          1324: testing functions and algorithms, since this kind of random numbers have
        !          1325: proven to be more likely to trigger corner-case bugs.
        !          1326: Negative random numbers are generated when @var{max_size} is negative.
        !          1327: @end deftypefun
        !          1328:
        !          1329: @c @deftypefun size_t mpfr_size (mpfr_t @var{op})
        !          1330: @c Return the size of @var{op} measured in number of limbs.  If @var{op} is
        !          1331: @c zero, the returned value will be zero.  (@xref{Nomenclature}, for an
        !          1332: @c explanation of the concept @dfn{limb}.)
        !          1333: @c
        !          1334: @c @strong{This function is obsolete.  It will disappear from future MP
        !          1335: @c releases.}
        !          1336: @c @end deftypefun
        !          1337:
        !          1338: @section Internals
        !          1339:
        !          1340: These types and
        !          1341: functions were mainly designed for the implementation of @code{mpfr},
        !          1342: but may be useful for users too.
        !          1343: However no upward compatibility is guaranteed.
        !          1344: You need to include @code{mpfr-impl.h} to use them.
        !          1345:
        !          1346: The @code{mpfr_t} type consists of four fields.
        !          1347: The @code{_mpfr_prec} field is used to store the precision of
        !          1348: the variable (in bits); this is not less than 2.
        !          1349:
        !          1350: The @code{_mpfr_size} field is used to store the number of
        !          1351: allocated limbs, with the high bits reserved to store
        !          1352: the sign (bit 31), the NaN flag (bit 30),
        !          1353: and the Infinity flag (bit 29);
        !          1354: thus bits 0 to 28 remain for the number of allocated limbs, with a maximal
        !          1355: value of 536870911.
        !          1356: A NaN is indicated by the NaN flag set, and no other fields are
        !          1357: relevant.
        !          1358: An Infinity is indicated by the NaN flag clear and the Inf flag set;
        !          1359: the sign bit of an Infinity indicates the sign, the limb data
        !          1360: and the exponent are not relevant.
        !          1361:
        !          1362: The @code{_mpfr_exp} field stores the exponent.
        !          1363: An exponent of 0 means a radix point just above the most significant
        !          1364: limb.  Non-zero values are a multiplier @math{2^n} relative to that
        !          1365: point.
        !          1366:
        !          1367: Finally, the @code{_mpfr_d} is a pointer to the limbs, least
        !          1368: significant limbs stored first.
        !          1369: The number zero is represented with its most significant limb set to zero,
        !          1370: i.e. @code{_mpfr_d[n-1]} where
        !          1371: n=ceil(@code{_mpfr_prec}/@code{BITS_PER_MP_LIMB}).
        !          1372: The number of limbs in use is controlled by @code{_mpfr_prec}, namely
        !          1373: ceil(@code{_mpfr_prec}/@code{BITS_PER_MP_LIMB}).
        !          1374: Zero is represented by the most significant limb being zero, other
        !          1375: limb data and the exponent are not relevant
        !          1376: ("not relevant" implies that the corresponding objects may contain
        !          1377: invalid values, thus should not be evaluated even if
        !          1378: they are not taken into account).
        !          1379: Non-zero values always have the most significant bit of the most
        !          1380: significant limb set to 1.  When the precision is not a whole number
        !          1381: of limbs, the excess bits at the low end of the data are zero.
        !          1382: When the precision has been lowered by @code{mpfr_set_prec}, the space
        !          1383: allocated at @code{_mpfr_d} remains as given by @code{_mpfr_size}, but
        !          1384: @code{_mpfr_prec} indicates how much of that space is actually used.
        !          1385:
        !          1386: @deftypefun int mpfr_add_one_ulp (mpfr_t @var{x}, mp_rnd_t @var{rnd})
        !          1387: Add one unit in last place (ulp) to @var{x} if @var{x} is finite
        !          1388: and positive, subtract one ulp if @var{x} is finite and negative;
        !          1389: otherwise, @var{x} is not changed.
        !          1390: The return value is zero unless an overflow occurs, in which case the
        !          1391: @code{mpfr_add_one_ulp} function behaves like a conventional addition.
        !          1392: @end deftypefun
        !          1393:
        !          1394: @deftypefun int mpfr_sub_one_ulp (mpfr_t @var{x}, mp_rnd_t @var{rnd})
        !          1395: Subtract one ulp to @var{x} if @var{x} is finite and positive, add one
        !          1396: ulp if @var{x} is finite and negative; otherwise, @var{x} is not changed.
        !          1397: The return value is zero unless an underflow occurs, in which case the
        !          1398: @code{mpfr_sub_one_ulp} function behaves like a conventional subtraction.
        !          1399: @end deftypefun
        !          1400:
        !          1401: @deftypefun int mpfr_can_round (mpfr_t @var{b}, mp_exp_t @var{err}, mp_rnd_t @var{rnd1}, mp_rnd_t @var{rnd2}, mp_prec_t @var{prec})
        !          1402: Assuming @var{b} is an approximation of an unknown number
        !          1403: @var{x} in direction @var{rnd1} with error at most two to the power
        !          1404: E(b)-@var{err} where E(b) is the exponent of
        !          1405: @var{b}, returns 1 if one is able to round exactly @var{x} to precision
        !          1406: @var{prec} with direction @var{rnd2},
        !          1407:    and 0 otherwise. This function @strong{does not modify} its arguments.
        !          1408: @end deftypefun
        !          1409:
        !          1410: @node Contributors, References, Floating-point Functions, Top
        !          1411: @comment  node-name,  next,  previous,  up
        !          1412: @unnumbered Contributors
        !          1413:
        !          1414: The main developers consist of Guillaume Hanrot, Vincent Lefèvre and
        !          1415: Paul Zimmermann.
        !          1416:
        !          1417: We would like to thank Jean-Michel Muller and Joris van der Hoeven for very
        !          1418: fruitful discussions at the beginning of that project, Torbjorn Granlund
        !          1419: and Kevin Ryde
        !          1420: for their help about design issues
        !          1421: and their suggestions for an easy integration into GNU MP,
        !          1422: and Nathalie Revol for her careful reading of this documentation.
        !          1423:
        !          1424: Sylvie Boldo from ENS-Lyon, France,
        !          1425: contributed the functions @code{mpfr_agm} and @code{mpfr_log}.
        !          1426: Emmanuel Jeandel, from ENS-Lyon too,
        !          1427: contributed the generic hypergeometric code in
        !          1428: @code{generic.c}, as well as the @code{mpfr_exp3},
        !          1429: a first implementation of the sine and cosine,
        !          1430: and improved versions of
        !          1431: @code{mpfr_const_log2} and @code{mpfr_const_pi}.
        !          1432: Mathieu Dutour contributed the functions @code{mpfr_atan} and @code{mpfr_asin},
        !          1433: David Daney contributed the hyperbolic and inverse hyperbolic functions,
        !          1434: the base-2 exponential, and the factorial function. Fabrice Rouillier
        !          1435: contributed the original version of @file{mul_ui.c}, the @file{gmp_op.c}
        !          1436: file, and helped to the Windows porting.
        !          1437:
        !          1438: @node References, Concept Index, Contributors, Top
        !          1439: @comment  node-name,  next,  previous,  up
        !          1440: @unnumbered References
        !          1441:
        !          1442: @itemize @bullet
        !          1443:
        !          1444: @item
        !          1445: Torbjorn Granlund, "GNU MP: The GNU Multiple Precision Arithmetic Library",
        !          1446:   version 4.0.1, 2001.
        !          1447:
        !          1448: @item
        !          1449: IEEE standard for binary floating-point arithmetic, Technical Report
        !          1450: ANSI-IEEE Standard 754-1985, New York, 1985.
        !          1451: Approved March 21, 1985: IEEE Standards Board; approved July 26,
        !          1452:   1985: American National Standards Institute, 18 pages.
        !          1453:
        !          1454: @item
        !          1455: Donald E. Knuth, "The Art of Computer Programming", vol 2,
        !          1456: "Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981.
        !          1457:
        !          1458: @end itemize
        !          1459:
        !          1460: @node Concept Index, Function Index, References, Top
        !          1461: @comment  node-name,  next,  previous,  up
        !          1462: @unnumbered Concept Index
        !          1463: @printindex cp
        !          1464:
        !          1465: @node Function Index,  , Concept Index, Top
        !          1466: @comment  node-name,  next,  previous,  up
        !          1467: @unnumbered Function and Type Index
        !          1468: @printindex fn
        !          1469:
        !          1470: @contents
        !          1471: @bye

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>