123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263 |
- This is mpfr.info, produced by makeinfo version 6.3 from mpfr.texi.
- This manual documents how to install and use the Multiple Precision
- Floating-Point Reliable Library, version 3.1.5.
- Copyright 1991, 1993-2016 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
- Texts. A copy of the license is included in *note GNU Free
- Documentation License::.
- INFO-DIR-SECTION Software libraries
- START-INFO-DIR-ENTRY
- * mpfr: (mpfr). Multiple Precision Floating-Point Reliable Library.
- END-INFO-DIR-ENTRY
- File: mpfr.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir)
- GNU MPFR
- ********
- This manual documents how to install and use the Multiple Precision
- Floating-Point Reliable Library, version 3.1.5.
- Copyright 1991, 1993-2016 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
- Texts. A copy of the license is included in *note GNU Free
- Documentation License::.
- * Menu:
- * Copying:: MPFR Copying Conditions (LGPL).
- * Introduction to MPFR:: Brief introduction to GNU MPFR.
- * Installing MPFR:: How to configure and compile the MPFR library.
- * Reporting Bugs:: How to usefully report bugs.
- * MPFR Basics:: What every MPFR user should now.
- * MPFR Interface:: MPFR functions and macros.
- * API Compatibility:: API compatibility with previous MPFR versions.
- * Contributors::
- * References::
- * GNU Free Documentation License::
- * Concept Index::
- * Function and Type Index::
- File: mpfr.info, Node: Copying, Next: Introduction to MPFR, Prev: Top, Up: Top
- MPFR Copying Conditions
- ***********************
- The GNU MPFR library (or MPFR for short) is “free”; this means that
- everyone is free to use it and free to redistribute it on a free basis.
- The library is not in the public domain; it is copyrighted and there are
- restrictions on its distribution, but these restrictions are designed to
- permit everything that a good cooperating citizen would want to do.
- What is not allowed is to try to prevent others from further sharing any
- version of this library that they might get from you.
- Specifically, we want to make sure that you have the right to give
- away copies of the library, that you receive source code or else can get
- it if you want it, that you can change this library or use pieces of it
- in new free programs, and that you know you can do these things.
- To make sure that everyone has such rights, we have to forbid you to
- deprive anyone else of these rights. For example, if you distribute
- copies of the GNU MPFR library, you must give the recipients all the
- rights that you have. You must make sure that they, too, receive or can
- get the source code. And you must tell them their rights.
- Also, for our own protection, we must make certain that everyone
- finds out that there is no warranty for the GNU MPFR library. If it is
- modified by someone else and passed on, we want their recipients to know
- that what they have is not what we distributed, so that any problems
- introduced by others will not reflect on our reputation.
- The precise conditions of the license for the GNU MPFR library are
- found in the Lesser General Public License that accompanies the source
- code. See the file COPYING.LESSER.
- File: mpfr.info, Node: Introduction to MPFR, Next: Installing MPFR, Prev: Copying, Up: Top
- 1 Introduction to MPFR
- **********************
- MPFR is a portable library written in C for arbitrary precision
- arithmetic on floating-point numbers. It is based on the GNU MP
- library. It aims to provide a class of floating-point numbers with
- precise semantics. The main characteristics of MPFR, which make it
- differ from most arbitrary precision floating-point software tools, are:
- • the MPFR code is portable, i.e., the result of any operation does
- not depend on the machine word size ‘mp_bits_per_limb’ (64 on most
- current processors);
- • the precision in bits can be set _exactly_ to any valid value for
- each variable (including very small precision);
- • MPFR provides the four rounding modes from the IEEE 754-1985
- standard, plus away-from-zero, as well as for basic operations as
- for other mathematical functions.
- In particular, with a precision of 53 bits, MPFR is able to exactly
- reproduce all computations with double-precision machine floating-point
- numbers (e.g., ‘double’ type in C, with a C implementation that
- rigorously follows Annex F of the ISO C99 standard and ‘FP_CONTRACT’
- pragma set to ‘OFF’) on the four arithmetic operations and the square
- root, except the default exponent range is much wider and subnormal
- numbers are not implemented (but can be emulated).
- This version of MPFR is released under the GNU Lesser General Public
- License, version 3 or any later version. It is permitted to link MPFR
- to most non-free programs, as long as when distributing them the MPFR
- source code and a means to re-link with a modified MPFR library is
- provided.
- 1.1 How to Use This Manual
- ==========================
- Everyone should read *note MPFR Basics::. If you need to install the
- library yourself, you need to read *note Installing MPFR::, too. To use
- the library you will need to refer to *note MPFR Interface::.
- The rest of the manual can be used for later reference, although it
- is probably a good idea to glance through it.
- File: mpfr.info, Node: Installing MPFR, Next: Reporting Bugs, Prev: Introduction to MPFR, Up: Top
- 2 Installing MPFR
- *****************
- The MPFR library is already installed on some GNU/Linux distributions,
- but the development files necessary to the compilation such as ‘mpfr.h’
- are not always present. To check that MPFR is fully installed on your
- computer, you can check the presence of the file ‘mpfr.h’ in
- ‘/usr/include’, or try to compile a small program having ‘#include
- <mpfr.h>’ (since ‘mpfr.h’ may be installed somewhere else). For
- instance, you can try to compile:
- #include <stdio.h>
- #include <mpfr.h>
- int main (void)
- {
- printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
- mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
- MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
- return 0;
- }
- with
- cc -o version version.c -lmpfr -lgmp
- and if you get errors whose first line looks like
- version.c:2:19: error: mpfr.h: No such file or directory
- then MPFR is probably not installed. Running this program will give you
- the MPFR version.
- If MPFR is not installed on your computer, or if you want to install
- a different version, please follow the steps below.
- 2.1 How to Install
- ==================
- Here are the steps needed to install the library on Unix systems (more
- details are provided in the ‘INSTALL’ file):
- 1. To build MPFR, you first have to install GNU MP (version 4.1 or
- higher) on your computer. You need a C compiler, preferably GCC,
- but any reasonable compiler should work. And you need the standard
- Unix ‘make’ command, plus some other standard Unix utility
- commands.
- Then, in the MPFR build directory, type the following commands.
- 2. ‘./configure’
- This will prepare the build and setup the options according to your
- system. You can give options to specify the install directories
- (instead of the default ‘/usr/local’), threading support, and so
- on. See the ‘INSTALL’ file and/or the output of ‘./configure
- --help’ for more information, in particular if you get error
- messages.
- 3. ‘make’
- This will compile MPFR, and create a library archive file
- ‘libmpfr.a’. On most platforms, a dynamic library will be produced
- too.
- 4. ‘make check’
- This will make sure that MPFR was built correctly. If any test
- fails, information about this failure can be found in the
- ‘tests/test-suite.log’ file. If you want the contents of this file
- to be automatically output in case of failure, you can set the
- ‘VERBOSE’ environment variable to 1 before running ‘make check’,
- for instance by typing:
- ‘VERBOSE=1 make check’
- In case of failure, you may want to check whether the problem is
- already known. If not, please report this failure to the MPFR
- mailing-list ‘mpfr@inria.fr’. For details, *Note Reporting Bugs::.
- 5. ‘make install’
- This will copy the files ‘mpfr.h’ and ‘mpf2mpfr.h’ to the directory
- ‘/usr/local/include’, the library files (‘libmpfr.a’ and possibly
- others) to the directory ‘/usr/local/lib’, the file ‘mpfr.info’ to
- the directory ‘/usr/local/share/info’, and some other documentation
- files to the directory ‘/usr/local/share/doc/mpfr’ (or if you
- passed the ‘--prefix’ option to ‘configure’, using the prefix
- directory given as argument to ‘--prefix’ instead of ‘/usr/local’).
- 2.2 Other ‘make’ Targets
- ========================
- There are some other useful make targets:
- • ‘mpfr.info’ or ‘info’
- Create or update an info version of the manual, in ‘mpfr.info’.
- This file is already provided in the MPFR archives.
- • ‘mpfr.pdf’ or ‘pdf’
- Create a PDF version of the manual, in ‘mpfr.pdf’.
- • ‘mpfr.dvi’ or ‘dvi’
- Create a DVI version of the manual, in ‘mpfr.dvi’.
- • ‘mpfr.ps’ or ‘ps’
- Create a Postscript version of the manual, in ‘mpfr.ps’.
- • ‘mpfr.html’ or ‘html’
- Create a HTML version of the manual, in several pages in the
- directory ‘doc/mpfr.html’; if you want only one output HTML file,
- then type ‘makeinfo --html --no-split mpfr.texi’ from the ‘doc’
- directory instead.
- • ‘clean’
- Delete all object files and archive files, but not the
- configuration files.
- • ‘distclean’
- Delete all generated files not included in the distribution.
- • ‘uninstall’
- Delete all files copied by ‘make install’.
- 2.3 Build Problems
- ==================
- In case of problem, please read the ‘INSTALL’ file carefully before
- reporting a bug, in particular section “In case of problem”. Some
- problems are due to bad configuration on the user side (not specific to
- MPFR). Problems are also mentioned in the FAQ
- <http://www.mpfr.org/faq.html>.
- Please report problems to the MPFR mailing-list ‘mpfr@inria.fr’.
- *Note Reporting Bugs::. Some bug fixes are available on the MPFR 3.1.5
- web page <http://www.mpfr.org/mpfr-3.1.5/>.
- 2.4 Getting the Latest Version of MPFR
- ======================================
- The latest version of MPFR is available from
- <ftp://ftp.gnu.org/gnu/mpfr/> or <http://www.mpfr.org/>.
- File: mpfr.info, Node: Reporting Bugs, Next: MPFR Basics, Prev: Installing MPFR, Up: Top
- 3 Reporting Bugs
- ****************
- If you think you have found a bug in the MPFR library, first have a look
- on the MPFR 3.1.5 web page <http://www.mpfr.org/mpfr-3.1.5/> and the FAQ
- <http://www.mpfr.org/faq.html>: perhaps this bug is already known, in
- which case you may find there a workaround for it. You might also look
- in the archives of the MPFR mailing-list:
- <https://sympa.inria.fr/sympa/arc/mpfr>. Otherwise, please investigate
- and report it. We have made this library available to you, and it is
- not to ask too much from you, to ask you to report the bugs that you
- find.
- There are a few things you should think about when you put your bug
- report together.
- You have to send us a test case that makes it possible for us to
- reproduce the bug, i.e., a small self-content program, using no other
- library than MPFR. Include instructions on how to run the test case.
- You also have to explain what is wrong; if you get a crash, or if the
- results you get are incorrect and in that case, in what way.
- Please include compiler version information in your bug report. This
- can be extracted using ‘cc -V’ on some machines, or, if you’re using
- GCC, ‘gcc -v’. Also, include the output from ‘uname -a’ and the MPFR
- version (the GMP version may be useful too). If you get a failure while
- running ‘make’ or ‘make check’, please include the ‘config.log’ file in
- your bug report, and in case of test failure, the ‘tests/test-suite.log’
- file too.
- If your bug report is good, we will do our best to help you to get a
- corrected version of the library; if the bug report is poor, we will not
- do anything about it (aside of chiding you to send better bug reports).
- Send your bug report to the MPFR mailing-list ‘mpfr@inria.fr’.
- If you think something in this manual is unclear, or downright
- incorrect, or if the language needs to be improved, please send a note
- to the same address.
- File: mpfr.info, Node: MPFR Basics, Next: MPFR Interface, Prev: Reporting Bugs, Up: Top
- 4 MPFR Basics
- *************
- * Menu:
- * Headers and Libraries::
- * Nomenclature and Types::
- * MPFR Variable Conventions::
- * Rounding Modes::
- * Floating-Point Values on Special Numbers::
- * Exceptions::
- * Memory Handling::
- File: mpfr.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: MPFR Basics, Up: MPFR Basics
- 4.1 Headers and Libraries
- =========================
- All declarations needed to use MPFR are collected in the include file
- ‘mpfr.h’. It is designed to work with both C and C++ compilers. You
- should include that file in any program using the MPFR library:
- #include <mpfr.h>
- Note however that prototypes for MPFR functions with ‘FILE *’
- parameters are provided only if ‘<stdio.h>’ is included too (before
- ‘mpfr.h’):
- #include <stdio.h>
- #include <mpfr.h>
- Likewise ‘<stdarg.h>’ (or ‘<varargs.h>’) is required for prototypes
- with ‘va_list’ parameters, such as ‘mpfr_vprintf’.
- And for any functions using ‘intmax_t’, you must include ‘<stdint.h>’
- or ‘<inttypes.h>’ before ‘mpfr.h’, to allow ‘mpfr.h’ to define
- prototypes for these functions. Moreover, users of C++ compilers under
- some platforms may need to define ‘MPFR_USE_INTMAX_T’ (and should do it
- for portability) before ‘mpfr.h’ has been included; of course, it is
- possible to do that on the command line, e.g., with
- ‘-DMPFR_USE_INTMAX_T’.
- Note: If ‘mpfr.h’ and/or ‘gmp.h’ (used by ‘mpfr.h’) are included
- several times (possibly from another header file), ‘<stdio.h>’ and/or
- ‘<stdarg.h>’ (or ‘<varargs.h>’) should be included *before the first
- inclusion* of ‘mpfr.h’ or ‘gmp.h’. Alternatively, you can define
- ‘MPFR_USE_FILE’ (for MPFR I/O functions) and/or ‘MPFR_USE_VA_LIST’ (for
- MPFR functions with ‘va_list’ parameters) anywhere before the last
- inclusion of ‘mpfr.h’. As a consequence, if your file is a public
- header that includes ‘mpfr.h’, you need to use the latter method.
- When calling a MPFR macro, it is not allowed to have previously
- defined a macro with the same name as some keywords (currently ‘do’,
- ‘while’ and ‘sizeof’).
- You can avoid the use of MPFR macros encapsulating functions by
- defining the ‘MPFR_USE_NO_MACRO’ macro before ‘mpfr.h’ is included. In
- general this should not be necessary, but this can be useful when
- debugging user code: with some macros, the compiler may emit spurious
- warnings with some warning options, and macros can prevent some
- prototype checking.
- All programs using MPFR must link against both ‘libmpfr’ and ‘libgmp’
- libraries. On a typical Unix-like system this can be done with ‘-lmpfr
- -lgmp’ (in that order), for example:
- gcc myprogram.c -lmpfr -lgmp
- MPFR is built using Libtool and an application can use that to link
- if desired, *note GNU Libtool: (libtool)Top.
- If MPFR has been installed to a non-standard location, then it may be
- necessary to set up environment variables such as ‘C_INCLUDE_PATH’ and
- ‘LIBRARY_PATH’, or use ‘-I’ and ‘-L’ compiler options, in order to point
- to the right directories. For a shared library, it may also be
- necessary to set up some sort of run-time library path (e.g.,
- ‘LD_LIBRARY_PATH’) on some systems. Please read the ‘INSTALL’ file for
- additional information.
- File: mpfr.info, Node: Nomenclature and Types, Next: MPFR Variable Conventions, Prev: Headers and Libraries, Up: MPFR Basics
- 4.2 Nomenclature and Types
- ==========================
- A “floating-point number”, or “float” for short, is an arbitrary
- precision significand (also called mantissa) with a limited precision
- exponent. The C data type for such objects is ‘mpfr_t’ (internally
- defined as a one-element array of a structure, and ‘mpfr_ptr’ is the C
- data type representing a pointer to this structure). A floating-point
- number can have three special values: Not-a-Number (NaN) or plus or
- minus Infinity. NaN represents an uninitialized object, the result of
- an invalid operation (like 0 divided by 0), or a value that cannot be
- determined (like +Infinity minus +Infinity). Moreover, like in the IEEE
- 754 standard, zero is signed, i.e., there are both +0 and −0; the
- behavior is the same as in the IEEE 754 standard and it is generalized
- to the other functions supported by MPFR. Unless documented otherwise,
- the sign bit of a NaN is unspecified.
- The “precision” is the number of bits used to represent the significand
- of a floating-point number; the corresponding C data type is
- ‘mpfr_prec_t’. The precision can be any integer between ‘MPFR_PREC_MIN’
- and ‘MPFR_PREC_MAX’. In the current implementation, ‘MPFR_PREC_MIN’ is
- equal to 2.
- Warning! MPFR needs to increase the precision internally, in order
- to provide accurate results (and in particular, correct rounding). Do
- not attempt to set the precision to any value near ‘MPFR_PREC_MAX’,
- otherwise MPFR will abort due to an assertion failure. Moreover, you
- may reach some memory limit on your platform, in which case the program
- may abort, crash or have undefined behavior (depending on your C
- implementation).
- The “rounding mode” specifies the way to round the result of a
- floating-point operation, in case the exact result can not be
- represented exactly in the destination significand; the corresponding C
- data type is ‘mpfr_rnd_t’.
- File: mpfr.info, Node: MPFR Variable Conventions, Next: Rounding Modes, Prev: Nomenclature and Types, Up: MPFR Basics
- 4.3 MPFR Variable Conventions
- =============================
- Before you can assign to an MPFR variable, you need to initialize it by
- calling one of the special initialization functions. When you’re done
- with a variable, you need to clear it out, using one of the functions
- for that purpose. A variable should only be initialized once, or at
- least cleared out between each initialization. After a variable has
- been initialized, it may be assigned to any number of times. For
- efficiency reasons, avoid to initialize and clear out a variable in
- loops. Instead, initialize it before entering the loop, and clear it
- out after the loop has exited. You do not need to be concerned about
- allocating additional space for MPFR variables, since any variable has a
- significand of fixed size. Hence unless you change its precision, or
- clear and reinitialize it, a floating-point variable will have the same
- allocated space during all its life.
- As a general rule, all MPFR functions expect output arguments before
- input arguments. This notation is based on an analogy with the
- assignment operator. MPFR allows you to use the same variable for both
- input and output in the same expression. For example, the main function
- for floating-point multiplication, ‘mpfr_mul’, can be used like this:
- ‘mpfr_mul (x, x, x, rnd)’. This computes the square of X with rounding
- mode ‘rnd’ and puts the result back in X.
- File: mpfr.info, Node: Rounding Modes, Next: Floating-Point Values on Special Numbers, Prev: MPFR Variable Conventions, Up: MPFR Basics
- 4.4 Rounding Modes
- ==================
- The following five rounding modes are supported:
- • ‘MPFR_RNDN’: round to nearest (roundTiesToEven in IEEE 754-2008),
- • ‘MPFR_RNDZ’: round toward zero (roundTowardZero in IEEE 754-2008),
- • ‘MPFR_RNDU’: round toward plus infinity (roundTowardPositive in
- IEEE 754-2008),
- • ‘MPFR_RNDD’: round toward minus infinity (roundTowardNegative in
- IEEE 754-2008),
- • ‘MPFR_RNDA’: round away from zero.
- The ‘round to nearest’ mode works as in the IEEE 754 standard: in
- case the number to be rounded lies exactly in the middle of two
- representable numbers, it is rounded to the one with the least
- significant bit set to zero. For example, the number 2.5, which is
- represented by (10.1) in binary, is rounded to (10.0)=2 with a precision
- of two bits, and not to (11.0)=3. This rule avoids the “drift”
- phenomenon mentioned by Knuth in volume 2 of The Art of Computer
- Programming (Section 4.2.2).
- Most MPFR functions take as first argument the destination variable,
- as second and following arguments the input variables, as last argument
- a rounding mode, and have a return value of type ‘int’, called the
- “ternary value”. The value stored in the destination variable is
- correctly rounded, i.e., MPFR behaves as if it computed the result with
- an infinite precision, then rounded it to the precision of this
- variable. The input variables are regarded as exact (in particular,
- their precision does not affect the result).
- As a consequence, in case of a non-zero real rounded result, the
- error on the result is less or equal to 1/2 ulp (unit in the last place)
- of that result in the rounding to nearest mode, and less than 1 ulp of
- that result in the directed rounding modes (a ulp is the weight of the
- least significant represented bit of the result after rounding).
- Unless documented otherwise, functions returning an ‘int’ return a
- ternary value. If the ternary value is zero, it means that the value
- stored in the destination variable is the exact result of the
- corresponding mathematical function. If the ternary value is positive
- (resp. negative), it means the value stored in the destination variable
- is greater (resp. lower) than the exact result. For example with the
- ‘MPFR_RNDU’ rounding mode, the ternary value is usually positive, except
- when the result is exact, in which case it is zero. In the case of an
- infinite result, it is considered as inexact when it was obtained by
- overflow, and exact otherwise. A NaN result (Not-a-Number) always
- corresponds to an exact return value. The opposite of a returned
- ternary value is guaranteed to be representable in an ‘int’.
- Unless documented otherwise, functions returning as result the value
- ‘1’ (or any other value specified in this manual) for special cases
- (like ‘acos(0)’) yield an overflow or an underflow if that value is not
- representable in the current exponent range.
- File: mpfr.info, Node: Floating-Point Values on Special Numbers, Next: Exceptions, Prev: Rounding Modes, Up: MPFR Basics
- 4.5 Floating-Point Values on Special Numbers
- ============================================
- This section specifies the floating-point values (of type ‘mpfr_t’)
- returned by MPFR functions (where by “returned” we mean here the
- modified value of the destination object, which should not be mixed with
- the ternary return value of type ‘int’ of those functions). For
- functions returning several values (like ‘mpfr_sin_cos’), the rules
- apply to each result separately.
- Functions can have one or several input arguments. An input point is
- a mapping from these input arguments to the set of the MPFR numbers.
- When none of its components are NaN, an input point can also be seen as
- a tuple in the extended real numbers (the set of the real numbers with
- both infinities).
- When the input point is in the domain of the mathematical function,
- the result is rounded as described in Section “Rounding Modes” (but see
- below for the specification of the sign of an exact zero). Otherwise
- the general rules from this section apply unless stated otherwise in the
- description of the MPFR function (*note MPFR Interface::).
- When the input point is not in the domain of the mathematical
- function but is in its closure in the extended real numbers and the
- function can be extended by continuity, the result is the obtained
- limit. Examples: ‘mpfr_hypot’ on (+Inf,0) gives +Inf. But ‘mpfr_pow’
- cannot be defined on (1,+Inf) using this rule, as one can find sequences
- (X_N,Y_N) such that X_N goes to 1, Y_N goes to +Inf and X_N to the Y_N
- goes to any positive value when N goes to the infinity.
- When the input point is in the closure of the domain of the
- mathematical function and an input argument is +0 (resp. −0), one
- considers the limit when the corresponding argument approaches 0 from
- above (resp. below), if possible. If the limit is not defined (e.g.,
- ‘mpfr_sqrt’ and ‘mpfr_log’ on −0), the behavior is specified in the
- description of the MPFR function, but must be consistent with the rule
- from the above paragraph (e.g., ‘mpfr_log’ on ±0 gives −Inf).
- When the result is equal to 0, its sign is determined by considering
- the limit as if the input point were not in the domain: If one
- approaches 0 from above (resp. below), the result is +0 (resp. −0); for
- example, ‘mpfr_sin’ on −0 gives −0 and ‘mpfr_acos’ on 1 gives +0 (in all
- rounding modes). In the other cases, the sign is specified in the
- description of the MPFR function; for example ‘mpfr_max’ on −0 and +0
- gives +0.
- When the input point is not in the closure of the domain of the
- function, the result is NaN. Example: ‘mpfr_sqrt’ on −17 gives NaN.
- When an input argument is NaN, the result is NaN, possibly except
- when a partial function is constant on the finite floating-point
- numbers; such a case is always explicitly specified in *note MPFR
- Interface::. Example: ‘mpfr_hypot’ on (NaN,0) gives NaN, but
- ‘mpfr_hypot’ on (NaN,+Inf) gives +Inf (as specified in *note Special
- Functions::), since for any finite or infinite input X, ‘mpfr_hypot’ on
- (X,+Inf) gives +Inf.
- File: mpfr.info, Node: Exceptions, Next: Memory Handling, Prev: Floating-Point Values on Special Numbers, Up: MPFR Basics
- 4.6 Exceptions
- ==============
- MPFR supports 6 exception types:
- • Underflow: An underflow occurs when the exact result of a function
- is a non-zero real number and the result obtained after the
- rounding, assuming an unbounded exponent range (for the rounding),
- has an exponent smaller than the minimum value of the current
- exponent range. (In the round-to-nearest mode, the halfway case is
- rounded toward zero.)
- Note: This is not the single possible definition of the underflow.
- MPFR chooses to consider the underflow _after_ rounding. The
- underflow before rounding can also be defined. For instance,
- consider a function that has the exact result 7 multiplied by two
- to the power E−4, where E is the smallest exponent (for a
- significand between 1/2 and 1), with a 2-bit target precision and
- rounding toward plus infinity. The exact result has the exponent
- E−1. With the underflow before rounding, such a function call
- would yield an underflow, as E−1 is outside the current exponent
- range. However, MPFR first considers the rounded result assuming
- an unbounded exponent range. The exact result cannot be
- represented exactly in precision 2, and here, it is rounded to 0.5
- times 2 to E, which is representable in the current exponent range.
- As a consequence, this will not yield an underflow in MPFR.
- • Overflow: An overflow occurs when the exact result of a function is
- a non-zero real number and the result obtained after the rounding,
- assuming an unbounded exponent range (for the rounding), has an
- exponent larger than the maximum value of the current exponent
- range. In the round-to-nearest mode, the result is infinite.
- Note: unlike the underflow case, there is only one possible
- definition of overflow here.
- • Divide-by-zero: An exact infinite result is obtained from finite
- inputs.
- • NaN: A NaN exception occurs when the result of a function is NaN.
- • Inexact: An inexact exception occurs when the result of a function
- cannot be represented exactly and must be rounded.
- • Range error: A range exception occurs when a function that does not
- return a MPFR number (such as comparisons and conversions to an
- integer) has an invalid result (e.g., an argument is NaN in
- ‘mpfr_cmp’, or a conversion to an integer cannot be represented in
- the target type).
- MPFR has a global flag for each exception, which can be cleared, set
- or tested by functions described in *note Exception Related Functions::.
- Differences with the ISO C99 standard:
- • In C, only quiet NaNs are specified, and a NaN propagation does not
- raise an invalid exception. Unless explicitly stated otherwise,
- MPFR sets the NaN flag whenever a NaN is generated, even when a NaN
- is propagated (e.g., in NaN + NaN), as if all NaNs were signaling.
- • An invalid exception in C corresponds to either a NaN exception or
- a range error in MPFR.
- File: mpfr.info, Node: Memory Handling, Prev: Exceptions, Up: MPFR Basics
- 4.7 Memory Handling
- ===================
- MPFR functions may create caches, e.g., when computing constants such as
- Pi, either because the user has called a function like ‘mpfr_const_pi’
- directly or because such a function was called internally by the MPFR
- library itself to compute some other function.
- At any time, the user can free the various caches with
- ‘mpfr_free_cache’. It is strongly advised to do that before terminating
- a thread, or before exiting when using tools like ‘valgrind’ (to avoid
- memory leaks being reported).
- MPFR internal data such as flags, the exponent range, the default
- precision and rounding mode, and caches (i.e., data that are not
- accessed via parameters) are either global (if MPFR has not been
- compiled as thread safe) or per-thread (thread local storage, TLS). The
- initial values of TLS data after a thread is created entirely depend on
- the compiler and thread implementation (MPFR simply does a conventional
- variable initialization, the variables being declared with an
- implementation-defined TLS specifier).
- File: mpfr.info, Node: MPFR Interface, Next: API Compatibility, Prev: MPFR Basics, Up: Top
- 5 MPFR Interface
- ****************
- The floating-point functions expect arguments of type ‘mpfr_t’.
- The MPFR floating-point functions have an interface that is similar
- to the GNU MP functions. The function prefix for floating-point
- operations is ‘mpfr_’.
- The user has to specify the precision of each variable. A
- computation that assigns a variable will take place with the precision
- of the assigned variable; the cost of that computation should not depend
- on the precision of variables used as input (on average).
- The semantics of a calculation in MPFR is specified as follows:
- Compute the requested operation exactly (with “infinite accuracy”), and
- round the result to the precision of the destination variable, with the
- given rounding mode. The MPFR floating-point functions are intended to
- be a smooth extension of the IEEE 754 arithmetic. The results obtained
- on a given computer are identical to those obtained on a computer with a
- different word size, or with a different compiler or operating system.
- MPFR _does not keep track_ of the accuracy of a computation. This is
- left to the user or to a higher layer (for example the MPFI library for
- interval arithmetic). As a consequence, if two variables are used to
- store only a few significant bits, and their product is stored in a
- variable with large precision, then MPFR will still compute the result
- with full precision.
- The value of the standard C macro ‘errno’ may be set to non-zero by
- any MPFR function or macro, whether or not there is an error.
- * Menu:
- * Initialization Functions::
- * Assignment Functions::
- * Combined Initialization and Assignment Functions::
- * Conversion Functions::
- * Basic Arithmetic Functions::
- * Comparison Functions::
- * Special Functions::
- * Input and Output Functions::
- * Formatted Output Functions::
- * Integer Related Functions::
- * Rounding Related Functions::
- * Miscellaneous Functions::
- * Exception Related Functions::
- * Compatibility with MPF::
- * Custom Interface::
- * Internals::
- File: mpfr.info, Node: Initialization Functions, Next: Assignment Functions, Prev: MPFR Interface, Up: MPFR Interface
- 5.1 Initialization Functions
- ============================
- An ‘mpfr_t’ object must be initialized before storing the first value in
- it. The functions ‘mpfr_init’ and ‘mpfr_init2’ are used for that
- purpose.
- -- Function: void mpfr_init2 (mpfr_t X, mpfr_prec_t PREC)
- Initialize X, set its precision to be *exactly* PREC bits and its
- value to NaN. (Warning: the corresponding MPF function initializes
- to zero instead.)
- Normally, a variable should be initialized once only or at least be
- cleared, using ‘mpfr_clear’, between initializations. To change
- the precision of a variable which has already been initialized, use
- ‘mpfr_set_prec’. The precision PREC must be an integer between
- ‘MPFR_PREC_MIN’ and ‘MPFR_PREC_MAX’ (otherwise the behavior is
- undefined).
- -- Function: void mpfr_inits2 (mpfr_prec_t PREC, mpfr_t X, ...)
- Initialize all the ‘mpfr_t’ variables of the given variable
- argument ‘va_list’, set their precision to be *exactly* PREC bits
- and their value to NaN. See ‘mpfr_init2’ for more details. The
- ‘va_list’ is assumed to be composed only of type ‘mpfr_t’ (or
- equivalently ‘mpfr_ptr’). It begins from X, and ends when it
- encounters a null pointer (whose type must also be ‘mpfr_ptr’).
- -- Function: void mpfr_clear (mpfr_t X)
- Free the space occupied by the significand of X. Make sure to call
- this function for all ‘mpfr_t’ variables when you are done with
- them.
- -- Function: void mpfr_clears (mpfr_t X, ...)
- Free the space occupied by all the ‘mpfr_t’ variables of the given
- ‘va_list’. See ‘mpfr_clear’ for more details. The ‘va_list’ is
- assumed to be composed only of type ‘mpfr_t’ (or equivalently
- ‘mpfr_ptr’). It begins from X, and ends when it encounters a null
- pointer (whose type must also be ‘mpfr_ptr’).
- Here is an example of how to use multiple initialization functions
- (since ‘NULL’ is not necessarily defined in this context, we use
- ‘(mpfr_ptr) 0’ instead, but ‘(mpfr_ptr) NULL’ is also correct).
- {
- mpfr_t x, y, z, t;
- mpfr_inits2 (256, x, y, z, t, (mpfr_ptr) 0);
- ...
- mpfr_clears (x, y, z, t, (mpfr_ptr) 0);
- }
- -- Function: void mpfr_init (mpfr_t X)
- Initialize X, set its precision to the default precision, and set
- its value to NaN. The default precision can be changed by a call
- to ‘mpfr_set_default_prec’.
- Warning! In a given program, some other libraries might change the
- default precision and not restore it. Thus it is safer to use
- ‘mpfr_init2’.
- -- Function: void mpfr_inits (mpfr_t X, ...)
- Initialize all the ‘mpfr_t’ variables of the given ‘va_list’, set
- their precision to the default precision and their value to NaN.
- See ‘mpfr_init’ for more details. The ‘va_list’ is assumed to be
- composed only of type ‘mpfr_t’ (or equivalently ‘mpfr_ptr’). It
- begins from X, and ends when it encounters a null pointer (whose
- type must also be ‘mpfr_ptr’).
- Warning! In a given program, some other libraries might change the
- default precision and not restore it. Thus it is safer to use
- ‘mpfr_inits2’.
- -- Macro: MPFR_DECL_INIT (NAME, PREC)
- This macro declares NAME as an automatic variable of type ‘mpfr_t’,
- initializes it and sets its precision to be *exactly* PREC bits and
- its value to NaN. NAME must be a valid identifier. You must use
- this macro in the declaration section. This macro is much faster
- than using ‘mpfr_init2’ but has some drawbacks:
- • You *must not* call ‘mpfr_clear’ with variables created with
- this macro (the storage is allocated at the point of
- declaration and deallocated when the brace-level is exited).
- • You *cannot* change their precision.
- • You *should not* create variables with huge precision with
- this macro.
- • Your compiler must support ‘Non-Constant Initializers’
- (standard in C++ and ISO C99) and ‘Token Pasting’ (standard in
- ISO C89). If PREC is not a constant expression, your compiler
- must support ‘variable-length automatic arrays’ (standard in
- ISO C99). GCC 2.95.3 and above supports all these features.
- If you compile your program with GCC in C89 mode and with
- ‘-pedantic’, you may want to define the ‘MPFR_USE_EXTENSION’
- macro to avoid warnings due to the ‘MPFR_DECL_INIT’
- implementation.
- -- Function: void mpfr_set_default_prec (mpfr_prec_t PREC)
- Set the default precision to be *exactly* PREC bits, where PREC can
- be any integer between ‘MPFR_PREC_MIN’ and ‘MPFR_PREC_MAX’. The
- precision of a variable means the number of bits used to store its
- significand. All subsequent calls to ‘mpfr_init’ or ‘mpfr_inits’
- will use this precision, but previously initialized variables are
- unaffected. The default precision is set to 53 bits initially.
- Note: when MPFR is built with the ‘--enable-thread-safe’ configure
- option, the default precision is local to each thread. *Note
- Memory Handling::, for more information.
- -- Function: mpfr_prec_t mpfr_get_default_prec (void)
- Return the current default MPFR precision in bits. See the
- documentation of ‘mpfr_set_default_prec’.
- Here is an example on how to initialize floating-point variables:
- {
- mpfr_t x, y;
- mpfr_init (x); /* use default precision */
- mpfr_init2 (y, 256); /* precision _exactly_ 256 bits */
- ...
- /* When the program is about to exit, do ... */
- mpfr_clear (x);
- mpfr_clear (y);
- mpfr_free_cache (); /* free the cache for constants like pi */
- }
- The following functions are useful for changing the precision during
- a calculation. A typical use would be for adjusting the precision
- gradually in iterative algorithms like Newton-Raphson, making the
- computation precision closely match the actual accurate part of the
- numbers.
- -- Function: void mpfr_set_prec (mpfr_t X, mpfr_prec_t PREC)
- Reset the precision of X to be *exactly* PREC bits, and set its
- value to NaN. The previous value stored in X is lost. It is
- equivalent to a call to ‘mpfr_clear(x)’ followed by a call to
- ‘mpfr_init2(x, prec)’, but more efficient as no allocation is done
- in case the current allocated space for the significand of X is
- enough. The precision PREC can be any integer between
- ‘MPFR_PREC_MIN’ and ‘MPFR_PREC_MAX’. In case you want to keep the
- previous value stored in X, use ‘mpfr_prec_round’ instead.
- Warning! You must not use this function if X was initialized with
- ‘MPFR_DECL_INIT’ or with ‘mpfr_custom_init_set’ (*note Custom
- Interface::).
- -- Function: mpfr_prec_t mpfr_get_prec (mpfr_t X)
- Return the precision of X, i.e., the number of bits used to store
- its significand.
- File: mpfr.info, Node: Assignment Functions, Next: Combined Initialization and Assignment Functions, Prev: Initialization Functions, Up: MPFR Interface
- 5.2 Assignment Functions
- ========================
- These functions assign new values to already initialized floats (*note
- Initialization Functions::).
- -- Function: int mpfr_set (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_ui (mpfr_t ROP, unsigned long int OP,
- mpfr_rnd_t RND)
- -- Function: int mpfr_set_si (mpfr_t ROP, long int OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_uj (mpfr_t ROP, uintmax_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_sj (mpfr_t ROP, intmax_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_flt (mpfr_t ROP, float OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_d (mpfr_t ROP, double OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_ld (mpfr_t ROP, long double OP, mpfr_rnd_t
- RND)
- -- Function: int mpfr_set_decimal64 (mpfr_t ROP, _Decimal64 OP,
- mpfr_rnd_t RND)
- -- Function: int mpfr_set_z (mpfr_t ROP, mpz_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_q (mpfr_t ROP, mpq_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_set_f (mpfr_t ROP, mpf_t OP, mpfr_rnd_t RND)
- Set the value of ROP from OP, rounded toward the given direction
- RND. Note that the input 0 is converted to +0 by ‘mpfr_set_ui’,
- ‘mpfr_set_si’, ‘mpfr_set_uj’, ‘mpfr_set_sj’, ‘mpfr_set_z’,
- ‘mpfr_set_q’ and ‘mpfr_set_f’, regardless of the rounding mode. If
- the system does not support the IEEE 754 standard, ‘mpfr_set_flt’,
- ‘mpfr_set_d’, ‘mpfr_set_ld’ and ‘mpfr_set_decimal64’ might not
- preserve the signed zeros. The ‘mpfr_set_decimal64’ function is
- built only with the configure option ‘--enable-decimal-float’,
- which also requires ‘--with-gmp-build’, and when the compiler or
- system provides the ‘_Decimal64’ data type (recent versions of GCC
- support this data type); to use ‘mpfr_set_decimal64’, one should
- define the macro ‘MPFR_WANT_DECIMAL_FLOATS’ before including
- ‘mpfr.h’. ‘mpfr_set_q’ might fail if the numerator (or the
- denominator) can not be represented as a ‘mpfr_t’.
- Note: If you want to store a floating-point constant to a ‘mpfr_t’,
- you should use ‘mpfr_set_str’ (or one of the MPFR constant
- functions, such as ‘mpfr_const_pi’ for Pi) instead of
- ‘mpfr_set_flt’, ‘mpfr_set_d’, ‘mpfr_set_ld’ or
- ‘mpfr_set_decimal64’. Otherwise the floating-point constant will
- be first converted into a reduced-precision (e.g., 53-bit) binary
- (or decimal, for ‘mpfr_set_decimal64’) number before MPFR can work
- with it.
- -- Function: int mpfr_set_ui_2exp (mpfr_t ROP, unsigned long int OP,
- mpfr_exp_t E, mpfr_rnd_t RND)
- -- Function: int mpfr_set_si_2exp (mpfr_t ROP, long int OP, mpfr_exp_t
- E, mpfr_rnd_t RND)
- -- Function: int mpfr_set_uj_2exp (mpfr_t ROP, uintmax_t OP, intmax_t
- E, mpfr_rnd_t RND)
- -- Function: int mpfr_set_sj_2exp (mpfr_t ROP, intmax_t OP, intmax_t E,
- mpfr_rnd_t RND)
- -- Function: int mpfr_set_z_2exp (mpfr_t ROP, mpz_t OP, mpfr_exp_t E,
- mpfr_rnd_t RND)
- Set the value of ROP from OP multiplied by two to the power E,
- rounded toward the given direction RND. Note that the input 0 is
- converted to +0.
- -- Function: int mpfr_set_str (mpfr_t ROP, const char *S, int BASE,
- mpfr_rnd_t RND)
- Set ROP to the value of the string S in base BASE, rounded in the
- direction RND. See the documentation of ‘mpfr_strtofr’ for a
- detailed description of the valid string formats. Contrary to
- ‘mpfr_strtofr’, ‘mpfr_set_str’ requires the _whole_ string to
- represent a valid floating-point number.
- The meaning of the return value differs from other MPFR functions:
- it is 0 if the entire string up to the final null character is a
- valid number in base BASE; otherwise it is −1, and ROP may have
- changed (users interested in the *note ternary value:: should use
- ‘mpfr_strtofr’ instead).
- Note: it is preferable to use ‘mpfr_strtofr’ if one wants to
- distinguish between an infinite ROP value coming from an infinite S
- or from an overflow.
- -- Function: int mpfr_strtofr (mpfr_t ROP, const char *NPTR, char
- **ENDPTR, int BASE, mpfr_rnd_t RND)
- Read a floating-point number from a string NPTR in base BASE,
- rounded in the direction RND; BASE must be either 0 (to detect the
- base, as described below) or a number from 2 to 62 (otherwise the
- behavior is undefined). If NPTR starts with valid data, the result
- is stored in ROP and ‘*ENDPTR’ points to the character just after
- the valid data (if ENDPTR is not a null pointer); otherwise ROP is
- set to zero (for consistency with ‘strtod’) and the value of NPTR
- is stored in the location referenced by ENDPTR (if ENDPTR is not a
- null pointer). The usual ternary value is returned.
- Parsing follows the standard C ‘strtod’ function with some
- extensions. After optional leading whitespace, one has a subject
- sequence consisting of an optional sign (‘+’ or ‘-’), and either
- numeric data or special data. The subject sequence is defined as
- the longest initial subsequence of the input string, starting with
- the first non-whitespace character, that is of the expected form.
- The form of numeric data is a non-empty sequence of significand
- digits with an optional decimal point, and an optional exponent
- consisting of an exponent prefix followed by an optional sign and a
- non-empty sequence of decimal digits. A significand digit is
- either a decimal digit or a Latin letter (62 possible characters),
- with ‘A’ = 10, ‘B’ = 11, ..., ‘Z’ = 35; case is ignored in bases
- less or equal to 36, in bases larger than 36, ‘a’ = 36, ‘b’ = 37,
- ..., ‘z’ = 61. The value of a significand digit must be strictly
- less than the base. The decimal point can be either the one
- defined by the current locale or the period (the first one is
- accepted for consistency with the C standard and the practice, the
- second one is accepted to allow the programmer to provide MPFR
- numbers from strings in a way that does not depend on the current
- locale). The exponent prefix can be ‘e’ or ‘E’ for bases up to 10,
- or ‘@’ in any base; it indicates a multiplication by a power of the
- base. In bases 2 and 16, the exponent prefix can also be ‘p’ or
- ‘P’, in which case the exponent, called _binary exponent_,
- indicates a multiplication by a power of 2 instead of the base
- (there is a difference only for base 16); in base 16 for example
- ‘1p2’ represents 4 whereas ‘1@2’ represents 256. The value of an
- exponent is always written in base 10.
- If the argument BASE is 0, then the base is automatically detected
- as follows. If the significand starts with ‘0b’ or ‘0B’, base 2 is
- assumed. If the significand starts with ‘0x’ or ‘0X’, base 16 is
- assumed. Otherwise base 10 is assumed.
- Note: The exponent (if present) must contain at least a digit.
- Otherwise the possible exponent prefix and sign are not part of the
- number (which ends with the significand). Similarly, if ‘0b’,
- ‘0B’, ‘0x’ or ‘0X’ is not followed by a binary/hexadecimal digit,
- then the subject sequence stops at the character ‘0’, thus 0 is
- read.
- Special data (for infinities and NaN) can be ‘@inf@’ or
- ‘@nan@(n-char-sequence-opt)’, and if BASE <= 16, it can also be
- ‘infinity’, ‘inf’, ‘nan’ or ‘nan(n-char-sequence-opt)’, all case
- insensitive. A ‘n-char-sequence-opt’ is a possibly empty string
- containing only digits, Latin letters and the underscore (0, 1, 2,
- ..., 9, a, b, ..., z, A, B, ..., Z, _). Note: one has an optional
- sign for all data, even NaN. For example, ‘-@nAn@(This_Is_Not_17)’
- is a valid representation for NaN in base 17.
- -- Function: void mpfr_set_nan (mpfr_t X)
- -- Function: void mpfr_set_inf (mpfr_t X, int SIGN)
- -- Function: void mpfr_set_zero (mpfr_t X, int SIGN)
- Set the variable X to NaN (Not-a-Number), infinity or zero
- respectively. In ‘mpfr_set_inf’ or ‘mpfr_set_zero’, X is set to
- plus infinity or plus zero iff SIGN is nonnegative; in
- ‘mpfr_set_nan’, the sign bit of the result is unspecified.
- -- Function: void mpfr_swap (mpfr_t X, mpfr_t Y)
- Swap the structures pointed to by X and Y. In particular, the
- values are exchanged without rounding (this may be different from
- three ‘mpfr_set’ calls using a third auxiliary variable).
- Warning! Since the precisions are exchanged, this will affect
- future assignments. Moreover, since the significand pointers are
- also exchanged, you must not use this function if the allocation
- method used for X and/or Y does not permit it. This is the case
- when X and/or Y were declared and initialized with
- ‘MPFR_DECL_INIT’, and possibly with ‘mpfr_custom_init_set’ (*note
- Custom Interface::).
- File: mpfr.info, Node: Combined Initialization and Assignment Functions, Next: Conversion Functions, Prev: Assignment Functions, Up: MPFR Interface
- 5.3 Combined Initialization and Assignment Functions
- ====================================================
- -- Macro: int mpfr_init_set (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Macro: int mpfr_init_set_ui (mpfr_t ROP, unsigned long int OP,
- mpfr_rnd_t RND)
- -- Macro: int mpfr_init_set_si (mpfr_t ROP, long int OP, mpfr_rnd_t
- RND)
- -- Macro: int mpfr_init_set_d (mpfr_t ROP, double OP, mpfr_rnd_t RND)
- -- Macro: int mpfr_init_set_ld (mpfr_t ROP, long double OP, mpfr_rnd_t
- RND)
- -- Macro: int mpfr_init_set_z (mpfr_t ROP, mpz_t OP, mpfr_rnd_t RND)
- -- Macro: int mpfr_init_set_q (mpfr_t ROP, mpq_t OP, mpfr_rnd_t RND)
- -- Macro: int mpfr_init_set_f (mpfr_t ROP, mpf_t OP, mpfr_rnd_t RND)
- Initialize ROP and set its value from OP, rounded in the direction
- RND. The precision of ROP will be taken from the active default
- precision, as set by ‘mpfr_set_default_prec’.
- -- Function: int mpfr_init_set_str (mpfr_t X, const char *S, int BASE,
- mpfr_rnd_t RND)
- Initialize X and set its value from the string S in base BASE,
- rounded in the direction RND. See ‘mpfr_set_str’.
- File: mpfr.info, Node: Conversion Functions, Next: Basic Arithmetic Functions, Prev: Combined Initialization and Assignment Functions, Up: MPFR Interface
- 5.4 Conversion Functions
- ========================
- -- Function: float mpfr_get_flt (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: double mpfr_get_d (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: long double mpfr_get_ld (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: _Decimal64 mpfr_get_decimal64 (mpfr_t OP, mpfr_rnd_t RND)
- Convert OP to a ‘float’ (respectively ‘double’, ‘long double’ or
- ‘_Decimal64’), using the rounding mode RND. If OP is NaN, some
- fixed NaN (either quiet or signaling) or the result of 0.0/0.0 is
- returned. If OP is ±Inf, an infinity of the same sign or the
- result of ±1.0/0.0 is returned. If OP is zero, these functions
- return a zero, trying to preserve its sign, if possible. The
- ‘mpfr_get_decimal64’ function is built only under some conditions:
- see the documentation of ‘mpfr_set_decimal64’.
- -- Function: long mpfr_get_si (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: unsigned long mpfr_get_ui (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: intmax_t mpfr_get_sj (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: uintmax_t mpfr_get_uj (mpfr_t OP, mpfr_rnd_t RND)
- Convert OP to a ‘long’, an ‘unsigned long’, an ‘intmax_t’ or an
- ‘uintmax_t’ (respectively) after rounding it with respect to RND.
- If OP is NaN, 0 is returned and the _erange_ flag is set. If OP is
- too big for the return type, the function returns the maximum or
- the minimum of the corresponding C type, depending on the direction
- of the overflow; the _erange_ flag is set too. See also
- ‘mpfr_fits_slong_p’, ‘mpfr_fits_ulong_p’, ‘mpfr_fits_intmax_p’ and
- ‘mpfr_fits_uintmax_p’.
- -- Function: double mpfr_get_d_2exp (long *EXP, mpfr_t OP, mpfr_rnd_t
- RND)
- -- Function: long double mpfr_get_ld_2exp (long *EXP, mpfr_t OP,
- mpfr_rnd_t RND)
- Return D and set EXP (formally, the value pointed to by EXP) such
- that 0.5<=abs(D)<1 and D times 2 raised to EXP equals OP rounded to
- double (resp. long double) precision, using the given rounding
- mode. If OP is zero, then a zero of the same sign (or an unsigned
- zero, if the implementation does not have signed zeros) is
- returned, and EXP is set to 0. If OP is NaN or an infinity, then
- the corresponding double precision (resp. long-double precision)
- value is returned, and EXP is undefined.
- -- Function: int mpfr_frexp (mpfr_exp_t *EXP, mpfr_t Y, mpfr_t X,
- mpfr_rnd_t RND)
- Set EXP (formally, the value pointed to by EXP) and Y such that
- 0.5<=abs(Y)<1 and Y times 2 raised to EXP equals X rounded to the
- precision of Y, using the given rounding mode. If X is zero, then
- Y is set to a zero of the same sign and EXP is set to 0. If X is
- NaN or an infinity, then Y is set to the same value and EXP is
- undefined.
- -- Function: mpfr_exp_t mpfr_get_z_2exp (mpz_t ROP, mpfr_t OP)
- Put the scaled significand of OP (regarded as an integer, with the
- precision of OP) into ROP, and return the exponent EXP (which may
- be outside the current exponent range) such that OP exactly equals
- ROP times 2 raised to the power EXP. If OP is zero, the minimal
- exponent ‘emin’ is returned. If OP is NaN or an infinity, the
- _erange_ flag is set, ROP is set to 0, and the the minimal exponent
- ‘emin’ is returned. The returned exponent may be less than the
- minimal exponent ‘emin’ of MPFR numbers in the current exponent
- range; in case the exponent is not representable in the
- ‘mpfr_exp_t’ type, the _erange_ flag is set and the minimal value
- of the ‘mpfr_exp_t’ type is returned.
- -- Function: int mpfr_get_z (mpz_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Convert OP to a ‘mpz_t’, after rounding it with respect to RND. If
- OP is NaN or an infinity, the _erange_ flag is set, ROP is set to
- 0, and 0 is returned.
- -- Function: int mpfr_get_f (mpf_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Convert OP to a ‘mpf_t’, after rounding it with respect to RND.
- The _erange_ flag is set if OP is NaN or an infinity, which do not
- exist in MPF. If OP is NaN, then ROP is undefined. If OP is +Inf
- (resp. −Inf), then ROP is set to the maximum (resp. minimum) value
- in the precision of the MPF number; if a future MPF version
- supports infinities, this behavior will be considered incorrect and
- will change (portable programs should assume that ROP is set either
- to this finite number or to an infinite number). Note that since
- MPFR currently has the same exponent type as MPF (but not with the
- same radix), the range of values is much larger in MPF than in
- MPFR, so that an overflow or underflow is not possible.
- -- Function: char * mpfr_get_str (char *STR, mpfr_exp_t *EXPPTR, int B,
- size_t N, mpfr_t OP, mpfr_rnd_t RND)
- Convert OP to a string of digits in base B, with rounding in the
- direction RND, where N is either zero (see below) or the number of
- significant digits output in the string; in the latter case, N must
- be greater or equal to 2. The base may vary from 2 to 62;
- otherwise the function does nothing and immediately returns a null
- pointer. If the input number is an ordinary number, the exponent
- is written through the pointer EXPPTR (for input 0, the current
- minimal exponent is written); the type ‘mpfr_exp_t’ is large enough
- to hold the exponent in all cases.
- The generated string is a fraction, with an implicit radix point
- immediately to the left of the first digit. For example, the
- number −3.1416 would be returned as "−31416" in the string and 1
- written at EXPPTR. If RND is to nearest, and OP is exactly in the
- middle of two consecutive possible outputs, the one with an even
- significand is chosen, where both significands are considered with
- the exponent of OP. Note that for an odd base, this may not
- correspond to an even last digit: for example with 2 digits in base
- 7, (14) and a half is rounded to (15) which is 12 in decimal, (16)
- and a half is rounded to (20) which is 14 in decimal, and (26) and
- a half is rounded to (26) which is 20 in decimal.
- If N is zero, the number of digits of the significand is chosen
- large enough so that re-reading the printed value with the same
- precision, assuming both output and input use rounding to nearest,
- will recover the original value of OP. More precisely, in most
- cases, the chosen precision of STR is the minimal precision m
- depending only on P = PREC(OP) and B that satisfies the above
- property, i.e., m = 1 + ceil(P*log(2)/log(B)), with P replaced by
- P−1 if B is a power of 2, but in some very rare cases, it might be
- m+1 (the smallest case for bases up to 62 is when P equals
- 186564318007 for bases 7 and 49).
- If STR is a null pointer, space for the significand is allocated
- using the current allocation function and a pointer to the string
- is returned (unless the base is invalid). To free the returned
- string, you must use ‘mpfr_free_str’.
- If STR is not a null pointer, it should point to a block of storage
- large enough for the significand, i.e., at least ‘max(N + 2, 7)’.
- The extra two bytes are for a possible minus sign, and for the
- terminating null character, and the value 7 accounts for ‘-@Inf@’
- plus the terminating null character. The pointer to the string STR
- is returned (unless the base is invalid).
- Note: The NaN and inexact flags are currently not set when need be;
- this will be fixed in future versions. Programmers should
- currently assume that whether the flags are set by this function is
- unspecified.
- -- Function: void mpfr_free_str (char *STR)
- Free a string allocated by ‘mpfr_get_str’ using the current
- unallocation function. The block is assumed to be ‘strlen(STR)+1’
- bytes. For more information about how it is done: *note
- (gmp.info)Custom Allocation::.
- -- Function: int mpfr_fits_ulong_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_slong_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_uint_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_sint_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_ushort_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_sshort_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_uintmax_p (mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_fits_intmax_p (mpfr_t OP, mpfr_rnd_t RND)
- Return non-zero if OP would fit in the respective C data type,
- respectively ‘unsigned long’, ‘long’, ‘unsigned int’, ‘int’,
- ‘unsigned short’, ‘short’, ‘uintmax_t’, ‘intmax_t’, when rounded to
- an integer in the direction RND.
- File: mpfr.info, Node: Basic Arithmetic Functions, Next: Comparison Functions, Prev: Conversion Functions, Up: MPFR Interface
- 5.5 Basic Arithmetic Functions
- ==============================
- -- Function: int mpfr_add (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_add_ui (mpfr_t ROP, mpfr_t OP1, unsigned long int
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_add_si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_add_d (mpfr_t ROP, mpfr_t OP1, double OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_add_z (mpfr_t ROP, mpfr_t OP1, mpz_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_add_q (mpfr_t ROP, mpfr_t OP1, mpq_t OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1 + OP2 rounded in the direction RND. The IEEE-754
- rules are used, in particular for signed zeros. But for types
- having no signed zeros, 0 is considered unsigned (i.e., (+0) + 0 =
- (+0) and (−0) + 0 = (−0)). The ‘mpfr_add_d’ function assumes that
- the radix of the ‘double’ type is a power of 2, with a precision at
- most that declared by the C implementation (macro
- ‘IEEE_DBL_MANT_DIG’, and if not defined 53 bits).
- -- Function: int mpfr_sub (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_ui_sub (mpfr_t ROP, unsigned long int OP1, mpfr_t
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_sub_ui (mpfr_t ROP, mpfr_t OP1, unsigned long int
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_si_sub (mpfr_t ROP, long int OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_sub_si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_d_sub (mpfr_t ROP, double OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_sub_d (mpfr_t ROP, mpfr_t OP1, double OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_z_sub (mpfr_t ROP, mpz_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_sub_z (mpfr_t ROP, mpfr_t OP1, mpz_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_sub_q (mpfr_t ROP, mpfr_t OP1, mpq_t OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1 - OP2 rounded in the direction RND. The IEEE-754
- rules are used, in particular for signed zeros. But for types
- having no signed zeros, 0 is considered unsigned (i.e., (+0) − 0 =
- (+0), (−0) − 0 = (−0), 0 − (+0) = (−0) and 0 − (−0) = (+0)). The
- same restrictions than for ‘mpfr_add_d’ apply to ‘mpfr_d_sub’ and
- ‘mpfr_sub_d’.
- -- Function: int mpfr_mul (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_mul_ui (mpfr_t ROP, mpfr_t OP1, unsigned long int
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_mul_si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_mul_d (mpfr_t ROP, mpfr_t OP1, double OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_mul_z (mpfr_t ROP, mpfr_t OP1, mpz_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_mul_q (mpfr_t ROP, mpfr_t OP1, mpq_t OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1 times OP2 rounded in the direction RND. When a
- result is zero, its sign is the product of the signs of the
- operands (for types having no signed zeros, 0 is considered
- positive). The same restrictions than for ‘mpfr_add_d’ apply to
- ‘mpfr_mul_d’.
- -- Function: int mpfr_sqr (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the square of OP rounded in the direction RND.
- -- Function: int mpfr_div (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_ui_div (mpfr_t ROP, unsigned long int OP1, mpfr_t
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_div_ui (mpfr_t ROP, mpfr_t OP1, unsigned long int
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_si_div (mpfr_t ROP, long int OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_div_si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_d_div (mpfr_t ROP, double OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_div_d (mpfr_t ROP, mpfr_t OP1, double OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_div_z (mpfr_t ROP, mpfr_t OP1, mpz_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_div_q (mpfr_t ROP, mpfr_t OP1, mpq_t OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1/OP2 rounded in the direction RND. When a result is
- zero, its sign is the product of the signs of the operands (for
- types having no signed zeros, 0 is considered positive). The same
- restrictions than for ‘mpfr_add_d’ apply to ‘mpfr_d_div’ and
- ‘mpfr_div_d’.
- -- Function: int mpfr_sqrt (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_sqrt_ui (mpfr_t ROP, unsigned long int OP,
- mpfr_rnd_t RND)
- Set ROP to the square root of OP rounded in the direction RND. Set
- ROP to −0 if OP is −0, to be consistent with the IEEE 754 standard.
- Set ROP to NaN if OP is negative.
- -- Function: int mpfr_rec_sqrt (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the reciprocal square root of OP rounded in the
- direction RND. Set ROP to +Inf if OP is ±0, +0 if OP is +Inf, and
- NaN if OP is negative. Warning! Therefore the result on −0 is
- different from the one of the rSqrt function recommended by the
- IEEE 754-2008 standard (Section 9.2.1), which is −Inf instead of
- +Inf.
- -- Function: int mpfr_cbrt (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_root (mpfr_t ROP, mpfr_t OP, unsigned long int K,
- mpfr_rnd_t RND)
- Set ROP to the cubic root (resp. the Kth root) of OP rounded in the
- direction RND. For K odd (resp. even) and OP negative (including
- −Inf), set ROP to a negative number (resp. NaN). The Kth root of
- −0 is defined to be −0, whatever the parity of K.
- -- Function: int mpfr_pow (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_pow_ui (mpfr_t ROP, mpfr_t OP1, unsigned long int
- OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_pow_si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_pow_z (mpfr_t ROP, mpfr_t OP1, mpz_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_ui_pow_ui (mpfr_t ROP, unsigned long int OP1,
- unsigned long int OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_ui_pow (mpfr_t ROP, unsigned long int OP1, mpfr_t
- OP2, mpfr_rnd_t RND)
- Set ROP to OP1 raised to OP2, rounded in the direction RND.
- Special values are handled as described in the ISO C99 and IEEE
- 754-2008 standards for the ‘pow’ function:
- • ‘pow(±0, Y)’ returns plus or minus infinity for Y a negative
- odd integer.
- • ‘pow(±0, Y)’ returns plus infinity for Y negative and not an
- odd integer.
- • ‘pow(±0, Y)’ returns plus or minus zero for Y a positive odd
- integer.
- • ‘pow(±0, Y)’ returns plus zero for Y positive and not an odd
- integer.
- • ‘pow(-1, ±Inf)’ returns 1.
- • ‘pow(+1, Y)’ returns 1 for any Y, even a NaN.
- • ‘pow(X, ±0)’ returns 1 for any X, even a NaN.
- • ‘pow(X, Y)’ returns NaN for finite negative X and finite
- non-integer Y.
- • ‘pow(X, -Inf)’ returns plus infinity for 0 < abs(x) < 1, and
- plus zero for abs(x) > 1.
- • ‘pow(X, +Inf)’ returns plus zero for 0 < abs(x) < 1, and plus
- infinity for abs(x) > 1.
- • ‘pow(-Inf, Y)’ returns minus zero for Y a negative odd
- integer.
- • ‘pow(-Inf, Y)’ returns plus zero for Y negative and not an odd
- integer.
- • ‘pow(-Inf, Y)’ returns minus infinity for Y a positive odd
- integer.
- • ‘pow(-Inf, Y)’ returns plus infinity for Y positive and not an
- odd integer.
- • ‘pow(+Inf, Y)’ returns plus zero for Y negative, and plus
- infinity for Y positive.
- -- Function: int mpfr_neg (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_abs (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to -OP and the absolute value of OP respectively, rounded
- in the direction RND. Just changes or adjusts the sign if ROP and
- OP are the same variable, otherwise a rounding might occur if the
- precision of ROP is less than that of OP.
- -- Function: int mpfr_dim (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- Set ROP to the positive difference of OP1 and OP2, i.e., OP1 - OP2
- rounded in the direction RND if OP1 > OP2, +0 if OP1 <= OP2, and
- NaN if OP1 or OP2 is NaN.
- -- Function: int mpfr_mul_2ui (mpfr_t ROP, mpfr_t OP1, unsigned long
- int OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_mul_2si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1 times 2 raised to OP2 rounded in the direction RND.
- Just increases the exponent by OP2 when ROP and OP1 are identical.
- -- Function: int mpfr_div_2ui (mpfr_t ROP, mpfr_t OP1, unsigned long
- int OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_div_2si (mpfr_t ROP, mpfr_t OP1, long int OP2,
- mpfr_rnd_t RND)
- Set ROP to OP1 divided by 2 raised to OP2 rounded in the direction
- RND. Just decreases the exponent by OP2 when ROP and OP1 are
- identical.
- File: mpfr.info, Node: Comparison Functions, Next: Special Functions, Prev: Basic Arithmetic Functions, Up: MPFR Interface
- 5.6 Comparison Functions
- ========================
- -- Function: int mpfr_cmp (mpfr_t OP1, mpfr_t OP2)
- -- Function: int mpfr_cmp_ui (mpfr_t OP1, unsigned long int OP2)
- -- Function: int mpfr_cmp_si (mpfr_t OP1, long int OP2)
- -- Function: int mpfr_cmp_d (mpfr_t OP1, double OP2)
- -- Function: int mpfr_cmp_ld (mpfr_t OP1, long double OP2)
- -- Function: int mpfr_cmp_z (mpfr_t OP1, mpz_t OP2)
- -- Function: int mpfr_cmp_q (mpfr_t OP1, mpq_t OP2)
- -- Function: int mpfr_cmp_f (mpfr_t OP1, mpf_t OP2)
- Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero if
- OP1 = OP2, and a negative value if OP1 < OP2. Both OP1 and OP2 are
- considered to their full own precision, which may differ. If one
- of the operands is NaN, set the _erange_ flag and return zero.
- Note: These functions may be useful to distinguish the three
- possible cases. If you need to distinguish two cases only, it is
- recommended to use the predicate functions (e.g., ‘mpfr_equal_p’
- for the equality) described below; they behave like the IEEE 754
- comparisons, in particular when one or both arguments are NaN. But
- only floating-point numbers can be compared (you may need to do a
- conversion first).
- -- Function: int mpfr_cmp_ui_2exp (mpfr_t OP1, unsigned long int OP2,
- mpfr_exp_t E)
- -- Function: int mpfr_cmp_si_2exp (mpfr_t OP1, long int OP2, mpfr_exp_t
- E)
- Compare OP1 and OP2 multiplied by two to the power E. Similar as
- above.
- -- Function: int mpfr_cmpabs (mpfr_t OP1, mpfr_t OP2)
- Compare |OP1| and |OP2|. Return a positive value if |OP1| > |OP2|,
- zero if |OP1| = |OP2|, and a negative value if |OP1| < |OP2|. If
- one of the operands is NaN, set the _erange_ flag and return zero.
- -- Function: int mpfr_nan_p (mpfr_t OP)
- -- Function: int mpfr_inf_p (mpfr_t OP)
- -- Function: int mpfr_number_p (mpfr_t OP)
- -- Function: int mpfr_zero_p (mpfr_t OP)
- -- Function: int mpfr_regular_p (mpfr_t OP)
- Return non-zero if OP is respectively NaN, an infinity, an ordinary
- number (i.e., neither NaN nor an infinity), zero, or a regular
- number (i.e., neither NaN, nor an infinity nor zero). Return zero
- otherwise.
- -- Macro: int mpfr_sgn (mpfr_t OP)
- Return a positive value if OP > 0, zero if OP = 0, and a negative
- value if OP < 0. If the operand is NaN, set the _erange_ flag and
- return zero. This is equivalent to ‘mpfr_cmp_ui (op, 0)’, but more
- efficient.
- -- Function: int mpfr_greater_p (mpfr_t OP1, mpfr_t OP2)
- -- Function: int mpfr_greaterequal_p (mpfr_t OP1, mpfr_t OP2)
- -- Function: int mpfr_less_p (mpfr_t OP1, mpfr_t OP2)
- -- Function: int mpfr_lessequal_p (mpfr_t OP1, mpfr_t OP2)
- -- Function: int mpfr_equal_p (mpfr_t OP1, mpfr_t OP2)
- Return non-zero if OP1 > OP2, OP1 >= OP2, OP1 < OP2, OP1 <= OP2,
- OP1 = OP2 respectively, and zero otherwise. Those functions return
- zero whenever OP1 and/or OP2 is NaN.
- -- Function: int mpfr_lessgreater_p (mpfr_t OP1, mpfr_t OP2)
- Return non-zero if OP1 < OP2 or OP1 > OP2 (i.e., neither OP1, nor
- OP2 is NaN, and OP1 <> OP2), zero otherwise (i.e., OP1 and/or OP2
- is NaN, or OP1 = OP2).
- -- Function: int mpfr_unordered_p (mpfr_t OP1, mpfr_t OP2)
- Return non-zero if OP1 or OP2 is a NaN (i.e., they cannot be
- compared), zero otherwise.
- File: mpfr.info, Node: Special Functions, Next: Input and Output Functions, Prev: Comparison Functions, Up: MPFR Interface
- 5.7 Special Functions
- =====================
- All those functions, except explicitly stated (for example
- ‘mpfr_sin_cos’), return a *note ternary value::, i.e., zero for an exact
- return value, a positive value for a return value larger than the exact
- result, and a negative value otherwise.
- Important note: in some domains, computing special functions (either
- with correct or incorrect rounding) is expensive, even for small
- precision, for example the trigonometric and Bessel functions for large
- argument.
- -- Function: int mpfr_log (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_log2 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_log10 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the natural logarithm of OP, log2(OP) or log10(OP),
- respectively, rounded in the direction RND. Set ROP to +0 if OP is
- 1 (in all rounding modes), for consistency with the ISO C99 and
- IEEE 754-2008 standards. Set ROP to −Inf if OP is ±0 (i.e., the
- sign of the zero has no influence on the result).
- -- Function: int mpfr_exp (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_exp2 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_exp10 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the exponential of OP, to 2 power of OP or to 10 power
- of OP, respectively, rounded in the direction RND.
- -- Function: int mpfr_cos (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_sin (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_tan (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the cosine of OP, sine of OP, tangent of OP, rounded in
- the direction RND.
- -- Function: int mpfr_sin_cos (mpfr_t SOP, mpfr_t COP, mpfr_t OP,
- mpfr_rnd_t RND)
- Set simultaneously SOP to the sine of OP and COP to the cosine of
- OP, rounded in the direction RND with the corresponding precisions
- of SOP and COP, which must be different variables. Return 0 iff
- both results are exact, more precisely it returns s+4c where s=0 if
- SOP is exact, s=1 if SOP is larger than the sine of OP, s=2 if SOP
- is smaller than the sine of OP, and similarly for c and the cosine
- of OP.
- -- Function: int mpfr_sec (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_csc (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_cot (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the secant of OP, cosecant of OP, cotangent of OP,
- rounded in the direction RND.
- -- Function: int mpfr_acos (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_asin (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_atan (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the arc-cosine, arc-sine or arc-tangent of OP, rounded
- in the direction RND. Note that since ‘acos(-1)’ returns the
- floating-point number closest to Pi according to the given rounding
- mode, this number might not be in the output range 0 <= ROP < \pi
- of the arc-cosine function; still, the result lies in the image of
- the output range by the rounding function. The same holds for
- ‘asin(-1)’, ‘asin(1)’, ‘atan(-Inf)’, ‘atan(+Inf)’ or for ‘atan(op)’
- with large OP and small precision of ROP.
- -- Function: int mpfr_atan2 (mpfr_t ROP, mpfr_t Y, mpfr_t X, mpfr_rnd_t
- RND)
- Set ROP to the arc-tangent2 of Y and X, rounded in the direction
- RND: if ‘x > 0’, ‘atan2(y, x) = atan (y/x)’; if ‘x < 0’, ‘atan2(y,
- x) = sign(y)*(Pi - atan (abs(y/x)))’, thus a number from -Pi to Pi.
- As for ‘atan’, in case the exact mathematical result is +Pi or -Pi,
- its rounded result might be outside the function output range.
- ‘atan2(y, 0)’ does not raise any floating-point exception. Special
- values are handled as described in the ISO C99 and IEEE 754-2008
- standards for the ‘atan2’ function:
- • ‘atan2(+0, -0)’ returns +Pi.
- • ‘atan2(-0, -0)’ returns -Pi.
- • ‘atan2(+0, +0)’ returns +0.
- • ‘atan2(-0, +0)’ returns −0.
- • ‘atan2(+0, x)’ returns +Pi for x < 0.
- • ‘atan2(-0, x)’ returns -Pi for x < 0.
- • ‘atan2(+0, x)’ returns +0 for x > 0.
- • ‘atan2(-0, x)’ returns −0 for x > 0.
- • ‘atan2(y, 0)’ returns -Pi/2 for y < 0.
- • ‘atan2(y, 0)’ returns +Pi/2 for y > 0.
- • ‘atan2(+Inf, -Inf)’ returns +3*Pi/4.
- • ‘atan2(-Inf, -Inf)’ returns -3*Pi/4.
- • ‘atan2(+Inf, +Inf)’ returns +Pi/4.
- • ‘atan2(-Inf, +Inf)’ returns -Pi/4.
- • ‘atan2(+Inf, x)’ returns +Pi/2 for finite x.
- • ‘atan2(-Inf, x)’ returns -Pi/2 for finite x.
- • ‘atan2(y, -Inf)’ returns +Pi for finite y > 0.
- • ‘atan2(y, -Inf)’ returns -Pi for finite y < 0.
- • ‘atan2(y, +Inf)’ returns +0 for finite y > 0.
- • ‘atan2(y, +Inf)’ returns −0 for finite y < 0.
- -- Function: int mpfr_cosh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_sinh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_tanh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the hyperbolic cosine, sine or tangent of OP, rounded in
- the direction RND.
- -- Function: int mpfr_sinh_cosh (mpfr_t SOP, mpfr_t COP, mpfr_t OP,
- mpfr_rnd_t RND)
- Set simultaneously SOP to the hyperbolic sine of OP and COP to the
- hyperbolic cosine of OP, rounded in the direction RND with the
- corresponding precision of SOP and COP, which must be different
- variables. Return 0 iff both results are exact (see ‘mpfr_sin_cos’
- for a more detailed description of the return value).
- -- Function: int mpfr_sech (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_csch (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_coth (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the hyperbolic secant of OP, cosecant of OP, cotangent
- of OP, rounded in the direction RND.
- -- Function: int mpfr_acosh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_asinh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_atanh (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the inverse hyperbolic cosine, sine or tangent of OP,
- rounded in the direction RND.
- -- Function: int mpfr_fac_ui (mpfr_t ROP, unsigned long int OP,
- mpfr_rnd_t RND)
- Set ROP to the factorial of OP, rounded in the direction RND.
- -- Function: int mpfr_log1p (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the logarithm of one plus OP, rounded in the direction
- RND.
- -- Function: int mpfr_expm1 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the exponential of OP followed by a subtraction by one,
- rounded in the direction RND.
- -- Function: int mpfr_eint (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the exponential integral of OP, rounded in the direction
- RND. For positive OP, the exponential integral is the sum of
- Euler’s constant, of the logarithm of OP, and of the sum for k from
- 1 to infinity of OP to the power k, divided by k and factorial(k).
- For negative OP, ROP is set to NaN (this definition for negative
- argument follows formula 5.1.2 from the Handbook of Mathematical
- Functions from Abramowitz and Stegun, a future version might use
- another definition).
- -- Function: int mpfr_li2 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to real part of the dilogarithm of OP, rounded in the
- direction RND. MPFR defines the dilogarithm function as the
- integral of -log(1-t)/t from 0 to OP.
- -- Function: int mpfr_gamma (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the value of the Gamma function on OP, rounded in the
- direction RND. When OP is a negative integer, ROP is set to NaN.
- -- Function: int mpfr_lngamma (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the value of the logarithm of the Gamma function on OP,
- rounded in the direction RND. When OP is 1 or 2, set ROP to +0 (in
- all rounding modes). When OP is an infinity or a nonpositive
- integer, set ROP to +Inf, following the general rules on special
- values. When −2K−1 < OP < −2K, K being a nonnegative integer, set
- ROP to NaN. See also ‘mpfr_lgamma’.
- -- Function: int mpfr_lgamma (mpfr_t ROP, int *SIGNP, mpfr_t OP,
- mpfr_rnd_t RND)
- Set ROP to the value of the logarithm of the absolute value of the
- Gamma function on OP, rounded in the direction RND. The sign (1 or
- −1) of Gamma(OP) is returned in the object pointed to by SIGNP.
- When OP is 1 or 2, set ROP to +0 (in all rounding modes). When OP
- is an infinity or a nonpositive integer, set ROP to +Inf. When OP
- is NaN, −Inf or a negative integer, *SIGNP is undefined, and when
- OP is ±0, *SIGNP is the sign of the zero.
- -- Function: int mpfr_digamma (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the value of the Digamma (sometimes also called Psi)
- function on OP, rounded in the direction RND. When OP is a
- negative integer, set ROP to NaN.
- -- Function: int mpfr_zeta (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_zeta_ui (mpfr_t ROP, unsigned long OP, mpfr_rnd_t
- RND)
- Set ROP to the value of the Riemann Zeta function on OP, rounded in
- the direction RND.
- -- Function: int mpfr_erf (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_erfc (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the value of the error function on OP (resp. the
- complementary error function on OP) rounded in the direction RND.
- -- Function: int mpfr_j0 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_j1 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_jn (mpfr_t ROP, long N, mpfr_t OP, mpfr_rnd_t
- RND)
- Set ROP to the value of the first kind Bessel function of order 0,
- (resp. 1 and N) on OP, rounded in the direction RND. When OP is
- NaN, ROP is always set to NaN. When OP is plus or minus Infinity,
- ROP is set to +0. When OP is zero, and N is not zero, ROP is set
- to +0 or −0 depending on the parity and sign of N, and the sign of
- OP.
- -- Function: int mpfr_y0 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_y1 (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_yn (mpfr_t ROP, long N, mpfr_t OP, mpfr_rnd_t
- RND)
- Set ROP to the value of the second kind Bessel function of order 0
- (resp. 1 and N) on OP, rounded in the direction RND. When OP is
- NaN or negative, ROP is always set to NaN. When OP is +Inf, ROP is
- set to +0. When OP is zero, ROP is set to +Inf or −Inf depending
- on the parity and sign of N.
- -- Function: int mpfr_fma (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2, mpfr_t
- OP3, mpfr_rnd_t RND)
- -- Function: int mpfr_fms (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2, mpfr_t
- OP3, mpfr_rnd_t RND)
- Set ROP to (OP1 times OP2) + OP3 (resp. (OP1 times OP2) - OP3)
- rounded in the direction RND. Concerning special values (signed
- zeros, infinities, NaN), these functions behave like a
- multiplication followed by a separate addition or subtraction.
- That is, the fused operation matters only for rounding.
- -- Function: int mpfr_agm (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- Set ROP to the arithmetic-geometric mean of OP1 and OP2, rounded in
- the direction RND. The arithmetic-geometric mean is the common
- limit of the sequences U_N and V_N, where U_0=OP1, V_0=OP2, U_(N+1)
- is the arithmetic mean of U_N and V_N, and V_(N+1) is the geometric
- mean of U_N and V_N. If any operand is negative, set ROP to NaN.
- -- Function: int mpfr_hypot (mpfr_t ROP, mpfr_t X, mpfr_t Y, mpfr_rnd_t
- RND)
- Set ROP to the Euclidean norm of X and Y, i.e., the square root of
- the sum of the squares of X and Y, rounded in the direction RND.
- Special values are handled as described in the ISO C99 (Section
- F.9.4.3) and IEEE 754-2008 (Section 9.2.1) standards: If X or Y is
- an infinity, then +Inf is returned in ROP, even if the other number
- is NaN.
- -- Function: int mpfr_ai (mpfr_t ROP, mpfr_t X, mpfr_rnd_t RND)
- Set ROP to the value of the Airy function Ai on X, rounded in the
- direction RND. When X is NaN, ROP is always set to NaN. When X is
- +Inf or −Inf, ROP is +0. The current implementation is not
- intended to be used with large arguments. It works with abs(X)
- typically smaller than 500. For larger arguments, other methods
- should be used and will be implemented in a future version.
- -- Function: int mpfr_const_log2 (mpfr_t ROP, mpfr_rnd_t RND)
- -- Function: int mpfr_const_pi (mpfr_t ROP, mpfr_rnd_t RND)
- -- Function: int mpfr_const_euler (mpfr_t ROP, mpfr_rnd_t RND)
- -- Function: int mpfr_const_catalan (mpfr_t ROP, mpfr_rnd_t RND)
- Set ROP to the logarithm of 2, the value of Pi, of Euler’s constant
- 0.577..., of Catalan’s constant 0.915..., respectively, rounded in
- the direction RND. These functions cache the computed values to
- avoid other calculations if a lower or equal precision is
- requested. To free these caches, use ‘mpfr_free_cache’.
- -- Function: void mpfr_free_cache (void)
- Free various caches used by MPFR internally, in particular the
- caches used by the functions computing constants
- (‘mpfr_const_log2’, ‘mpfr_const_pi’, ‘mpfr_const_euler’ and
- ‘mpfr_const_catalan’). You should call this function before
- terminating a thread, even if you did not call these functions
- directly (they could have been called internally).
- -- Function: int mpfr_sum (mpfr_t ROP, mpfr_ptr const TAB[], unsigned
- long int N, mpfr_rnd_t RND)
- Set ROP to the sum of all elements of TAB, whose size is N, rounded
- in the direction RND. Warning: for efficiency reasons, TAB is an
- array of pointers to ‘mpfr_t’, not an array of ‘mpfr_t’. If the
- returned ‘int’ value is zero, ROP is guaranteed to be the exact
- sum; otherwise ROP might be smaller than, equal to, or larger than
- the exact sum (in accordance to the rounding mode). However,
- ‘mpfr_sum’ does guarantee the result is correctly rounded.
- File: mpfr.info, Node: Input and Output Functions, Next: Formatted Output Functions, Prev: Special Functions, Up: MPFR Interface
- 5.8 Input and Output Functions
- ==============================
- This section describes functions that perform input from an input/output
- stream, and functions that output to an input/output stream. Passing a
- null pointer for a ‘stream’ to any of these functions will make them
- read from ‘stdin’ and write to ‘stdout’, respectively.
- When using any of these functions, you must include the ‘<stdio.h>’
- standard header before ‘mpfr.h’, to allow ‘mpfr.h’ to define prototypes
- for these functions.
- -- Function: size_t mpfr_out_str (FILE *STREAM, int BASE, size_t N,
- mpfr_t OP, mpfr_rnd_t RND)
- Output OP on stream STREAM, as a string of digits in base BASE,
- rounded in the direction RND. The base may vary from 2 to 62.
- Print N significant digits exactly, or if N is 0, enough digits so
- that OP can be read back exactly (see ‘mpfr_get_str’).
- In addition to the significant digits, a decimal point (defined by
- the current locale) at the right of the first digit and a trailing
- exponent in base 10, in the form ‘eNNN’, are printed. If BASE is
- greater than 10, ‘@’ will be used instead of ‘e’ as exponent
- delimiter.
- Return the number of characters written, or if an error occurred,
- return 0.
- -- Function: size_t mpfr_inp_str (mpfr_t ROP, FILE *STREAM, int BASE,
- mpfr_rnd_t RND)
- Input a string in base BASE from stream STREAM, rounded in the
- direction RND, and put the read float in ROP.
- This function reads a word (defined as a sequence of characters
- between whitespace) and parses it using ‘mpfr_set_str’. See the
- documentation of ‘mpfr_strtofr’ for a detailed description of the
- valid string formats.
- Return the number of bytes read, or if an error occurred, return 0.
- File: mpfr.info, Node: Formatted Output Functions, Next: Integer Related Functions, Prev: Input and Output Functions, Up: MPFR Interface
- 5.9 Formatted Output Functions
- ==============================
- 5.9.1 Requirements
- ------------------
- The class of ‘mpfr_printf’ functions provides formatted output in a
- similar manner as the standard C ‘printf’. These functions are defined
- only if your system supports ISO C variadic functions and the
- corresponding argument access macros.
- When using any of these functions, you must include the ‘<stdio.h>’
- standard header before ‘mpfr.h’, to allow ‘mpfr.h’ to define prototypes
- for these functions.
- 5.9.2 Format String
- -------------------
- The format specification accepted by ‘mpfr_printf’ is an extension of
- the ‘printf’ one. The conversion specification is of the form:
- % [flags] [width] [.[precision]] [type] [rounding] conv
- ‘flags’, ‘width’, and ‘precision’ have the same meaning as for the
- standard ‘printf’ (in particular, notice that the ‘precision’ is related
- to the number of digits displayed in the base chosen by ‘conv’ and not
- related to the internal precision of the ‘mpfr_t’ variable).
- ‘mpfr_printf’ accepts the same ‘type’ specifiers as GMP (except the
- non-standard and deprecated ‘q’, use ‘ll’ instead), namely the length
- modifiers defined in the C standard:
- ‘h’ ‘short’
- ‘hh’ ‘char’
- ‘j’ ‘intmax_t’ or ‘uintmax_t’
- ‘l’ ‘long’ or ‘wchar_t’
- ‘ll’ ‘long long’
- ‘L’ ‘long double’
- ‘t’ ‘ptrdiff_t’
- ‘z’ ‘size_t’
- and the ‘type’ specifiers defined in GMP plus ‘R’ and ‘P’ specific to
- MPFR (the second column in the table below shows the type of the
- argument read in the argument list and the kind of ‘conv’ specifier to
- use after the ‘type’ specifier):
- ‘F’ ‘mpf_t’, float conversions
- ‘Q’ ‘mpq_t’, integer conversions
- ‘M’ ‘mp_limb_t’, integer conversions
- ‘N’ ‘mp_limb_t’ array, integer conversions
- ‘Z’ ‘mpz_t’, integer conversions
-
- ‘P’ ‘mpfr_prec_t’, integer conversions
- ‘R’ ‘mpfr_t’, float conversions
- The ‘type’ specifiers have the same restrictions as those mentioned
- in the GMP documentation: *note (gmp.info)Formatted Output Strings::.
- In particular, the ‘type’ specifiers (except ‘R’ and ‘P’) are supported
- only if they are supported by ‘gmp_printf’ in your GMP build; this
- implies that the standard specifiers, such as ‘t’, must _also_ be
- supported by your C library if you want to use them.
- The ‘rounding’ field is specific to ‘mpfr_t’ arguments and should not
- be used with other types.
- With conversion specification not involving ‘P’ and ‘R’ types,
- ‘mpfr_printf’ behaves exactly as ‘gmp_printf’.
- The ‘P’ type specifies that a following ‘d’, ‘i’, ‘o’, ‘u’, ‘x’, or
- ‘X’ conversion specifier applies to a ‘mpfr_prec_t’ argument. It is
- needed because the ‘mpfr_prec_t’ type does not necessarily correspond to
- an ‘int’ or any fixed standard type. The ‘precision’ field specifies
- the minimum number of digits to appear. The default ‘precision’ is 1.
- For example:
- mpfr_t x;
- mpfr_prec_t p;
- mpfr_init (x);
- ...
- p = mpfr_get_prec (x);
- mpfr_printf ("variable x with %Pu bits", p);
- The ‘R’ type specifies that a following ‘a’, ‘A’, ‘b’, ‘e’, ‘E’, ‘f’,
- ‘F’, ‘g’, ‘G’, or ‘n’ conversion specifier applies to a ‘mpfr_t’
- argument. The ‘R’ type can be followed by a ‘rounding’ specifier
- denoted by one of the following characters:
- ‘U’ round toward plus infinity
- ‘D’ round toward minus infinity
- ‘Y’ round away from zero
- ‘Z’ round toward zero
- ‘N’ round to nearest (with ties to even)
- ‘*’ rounding mode indicated by the
- ‘mpfr_rnd_t’ argument just before the
- corresponding ‘mpfr_t’ variable.
- The default rounding mode is rounding to nearest. The following
- three examples are equivalent:
- mpfr_t x;
- mpfr_init (x);
- ...
- mpfr_printf ("%.128Rf", x);
- mpfr_printf ("%.128RNf", x);
- mpfr_printf ("%.128R*f", MPFR_RNDN, x);
- Note that the rounding away from zero mode is specified with ‘Y’
- because ISO C reserves the ‘A’ specifier for hexadecimal output (see
- below).
- The output ‘conv’ specifiers allowed with ‘mpfr_t’ parameter are:
- ‘a’ ‘A’ hex float, C99 style
- ‘b’ binary output
- ‘e’ ‘E’ scientific format float
- ‘f’ ‘F’ fixed point float
- ‘g’ ‘G’ fixed or scientific float
- The conversion specifier ‘b’ which displays the argument in binary is
- specific to ‘mpfr_t’ arguments and should not be used with other types.
- Other conversion specifiers have the same meaning as for a ‘double’
- argument.
- In case of non-decimal output, only the significand is written in the
- specified base, the exponent is always displayed in decimal. Special
- values are always displayed as ‘nan’, ‘-inf’, and ‘inf’ for ‘a’, ‘b’,
- ‘e’, ‘f’, and ‘g’ specifiers and ‘NAN’, ‘-INF’, and ‘INF’ for ‘A’, ‘E’,
- ‘F’, and ‘G’ specifiers.
- If the ‘precision’ field is not empty, the ‘mpfr_t’ number is rounded
- to the given precision in the direction specified by the rounding mode.
- If the precision is zero with rounding to nearest mode and one of the
- following ‘conv’ specifiers: ‘a’, ‘A’, ‘b’, ‘e’, ‘E’, tie case is
- rounded to even when it lies between two consecutive values at the
- wanted precision which have the same exponent, otherwise, it is rounded
- away from zero. For instance, 85 is displayed as "8e+1" and 95 is
- displayed as "1e+2" with the format specification ‘"%.0RNe"’. This also
- applies when the ‘g’ (resp. ‘G’) conversion specifier uses the ‘e’
- (resp. ‘E’) style. If the precision is set to a value greater than the
- maximum value for an ‘int’, it will be silently reduced down to
- ‘INT_MAX’.
- If the ‘precision’ field is empty (as in ‘%Re’ or ‘%.RE’) with ‘conv’
- specifier ‘e’ and ‘E’, the number is displayed with enough digits so
- that it can be read back exactly, assuming that the input and output
- variables have the same precision and that the input and output rounding
- modes are both rounding to nearest (as for ‘mpfr_get_str’). The default
- precision for an empty ‘precision’ field with ‘conv’ specifiers ‘f’,
- ‘F’, ‘g’, and ‘G’ is 6.
- 5.9.3 Functions
- ---------------
- For all the following functions, if the number of characters which ought
- to be written appears to exceed the maximum limit for an ‘int’, nothing
- is written in the stream (resp. to ‘stdout’, to BUF, to STR), the
- function returns −1, sets the _erange_ flag, and (in POSIX system only)
- ‘errno’ is set to ‘EOVERFLOW’.
- -- Function: int mpfr_fprintf (FILE *STREAM, const char *TEMPLATE, ...)
- -- Function: int mpfr_vfprintf (FILE *STREAM, const char *TEMPLATE,
- va_list AP)
- Print to the stream STREAM the optional arguments under the control
- of the template string TEMPLATE. Return the number of characters
- written or a negative value if an error occurred.
- -- Function: int mpfr_printf (const char *TEMPLATE, ...)
- -- Function: int mpfr_vprintf (const char *TEMPLATE, va_list AP)
- Print to ‘stdout’ the optional arguments under the control of the
- template string TEMPLATE. Return the number of characters written
- or a negative value if an error occurred.
- -- Function: int mpfr_sprintf (char *BUF, const char *TEMPLATE, ...)
- -- Function: int mpfr_vsprintf (char *BUF, const char *TEMPLATE,
- va_list AP)
- Form a null-terminated string corresponding to the optional
- arguments under the control of the template string TEMPLATE, and
- print it in BUF. No overlap is permitted between BUF and the other
- arguments. Return the number of characters written in the array
- BUF _not counting_ the terminating null character or a negative
- value if an error occurred.
- -- Function: int mpfr_snprintf (char *BUF, size_t N, const char
- *TEMPLATE, ...)
- -- Function: int mpfr_vsnprintf (char *BUF, size_t N, const char
- *TEMPLATE, va_list AP)
- Form a null-terminated string corresponding to the optional
- arguments under the control of the template string TEMPLATE, and
- print it in BUF. If N is zero, nothing is written and BUF may be a
- null pointer, otherwise, the N−1 first characters are written in
- BUF and the N-th is a null character. Return the number of
- characters that would have been written had N be sufficiently
- large, _not counting_ the terminating null character, or a negative
- value if an error occurred.
- -- Function: int mpfr_asprintf (char **STR, const char *TEMPLATE, ...)
- -- Function: int mpfr_vasprintf (char **STR, const char *TEMPLATE,
- va_list AP)
- Write their output as a null terminated string in a block of memory
- allocated using the current allocation function. A pointer to the
- block is stored in STR. The block of memory must be freed using
- ‘mpfr_free_str’. The return value is the number of characters
- written in the string, excluding the null-terminator, or a negative
- value if an error occurred.
- File: mpfr.info, Node: Integer Related Functions, Next: Rounding Related Functions, Prev: Formatted Output Functions, Up: MPFR Interface
- 5.10 Integer and Remainder Related Functions
- ============================================
- -- Function: int mpfr_rint (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_ceil (mpfr_t ROP, mpfr_t OP)
- -- Function: int mpfr_floor (mpfr_t ROP, mpfr_t OP)
- -- Function: int mpfr_round (mpfr_t ROP, mpfr_t OP)
- -- Function: int mpfr_trunc (mpfr_t ROP, mpfr_t OP)
- Set ROP to OP rounded to an integer. ‘mpfr_rint’ rounds to the
- nearest representable integer in the given direction RND,
- ‘mpfr_ceil’ rounds to the next higher or equal representable
- integer, ‘mpfr_floor’ to the next lower or equal representable
- integer, ‘mpfr_round’ to the nearest representable integer,
- rounding halfway cases away from zero (as in the roundTiesToAway
- mode of IEEE 754-2008), and ‘mpfr_trunc’ to the next representable
- integer toward zero.
- The returned value is zero when the result is exact, positive when
- it is greater than the original value of OP, and negative when it
- is smaller. More precisely, the returned value is 0 when OP is an
- integer representable in ROP, 1 or −1 when OP is an integer that is
- not representable in ROP, 2 or −2 when OP is not an integer.
- When OP is NaN, the NaN flag is set as usual. In the other cases,
- the inexact flag is set when ROP differs from OP, following the ISO
- C99 rule for the ‘rint’ function. If you want the behavior to be
- more like IEEE 754 / ISO TS 18661-1, i.e., the usual behavior where
- the round-to-integer function is regarded as any other mathematical
- function, you should use one the ‘mpfr_rint_*’ functions instead
- (however it is not possible to round to nearest with the even
- rounding rule yet).
- Note that ‘mpfr_round’ is different from ‘mpfr_rint’ called with
- the rounding to nearest mode (where halfway cases are rounded to an
- even integer or significand). Note also that no double rounding is
- performed; for instance, 10.5 (1010.1 in binary) is rounded by
- ‘mpfr_rint’ with rounding to nearest to 12 (1100 in binary) in
- 2-bit precision, because the two enclosing numbers representable on
- two bits are 8 and 12, and the closest is 12. (If one first
- rounded to an integer, one would round 10.5 to 10 with even
- rounding, and then 10 would be rounded to 8 again with even
- rounding.)
- -- Function: int mpfr_rint_ceil (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- -- Function: int mpfr_rint_floor (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t
- RND)
- -- Function: int mpfr_rint_round (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t
- RND)
- -- Function: int mpfr_rint_trunc (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t
- RND)
- Set ROP to OP rounded to an integer. ‘mpfr_rint_ceil’ rounds to
- the next higher or equal integer, ‘mpfr_rint_floor’ to the next
- lower or equal integer, ‘mpfr_rint_round’ to the nearest integer,
- rounding halfway cases away from zero, and ‘mpfr_rint_trunc’ to the
- next integer toward zero. If the result is not representable, it
- is rounded in the direction RND. The returned value is the ternary
- value associated with the considered round-to-integer function
- (regarded in the same way as any other mathematical function).
- Contrary to ‘mpfr_rint’, those functions do perform a double
- rounding: first OP is rounded to the nearest integer in the
- direction given by the function name, then this nearest integer (if
- not representable) is rounded in the given direction RND. Thus
- these round-to-integer functions behave more like the other
- mathematical functions, i.e., the returned result is the correct
- rounding of the exact result of the function in the real numbers.
- For example, ‘mpfr_rint_round’ with rounding to nearest and a
- precision of two bits rounds 6.5 to 7 (halfway cases away from
- zero), then 7 is rounded to 8 by the round-even rule, despite the
- fact that 6 is also representable on two bits, and is closer to 6.5
- than 8.
- -- Function: int mpfr_frac (mpfr_t ROP, mpfr_t OP, mpfr_rnd_t RND)
- Set ROP to the fractional part of OP, having the same sign as OP,
- rounded in the direction RND (unlike in ‘mpfr_rint’, RND affects
- only how the exact fractional part is rounded, not how the
- fractional part is generated).
- -- Function: int mpfr_modf (mpfr_t IOP, mpfr_t FOP, mpfr_t OP,
- mpfr_rnd_t RND)
- Set simultaneously IOP to the integral part of OP and FOP to the
- fractional part of OP, rounded in the direction RND with the
- corresponding precision of IOP and FOP (equivalent to
- ‘mpfr_trunc(IOP, OP, RND)’ and ‘mpfr_frac(FOP, OP, RND)’). The
- variables IOP and FOP must be different. Return 0 iff both results
- are exact (see ‘mpfr_sin_cos’ for a more detailed description of
- the return value).
- -- Function: int mpfr_fmod (mpfr_t R, mpfr_t X, mpfr_t Y, mpfr_rnd_t
- RND)
- -- Function: int mpfr_remainder (mpfr_t R, mpfr_t X, mpfr_t Y,
- mpfr_rnd_t RND)
- -- Function: int mpfr_remquo (mpfr_t R, long* Q, mpfr_t X, mpfr_t Y,
- mpfr_rnd_t RND)
- Set R to the value of X - NY, rounded according to the direction
- RND, where N is the integer quotient of X divided by Y, defined as
- follows: N is rounded toward zero for ‘mpfr_fmod’, and to the
- nearest integer (ties rounded to even) for ‘mpfr_remainder’ and
- ‘mpfr_remquo’.
- Special values are handled as described in Section F.9.7.1 of the
- ISO C99 standard: If X is infinite or Y is zero, R is NaN. If Y is
- infinite and X is finite, R is X rounded to the precision of R. If
- R is zero, it has the sign of X. The return value is the ternary
- value corresponding to R.
- Additionally, ‘mpfr_remquo’ stores the low significant bits from
- the quotient N in *Q (more precisely the number of bits in a ‘long’
- minus one), with the sign of X divided by Y (except if those low
- bits are all zero, in which case zero is returned). Note that X
- may be so large in magnitude relative to Y that an exact
- representation of the quotient is not practical. The
- ‘mpfr_remainder’ and ‘mpfr_remquo’ functions are useful for
- additive argument reduction.
- -- Function: int mpfr_integer_p (mpfr_t OP)
- Return non-zero iff OP is an integer.
- File: mpfr.info, Node: Rounding Related Functions, Next: Miscellaneous Functions, Prev: Integer Related Functions, Up: MPFR Interface
- 5.11 Rounding Related Functions
- ===============================
- -- Function: void mpfr_set_default_rounding_mode (mpfr_rnd_t RND)
- Set the default rounding mode to RND. The default rounding mode is
- to nearest initially.
- -- Function: mpfr_rnd_t mpfr_get_default_rounding_mode (void)
- Get the default rounding mode.
- -- Function: int mpfr_prec_round (mpfr_t X, mpfr_prec_t PREC,
- mpfr_rnd_t RND)
- Round X according to RND with precision PREC, which must be an
- integer between ‘MPFR_PREC_MIN’ and ‘MPFR_PREC_MAX’ (otherwise the
- behavior is undefined). If PREC is greater or equal to the
- precision of X, then new space is allocated for the significand,
- and it is filled with zeros. Otherwise, the significand is rounded
- to precision PREC with the given direction. In both cases, the
- precision of X is changed to PREC.
- Here is an example of how to use ‘mpfr_prec_round’ to implement
- Newton’s algorithm to compute the inverse of A, assuming X is
- already an approximation to N bits:
- mpfr_set_prec (t, 2 * n);
- mpfr_set (t, a, MPFR_RNDN); /* round a to 2n bits */
- mpfr_mul (t, t, x, MPFR_RNDN); /* t is correct to 2n bits */
- mpfr_ui_sub (t, 1, t, MPFR_RNDN); /* high n bits cancel with 1 */
- mpfr_prec_round (t, n, MPFR_RNDN); /* t is correct to n bits */
- mpfr_mul (t, t, x, MPFR_RNDN); /* t is correct to n bits */
- mpfr_prec_round (x, 2 * n, MPFR_RNDN); /* exact */
- mpfr_add (x, x, t, MPFR_RNDN); /* x is correct to 2n bits */
- Warning! You must not use this function if X was initialized with
- ‘MPFR_DECL_INIT’ or with ‘mpfr_custom_init_set’ (*note Custom
- Interface::).
- -- Function: int mpfr_can_round (mpfr_t B, mpfr_exp_t ERR, mpfr_rnd_t
- RND1, mpfr_rnd_t RND2, mpfr_prec_t PREC)
- Assuming B is an approximation of an unknown number X in the
- direction RND1 with error at most two to the power E(b)-ERR where
- E(b) is the exponent of B, return a non-zero value if one is able
- to round correctly X to precision PREC with the direction RND2, and
- 0 otherwise (including for NaN and Inf). This function *does not
- modify* its arguments.
- If RND1 is ‘MPFR_RNDN’, then the sign of the error is unknown, but
- its absolute value is the same, so that the possible range is twice
- as large as with a directed rounding for RND1.
- Note: if one wants to also determine the correct *note ternary
- value:: when rounding B to precision PREC with rounding mode RND, a
- useful trick is the following:
- if (mpfr_can_round (b, err, MPFR_RNDN, MPFR_RNDZ,
- prec + (rnd == MPFR_RNDN)))
- ...
- Indeed, if RND is ‘MPFR_RNDN’, this will check if one can round to
- PREC+1 bits with a directed rounding: if so, one can surely round
- to nearest to PREC bits, and in addition one can determine the
- correct ternary value, which would not be the case when B is near
- from a value exactly representable on PREC bits.
- -- Function: mpfr_prec_t mpfr_min_prec (mpfr_t X)
- Return the minimal number of bits required to store the significand
- of X, and 0 for special values, including 0. (Warning: the
- returned value can be less than ‘MPFR_PREC_MIN’.)
- The function name is subject to change.
- -- Function: const char * mpfr_print_rnd_mode (mpfr_rnd_t RND)
- Return a string ("MPFR_RNDD", "MPFR_RNDU", "MPFR_RNDN",
- "MPFR_RNDZ", "MPFR_RNDA") corresponding to the rounding mode RND,
- or a null pointer if RND is an invalid rounding mode.
- File: mpfr.info, Node: Miscellaneous Functions, Next: Exception Related Functions, Prev: Rounding Related Functions, Up: MPFR Interface
- 5.12 Miscellaneous Functions
- ============================
- -- Function: void mpfr_nexttoward (mpfr_t X, mpfr_t Y)
- If X or Y is NaN, set X to NaN. If X and Y are equal, X is
- unchanged. Otherwise, if X is different from Y, replace X by the
- next floating-point number (with the precision of X and the current
- exponent range) in the direction of Y (the infinite values are seen
- as the smallest and largest floating-point numbers). If the result
- is zero, it keeps the same sign. No underflow or overflow is
- generated.
- -- Function: void mpfr_nextabove (mpfr_t X)
- -- Function: void mpfr_nextbelow (mpfr_t X)
- Equivalent to ‘mpfr_nexttoward’ where Y is plus infinity (resp.
- minus infinity).
- -- Function: int mpfr_min (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- -- Function: int mpfr_max (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- Set ROP to the minimum (resp. maximum) of OP1 and OP2. If OP1 and
- OP2 are both NaN, then ROP is set to NaN. If OP1 or OP2 is NaN,
- then ROP is set to the numeric value. If OP1 and OP2 are zeros of
- different signs, then ROP is set to −0 (resp. +0).
- -- Function: int mpfr_urandomb (mpfr_t ROP, gmp_randstate_t STATE)
- Generate a uniformly distributed random float in the interval 0 <=
- ROP < 1. More precisely, the number can be seen as a float with a
- random non-normalized significand and exponent 0, which is then
- normalized (thus if E denotes the exponent after normalization,
- then the least -E significant bits of the significand are always
- 0).
- Return 0, unless the exponent is not in the current exponent range,
- in which case ROP is set to NaN and a non-zero value is returned
- (this should never happen in practice, except in very specific
- cases). The second argument is a ‘gmp_randstate_t’ structure which
- should be created using the GMP ‘gmp_randinit’ function (see the
- GMP manual).
- Note: for a given version of MPFR, the returned value of ROP and
- the new value of STATE (which controls further random values) do
- not depend on the machine word size.
- -- Function: int mpfr_urandom (mpfr_t ROP, gmp_randstate_t STATE,
- mpfr_rnd_t RND)
- Generate a uniformly distributed random float. The floating-point
- number ROP can be seen as if a random real number is generated
- according to the continuous uniform distribution on the interval
- [0, 1] and then rounded in the direction RND.
- The second argument is a ‘gmp_randstate_t’ structure which should
- be created using the GMP ‘gmp_randinit’ function (see the GMP
- manual).
- Note: the note for ‘mpfr_urandomb’ holds too. In addition, the
- exponent range and the rounding mode might have a side effect on
- the next random state.
- -- Function: int mpfr_grandom (mpfr_t ROP1, mpfr_t ROP2,
- gmp_randstate_t STATE, mpfr_rnd_t RND)
- Generate two random floats according to a standard normal gaussian
- distribution. If ROP2 is a null pointer, then only one value is
- generated and stored in ROP1.
- The floating-point number ROP1 (and ROP2) can be seen as if a
- random real number were generated according to the standard normal
- gaussian distribution and then rounded in the direction RND.
- The third argument is a ‘gmp_randstate_t’ structure, which should
- be created using the GMP ‘gmp_randinit’ function (see the GMP
- manual).
- The combination of the ternary values is returned like with
- ‘mpfr_sin_cos’. If ROP2 is a null pointer, the second ternary
- value is assumed to be 0 (note that the encoding of the only
- ternary value is not the same as the usual encoding for functions
- that return only one result). Otherwise the ternary value of a
- random number is always non-zero.
- Note: the note for ‘mpfr_urandomb’ holds too. In addition, the
- exponent range and the rounding mode might have a side effect on
- the next random state.
- -- Function: mpfr_exp_t mpfr_get_exp (mpfr_t X)
- Return the exponent of X, assuming that X is a non-zero ordinary
- number and the significand is considered in [1/2,1). The behavior
- for NaN, infinity or zero is undefined.
- -- Function: int mpfr_set_exp (mpfr_t X, mpfr_exp_t E)
- Set the exponent of X if E is in the current exponent range, and
- return 0 (even if X is not a non-zero ordinary number); otherwise,
- return a non-zero value. The significand is assumed to be in
- [1/2,1).
- -- Function: int mpfr_signbit (mpfr_t OP)
- Return a non-zero value iff OP has its sign bit set (i.e., if it is
- negative, −0, or a NaN whose representation has its sign bit set).
- -- Function: int mpfr_setsign (mpfr_t ROP, mpfr_t OP, int S, mpfr_rnd_t
- RND)
- Set the value of ROP from OP, rounded toward the given direction
- RND, then set (resp. clear) its sign bit if S is non-zero (resp.
- zero), even when OP is a NaN.
- -- Function: int mpfr_copysign (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- Set the value of ROP from OP1, rounded toward the given direction
- RND, then set its sign bit to that of OP2 (even when OP1 or OP2 is
- a NaN). This function is equivalent to ‘mpfr_setsign (ROP, OP1,
- mpfr_signbit (OP2), RND)’.
- -- Function: const char * mpfr_get_version (void)
- Return the MPFR version, as a null-terminated string.
- -- Macro: MPFR_VERSION
- -- Macro: MPFR_VERSION_MAJOR
- -- Macro: MPFR_VERSION_MINOR
- -- Macro: MPFR_VERSION_PATCHLEVEL
- -- Macro: MPFR_VERSION_STRING
- ‘MPFR_VERSION’ is the version of MPFR as a preprocessing constant.
- ‘MPFR_VERSION_MAJOR’, ‘MPFR_VERSION_MINOR’ and
- ‘MPFR_VERSION_PATCHLEVEL’ are respectively the major, minor and
- patch level of MPFR version, as preprocessing constants.
- ‘MPFR_VERSION_STRING’ is the version (with an optional suffix, used
- in development and pre-release versions) as a string constant,
- which can be compared to the result of ‘mpfr_get_version’ to check
- at run time the header file and library used match:
- if (strcmp (mpfr_get_version (), MPFR_VERSION_STRING))
- fprintf (stderr, "Warning: header and library do not match\n");
- Note: Obtaining different strings is not necessarily an error, as
- in general, a program compiled with some old MPFR version can be
- dynamically linked with a newer MPFR library version (if allowed by
- the library versioning system).
- -- Macro: long MPFR_VERSION_NUM (MAJOR, MINOR, PATCHLEVEL)
- Create an integer in the same format as used by ‘MPFR_VERSION’ from
- the given MAJOR, MINOR and PATCHLEVEL. Here is an example of how
- to check the MPFR version at compile time:
- #if (!defined(MPFR_VERSION) || (MPFR_VERSION<MPFR_VERSION_NUM(3,0,0)))
- # error "Wrong MPFR version."
- #endif
- -- Function: const char * mpfr_get_patches (void)
- Return a null-terminated string containing the ids of the patches
- applied to the MPFR library (contents of the ‘PATCHES’ file),
- separated by spaces. Note: If the program has been compiled with
- an older MPFR version and is dynamically linked with a new MPFR
- library version, the identifiers of the patches applied to the old
- (compile-time) MPFR version are not available (however this
- information should not have much interest in general).
- -- Function: int mpfr_buildopt_tls_p (void)
- Return a non-zero value if MPFR was compiled as thread safe using
- compiler-level Thread Local Storage (that is, MPFR was built with
- the ‘--enable-thread-safe’ configure option, see ‘INSTALL’ file),
- return zero otherwise.
- -- Function: int mpfr_buildopt_decimal_p (void)
- Return a non-zero value if MPFR was compiled with decimal float
- support (that is, MPFR was built with the ‘--enable-decimal-float’
- configure option), return zero otherwise.
- -- Function: int mpfr_buildopt_gmpinternals_p (void)
- Return a non-zero value if MPFR was compiled with GMP internals
- (that is, MPFR was built with either ‘--with-gmp-build’ or
- ‘--enable-gmp-internals’ configure option), return zero otherwise.
- -- Function: const char * mpfr_buildopt_tune_case (void)
- Return a string saying which thresholds file has been used at
- compile time. This file is normally selected from the processor
- type.
- File: mpfr.info, Node: Exception Related Functions, Next: Compatibility with MPF, Prev: Miscellaneous Functions, Up: MPFR Interface
- 5.13 Exception Related Functions
- ================================
- -- Function: mpfr_exp_t mpfr_get_emin (void)
- -- Function: mpfr_exp_t mpfr_get_emax (void)
- Return the (current) smallest and largest exponents allowed for a
- floating-point variable. The smallest positive value of a
- floating-point variable is one half times 2 raised to the smallest
- exponent and the largest value has the form (1 - epsilon) times 2
- raised to the largest exponent, where epsilon depends on the
- precision of the considered variable.
- -- Function: int mpfr_set_emin (mpfr_exp_t EXP)
- -- Function: int mpfr_set_emax (mpfr_exp_t EXP)
- Set the smallest and largest exponents allowed for a floating-point
- variable. Return a non-zero value when EXP is not in the range
- accepted by the implementation (in that case the smallest or
- largest exponent is not changed), and zero otherwise. If the user
- changes the exponent range, it is her/his responsibility to check
- that all current floating-point variables are in the new allowed
- range (for example using ‘mpfr_check_range’), otherwise the
- subsequent behavior will be undefined, in the sense of the ISO C
- standard.
- -- Function: mpfr_exp_t mpfr_get_emin_min (void)
- -- Function: mpfr_exp_t mpfr_get_emin_max (void)
- -- Function: mpfr_exp_t mpfr_get_emax_min (void)
- -- Function: mpfr_exp_t mpfr_get_emax_max (void)
- Return the minimum and maximum of the exponents allowed for
- ‘mpfr_set_emin’ and ‘mpfr_set_emax’ respectively. These values are
- implementation dependent, thus a program using
- ‘mpfr_set_emax(mpfr_get_emax_max())’ or
- ‘mpfr_set_emin(mpfr_get_emin_min())’ may not be portable.
- -- Function: int mpfr_check_range (mpfr_t X, int T, mpfr_rnd_t RND)
- This function assumes that X is the correctly-rounded value of some
- real value Y in the direction RND and some extended exponent range,
- and that T is the corresponding *note ternary value::. For
- example, one performed ‘t = mpfr_log (x, u, rnd)’, and Y is the
- exact logarithm of U. Thus T is negative if X is smaller than Y,
- positive if X is larger than Y, and zero if X equals Y. This
- function modifies X if needed to be in the current range of
- acceptable values: It generates an underflow or an overflow if the
- exponent of X is outside the current allowed range; the value of T
- may be used to avoid a double rounding. This function returns zero
- if the new value of X equals the exact one Y, a positive value if
- that new value is larger than Y, and a negative value if it is
- smaller than Y. Note that unlike most functions, the new result X
- is compared to the (unknown) exact one Y, not the input value X,
- i.e., the ternary value is propagated.
- Note: If X is an infinity and T is different from zero (i.e., if
- the rounded result is an inexact infinity), then the overflow flag
- is set. This is useful because ‘mpfr_check_range’ is typically
- called (at least in MPFR functions) after restoring the flags that
- could have been set due to internal computations.
- -- Function: int mpfr_subnormalize (mpfr_t X, int T, mpfr_rnd_t RND)
- This function rounds X emulating subnormal number arithmetic: if X
- is outside the subnormal exponent range, it just propagates the
- *note ternary value:: T; otherwise, it rounds X to precision
- ‘EXP(x)-emin+1’ according to rounding mode RND and previous ternary
- value T, avoiding double rounding problems. More precisely in the
- subnormal domain, denoting by E the value of ‘emin’, X is rounded
- in fixed-point arithmetic to an integer multiple of two to the
- power E−1; as a consequence, 1.5 multiplied by two to the power E−1
- when T is zero is rounded to two to the power E with rounding to
- nearest.
- ‘PREC(x)’ is not modified by this function. RND and T must be the
- rounding mode and the returned ternary value used when computing X
- (as in ‘mpfr_check_range’). The subnormal exponent range is from
- ‘emin’ to ‘emin+PREC(x)-1’. If the result cannot be represented in
- the current exponent range (due to a too small ‘emax’), the
- behavior is undefined. Note that unlike most functions, the result
- is compared to the exact one, not the input value X, i.e., the
- ternary value is propagated.
- As usual, if the returned ternary value is non zero, the inexact
- flag is set. Moreover, if a second rounding occurred (because the
- input X was in the subnormal range), the underflow flag is set.
- This is an example of how to emulate binary double IEEE 754
- arithmetic (binary64 in IEEE 754-2008) using MPFR:
- {
- mpfr_t xa, xb; int i; volatile double a, b;
- mpfr_set_default_prec (53);
- mpfr_set_emin (-1073); mpfr_set_emax (1024);
- mpfr_init (xa); mpfr_init (xb);
- b = 34.3; mpfr_set_d (xb, b, MPFR_RNDN);
- a = 0x1.1235P-1021; mpfr_set_d (xa, a, MPFR_RNDN);
- a /= b;
- i = mpfr_div (xa, xa, xb, MPFR_RNDN);
- i = mpfr_subnormalize (xa, i, MPFR_RNDN); /* new ternary value */
- mpfr_clear (xa); mpfr_clear (xb);
- }
- Warning: this emulates a double IEEE 754 arithmetic with correct
- rounding in the subnormal range, which may not be the case for your
- hardware.
- -- Function: void mpfr_clear_underflow (void)
- -- Function: void mpfr_clear_overflow (void)
- -- Function: void mpfr_clear_divby0 (void)
- -- Function: void mpfr_clear_nanflag (void)
- -- Function: void mpfr_clear_inexflag (void)
- -- Function: void mpfr_clear_erangeflag (void)
- Clear the underflow, overflow, divide-by-zero, invalid, inexact and
- _erange_ flags.
- -- Function: void mpfr_set_underflow (void)
- -- Function: void mpfr_set_overflow (void)
- -- Function: void mpfr_set_divby0 (void)
- -- Function: void mpfr_set_nanflag (void)
- -- Function: void mpfr_set_inexflag (void)
- -- Function: void mpfr_set_erangeflag (void)
- Set the underflow, overflow, divide-by-zero, invalid, inexact and
- _erange_ flags.
- -- Function: void mpfr_clear_flags (void)
- Clear all global flags (underflow, overflow, divide-by-zero,
- invalid, inexact, _erange_).
- -- Function: int mpfr_underflow_p (void)
- -- Function: int mpfr_overflow_p (void)
- -- Function: int mpfr_divby0_p (void)
- -- Function: int mpfr_nanflag_p (void)
- -- Function: int mpfr_inexflag_p (void)
- -- Function: int mpfr_erangeflag_p (void)
- Return the corresponding (underflow, overflow, divide-by-zero,
- invalid, inexact, _erange_) flag, which is non-zero iff the flag is
- set.
- File: mpfr.info, Node: Compatibility with MPF, Next: Custom Interface, Prev: Exception Related Functions, Up: MPFR Interface
- 5.14 Compatibility With MPF
- ===========================
- A header file ‘mpf2mpfr.h’ is included in the distribution of MPFR for
- compatibility with the GNU MP class MPF. By inserting the following two
- lines after the ‘#include <gmp.h>’ line,
- #include <mpfr.h>
- #include <mpf2mpfr.h>
- any program written for MPF can be compiled directly with MPFR without
- any changes (except the ‘gmp_printf’ functions will not work for
- arguments of type ‘mpfr_t’). All operations are then performed with the
- default MPFR rounding mode, which can be reset with
- ‘mpfr_set_default_rounding_mode’.
- Warning: the ‘mpf_init’ and ‘mpf_init2’ functions initialize to zero,
- whereas the corresponding MPFR functions initialize to NaN: this is
- useful to detect uninitialized values, but is slightly incompatible with
- MPF.
- -- Function: void mpfr_set_prec_raw (mpfr_t X, mpfr_prec_t PREC)
- Reset the precision of X to be *exactly* PREC bits. The only
- difference with ‘mpfr_set_prec’ is that PREC is assumed to be small
- enough so that the significand fits into the current allocated
- memory space for X. Otherwise the behavior is undefined.
- -- Function: int mpfr_eq (mpfr_t OP1, mpfr_t OP2, unsigned long int
- OP3)
- Return non-zero if OP1 and OP2 are both non-zero ordinary numbers
- with the same exponent and the same first OP3 bits, both zero, or
- both infinities of the same sign. Return zero otherwise. This
- function is defined for compatibility with MPF, we do not recommend
- to use it otherwise. Do not use it either if you want to know
- whether two numbers are close to each other; for instance, 1.011111
- and 1.100000 are regarded as different for any value of OP3 larger
- than 1.
- -- Function: void mpfr_reldiff (mpfr_t ROP, mpfr_t OP1, mpfr_t OP2,
- mpfr_rnd_t RND)
- Compute the relative difference between OP1 and OP2 and store the
- result in ROP. This function does not guarantee the correct
- rounding on the relative difference; it just computes
- |OP1-OP2|/OP1, using the precision of ROP and the rounding mode RND
- for all operations.
- -- Function: int mpfr_mul_2exp (mpfr_t ROP, mpfr_t OP1, unsigned long
- int OP2, mpfr_rnd_t RND)
- -- Function: int mpfr_div_2exp (mpfr_t ROP, mpfr_t OP1, unsigned long
- int OP2, mpfr_rnd_t RND)
- These functions are identical to ‘mpfr_mul_2ui’ and ‘mpfr_div_2ui’
- respectively. These functions are only kept for compatibility with
- MPF, one should prefer ‘mpfr_mul_2ui’ and ‘mpfr_div_2ui’ otherwise.
- File: mpfr.info, Node: Custom Interface, Next: Internals, Prev: Compatibility with MPF, Up: MPFR Interface
- 5.15 Custom Interface
- =====================
- Some applications use a stack to handle the memory and their objects.
- However, the MPFR memory design is not well suited for such a thing. So
- that such applications are able to use MPFR, an auxiliary memory
- interface has been created: the Custom Interface.
- The following interface allows one to use MPFR in two ways:
- • Either directly store a floating-point number as a ‘mpfr_t’ on the
- stack.
- • Either store its own representation on the stack and construct a
- new temporary ‘mpfr_t’ each time it is needed.
- Nothing has to be done to destroy the floating-point numbers except
- garbaging the used memory: all the memory management (allocating,
- destroying, garbaging) is left to the application.
- Each function in this interface is also implemented as a macro for
- efficiency reasons: for example ‘mpfr_custom_init (s, p)’ uses the
- macro, while ‘(mpfr_custom_init) (s, p)’ uses the function.
- Note 1: MPFR functions may still initialize temporary floating-point
- numbers using ‘mpfr_init’ and similar functions. See Custom Allocation
- (GNU MP).
- Note 2: MPFR functions may use the cached functions (‘mpfr_const_pi’
- for example), even if they are not explicitly called. You have to call
- ‘mpfr_free_cache’ each time you garbage the memory iff ‘mpfr_init’,
- through GMP Custom Allocation, allocates its memory on the application
- stack.
- -- Function: size_t mpfr_custom_get_size (mpfr_prec_t PREC)
- Return the needed size in bytes to store the significand of a
- floating-point number of precision PREC.
- -- Function: void mpfr_custom_init (void *SIGNIFICAND, mpfr_prec_t
- PREC)
- Initialize a significand of precision PREC, where SIGNIFICAND must
- be an area of ‘mpfr_custom_get_size (prec)’ bytes at least and be
- suitably aligned for an array of ‘mp_limb_t’ (GMP type, *note
- Internals::).
- -- Function: void mpfr_custom_init_set (mpfr_t X, int KIND, mpfr_exp_t
- EXP, mpfr_prec_t PREC, void *SIGNIFICAND)
- Perform a dummy initialization of a ‘mpfr_t’ and set it to:
- • if ‘ABS(kind) == MPFR_NAN_KIND’, X is set to NaN;
- • if ‘ABS(kind) == MPFR_INF_KIND’, X is set to the infinity of
- sign ‘sign(kind)’;
- • if ‘ABS(kind) == MPFR_ZERO_KIND’, X is set to the zero of sign
- ‘sign(kind)’;
- • if ‘ABS(kind) == MPFR_REGULAR_KIND’, X is set to a regular
- number: ‘x = sign(kind)*significand*2^exp’.
- In all cases, it uses SIGNIFICAND directly for further computing
- involving X. It will not allocate anything. A floating-point
- number initialized with this function cannot be resized using
- ‘mpfr_set_prec’ or ‘mpfr_prec_round’, or cleared using
- ‘mpfr_clear’! The SIGNIFICAND must have been initialized with
- ‘mpfr_custom_init’ using the same precision PREC.
- -- Function: int mpfr_custom_get_kind (mpfr_t X)
- Return the current kind of a ‘mpfr_t’ as created by
- ‘mpfr_custom_init_set’. The behavior of this function for any
- ‘mpfr_t’ not initialized with ‘mpfr_custom_init_set’ is undefined.
- -- Function: void * mpfr_custom_get_significand (mpfr_t X)
- Return a pointer to the significand used by a ‘mpfr_t’ initialized
- with ‘mpfr_custom_init_set’. The behavior of this function for any
- ‘mpfr_t’ not initialized with ‘mpfr_custom_init_set’ is undefined.
- -- Function: mpfr_exp_t mpfr_custom_get_exp (mpfr_t X)
- Return the exponent of X, assuming that X is a non-zero ordinary
- number. The return value for NaN, Infinity or zero is unspecified
- but does not produce any trap. The behavior of this function for
- any ‘mpfr_t’ not initialized with ‘mpfr_custom_init_set’ is
- undefined.
- -- Function: void mpfr_custom_move (mpfr_t X, void *NEW_POSITION)
- Inform MPFR that the significand of X has moved due to a garbage
- collect and update its new position to ‘new_position’. However the
- application has to move the significand and the ‘mpfr_t’ itself.
- The behavior of this function for any ‘mpfr_t’ not initialized with
- ‘mpfr_custom_init_set’ is undefined.
- File: mpfr.info, Node: Internals, Prev: Custom Interface, Up: MPFR Interface
- 5.16 Internals
- ==============
- A “limb” means the part of a multi-precision number that fits in a
- single word. Usually a limb contains 32 or 64 bits. The C data type
- for a limb is ‘mp_limb_t’.
- The ‘mpfr_t’ type is internally defined as a one-element array of a
- structure, and ‘mpfr_ptr’ is the C data type representing a pointer to
- this structure. The ‘mpfr_t’ type consists of four fields:
- • The ‘_mpfr_prec’ field is used to store the precision of the
- variable (in bits); this is not less than ‘MPFR_PREC_MIN’.
- • The ‘_mpfr_sign’ field is used to store the sign of the variable.
- • The ‘_mpfr_exp’ field stores the exponent. An exponent of 0 means
- a radix point just above the most significant limb. Non-zero
- values n are a multiplier 2^n relative to that point. A NaN, an
- infinity and a zero are indicated by special values of the exponent
- field.
- • Finally, the ‘_mpfr_d’ field is a pointer to the limbs, least
- significant limbs stored first. The number of limbs in use is
- controlled by ‘_mpfr_prec’, namely
- ceil(‘_mpfr_prec’/‘mp_bits_per_limb’). Non-singular (i.e.,
- different from NaN, Infinity or zero) values always have the most
- significant bit of the most significant limb set to 1. When the
- precision does not correspond to a whole number of limbs, the
- excess bits at the low end of the data are zeros.
- File: mpfr.info, Node: API Compatibility, Next: Contributors, Prev: MPFR Interface, Up: Top
- 6 API Compatibility
- *******************
- The goal of this section is to describe some API changes that occurred
- from one version of MPFR to another, and how to write code that can be
- compiled and run with older MPFR versions. The minimum MPFR version
- that is considered here is 2.2.0 (released on 20 September 2005).
- API changes can only occur between major or minor versions. Thus the
- patchlevel (the third number in the MPFR version) will be ignored in the
- following. If a program does not use MPFR internals, changes in the
- behavior between two versions differing only by the patchlevel should
- only result from what was regarded as a bug or unspecified behavior.
- As a general rule, a program written for some MPFR version should
- work with later versions, possibly except at a new major version, where
- some features (described as obsolete for some time) can be removed. In
- such a case, a failure should occur during compilation or linking. If a
- result becomes incorrect because of such a change, please look at the
- various changes below (they are minimal, and most software should be
- unaffected), at the FAQ and at the MPFR web page for your version (a bug
- could have been introduced and be already fixed); and if the problem is
- not mentioned, please send us a bug report (*note Reporting Bugs::).
- However, a program written for the current MPFR version (as
- documented by this manual) may not necessarily work with previous
- versions of MPFR. This section should help developers to write portable
- code.
- Note: Information given here may be incomplete. API changes are also
- described in the NEWS file (for each version, instead of being
- classified like here), together with other changes.
- * Menu:
- * Type and Macro Changes::
- * Added Functions::
- * Changed Functions::
- * Removed Functions::
- * Other Changes::
- File: mpfr.info, Node: Type and Macro Changes, Next: Added Functions, Prev: API Compatibility, Up: API Compatibility
- 6.1 Type and Macro Changes
- ==========================
- The official type for exponent values changed from ‘mp_exp_t’ to
- ‘mpfr_exp_t’ in MPFR 3.0. The type ‘mp_exp_t’ will remain available as
- it comes from GMP (with a different meaning). These types are currently
- the same (‘mpfr_exp_t’ is defined as ‘mp_exp_t’ with ‘typedef’), so that
- programs can still use ‘mp_exp_t’; but this may change in the future.
- Alternatively, using the following code after including ‘mpfr.h’ will
- work with official MPFR versions, as ‘mpfr_exp_t’ was never defined in
- MPFR 2.x:
- #if MPFR_VERSION_MAJOR < 3
- typedef mp_exp_t mpfr_exp_t;
- #endif
- The official types for precision values and for rounding modes
- respectively changed from ‘mp_prec_t’ and ‘mp_rnd_t’ to ‘mpfr_prec_t’
- and ‘mpfr_rnd_t’ in MPFR 3.0. This change was actually done a long time
- ago in MPFR, at least since MPFR 2.2.0, with the following code in
- ‘mpfr.h’:
- #ifndef mp_rnd_t
- # define mp_rnd_t mpfr_rnd_t
- #endif
- #ifndef mp_prec_t
- # define mp_prec_t mpfr_prec_t
- #endif
- This means that it is safe to use the new official types
- ‘mpfr_prec_t’ and ‘mpfr_rnd_t’ in your programs. The types ‘mp_prec_t’
- and ‘mp_rnd_t’ (defined in MPFR only) may be removed in the future, as
- the prefix ‘mp_’ is reserved by GMP.
- The precision type ‘mpfr_prec_t’ (‘mp_prec_t’) was unsigned before
- MPFR 3.0; it is now signed. ‘MPFR_PREC_MAX’ has not changed, though.
- Indeed the MPFR code requires that ‘MPFR_PREC_MAX’ be representable in
- the exponent type, which may have the same size as ‘mpfr_prec_t’ but has
- always been signed. The consequence is that valid code that does not
- assume anything about the signedness of ‘mpfr_prec_t’ should work with
- past and new MPFR versions. This change was useful as the use of
- unsigned types tends to convert signed values to unsigned ones in
- expressions due to the usual arithmetic conversions, which can yield
- incorrect results if a negative value is converted in such a way.
- Warning! A program assuming (intentionally or not) that ‘mpfr_prec_t’
- is signed may be affected by this problem when it is built and run
- against MPFR 2.x.
- The rounding modes ‘GMP_RNDx’ were renamed to ‘MPFR_RNDx’ in MPFR
- 3.0. However the old names ‘GMP_RNDx’ have been kept for compatibility
- (this might change in future versions), using:
- #define GMP_RNDN MPFR_RNDN
- #define GMP_RNDZ MPFR_RNDZ
- #define GMP_RNDU MPFR_RNDU
- #define GMP_RNDD MPFR_RNDD
- The rounding mode “round away from zero” (‘MPFR_RNDA’) was added in
- MPFR 3.0 (however no rounding mode ‘GMP_RNDA’ exists).
- File: mpfr.info, Node: Added Functions, Next: Changed Functions, Prev: Type and Macro Changes, Up: API Compatibility
- 6.2 Added Functions
- ===================
- We give here in alphabetical order the functions that were added after
- MPFR 2.2, and in which MPFR version.
- • ‘mpfr_add_d’ in MPFR 2.4.
- • ‘mpfr_ai’ in MPFR 3.0 (incomplete, experimental).
- • ‘mpfr_asprintf’ in MPFR 2.4.
- • ‘mpfr_buildopt_decimal_p’ and ‘mpfr_buildopt_tls_p’ in MPFR 3.0.
- • ‘mpfr_buildopt_gmpinternals_p’ and ‘mpfr_buildopt_tune_case’ in
- MPFR 3.1.
- • ‘mpfr_clear_divby0’ in MPFR 3.1 (new divide-by-zero exception).
- • ‘mpfr_copysign’ in MPFR 2.3. Note: MPFR 2.2 had a ‘mpfr_copysign’
- function that was available, but not documented, and with a slight
- difference in the semantics (when the second input operand is a
- NaN).
- • ‘mpfr_custom_get_significand’ in MPFR 3.0. This function was named
- ‘mpfr_custom_get_mantissa’ in previous versions;
- ‘mpfr_custom_get_mantissa’ is still available via a macro in
- ‘mpfr.h’:
- #define mpfr_custom_get_mantissa mpfr_custom_get_significand
- Thus code that needs to work with both MPFR 2.x and MPFR 3.x should
- use ‘mpfr_custom_get_mantissa’.
- • ‘mpfr_d_div’ and ‘mpfr_d_sub’ in MPFR 2.4.
- • ‘mpfr_digamma’ in MPFR 3.0.
- • ‘mpfr_divby0_p’ in MPFR 3.1 (new divide-by-zero exception).
- • ‘mpfr_div_d’ in MPFR 2.4.
- • ‘mpfr_fmod’ in MPFR 2.4.
- • ‘mpfr_fms’ in MPFR 2.3.
- • ‘mpfr_fprintf’ in MPFR 2.4.
- • ‘mpfr_frexp’ in MPFR 3.1.
- • ‘mpfr_get_flt’ in MPFR 3.0.
- • ‘mpfr_get_patches’ in MPFR 2.3.
- • ‘mpfr_get_z_2exp’ in MPFR 3.0. This function was named
- ‘mpfr_get_z_exp’ in previous versions; ‘mpfr_get_z_exp’ is still
- available via a macro in ‘mpfr.h’:
- #define mpfr_get_z_exp mpfr_get_z_2exp
- Thus code that needs to work with both MPFR 2.x and MPFR 3.x should
- use ‘mpfr_get_z_exp’.
- • ‘mpfr_grandom’ in MPFR 3.1.
- • ‘mpfr_j0’, ‘mpfr_j1’ and ‘mpfr_jn’ in MPFR 2.3.
- • ‘mpfr_lgamma’ in MPFR 2.3.
- • ‘mpfr_li2’ in MPFR 2.4.
- • ‘mpfr_min_prec’ in MPFR 3.0.
- • ‘mpfr_modf’ in MPFR 2.4.
- • ‘mpfr_mul_d’ in MPFR 2.4.
- • ‘mpfr_printf’ in MPFR 2.4.
- • ‘mpfr_rec_sqrt’ in MPFR 2.4.
- • ‘mpfr_regular_p’ in MPFR 3.0.
- • ‘mpfr_remainder’ and ‘mpfr_remquo’ in MPFR 2.3.
- • ‘mpfr_set_divby0’ in MPFR 3.1 (new divide-by-zero exception).
- • ‘mpfr_set_flt’ in MPFR 3.0.
- • ‘mpfr_set_z_2exp’ in MPFR 3.0.
- • ‘mpfr_set_zero’ in MPFR 3.0.
- • ‘mpfr_setsign’ in MPFR 2.3.
- • ‘mpfr_signbit’ in MPFR 2.3.
- • ‘mpfr_sinh_cosh’ in MPFR 2.4.
- • ‘mpfr_snprintf’ and ‘mpfr_sprintf’ in MPFR 2.4.
- • ‘mpfr_sub_d’ in MPFR 2.4.
- • ‘mpfr_urandom’ in MPFR 3.0.
- • ‘mpfr_vasprintf’, ‘mpfr_vfprintf’, ‘mpfr_vprintf’, ‘mpfr_vsprintf’
- and ‘mpfr_vsnprintf’ in MPFR 2.4.
- • ‘mpfr_y0’, ‘mpfr_y1’ and ‘mpfr_yn’ in MPFR 2.3.
- • ‘mpfr_z_sub’ in MPFR 3.1.
- File: mpfr.info, Node: Changed Functions, Next: Removed Functions, Prev: Added Functions, Up: API Compatibility
- 6.3 Changed Functions
- =====================
- The following functions have changed after MPFR 2.2. Changes can affect
- the behavior of code written for some MPFR version when built and run
- against another MPFR version (older or newer), as described below.
- • ‘mpfr_check_range’ changed in MPFR 2.3.2 and MPFR 2.4. If the
- value is an inexact infinity, the overflow flag is now set (in case
- it was lost), while it was previously left unchanged. This is
- really what is expected in practice (and what the MPFR code was
- expecting), so that the previous behavior was regarded as a bug.
- Hence the change in MPFR 2.3.2.
- • ‘mpfr_get_f’ changed in MPFR 3.0. This function was returning
- zero, except for NaN and Inf, which do not exist in MPF. The
- _erange_ flag is now set in these cases, and ‘mpfr_get_f’ now
- returns the usual ternary value.
- • ‘mpfr_get_si’, ‘mpfr_get_sj’, ‘mpfr_get_ui’ and ‘mpfr_get_uj’
- changed in MPFR 3.0. In previous MPFR versions, the cases where
- the _erange_ flag is set were unspecified.
- • ‘mpfr_get_z’ changed in MPFR 3.0. The return type was ‘void’; it
- is now ‘int’, and the usual ternary value is returned. Thus
- programs that need to work with both MPFR 2.x and 3.x must not use
- the return value. Even in this case, C code using ‘mpfr_get_z’ as
- the second or third term of a conditional operator may also be
- affected. For instance, the following is correct with MPFR 3.0,
- but not with MPFR 2.x:
- bool ? mpfr_get_z(...) : mpfr_add(...);
- On the other hand, the following is correct with MPFR 2.x, but not
- with MPFR 3.0:
- bool ? mpfr_get_z(...) : (void) mpfr_add(...);
- Portable code should cast ‘mpfr_get_z(...)’ to ‘void’ to use the
- type ‘void’ for both terms of the conditional operator, as in:
- bool ? (void) mpfr_get_z(...) : (void) mpfr_add(...);
- Alternatively, ‘if ... else’ can be used instead of the conditional
- operator.
- Moreover the cases where the _erange_ flag is set were unspecified
- in MPFR 2.x.
- • ‘mpfr_get_z_exp’ changed in MPFR 3.0. In previous MPFR versions,
- the cases where the _erange_ flag is set were unspecified. Note:
- this function has been renamed to ‘mpfr_get_z_2exp’ in MPFR 3.0,
- but ‘mpfr_get_z_exp’ is still available for compatibility reasons.
- • ‘mpfr_strtofr’ changed in MPFR 2.3.1 and MPFR 2.4. This was
- actually a bug fix since the code and the documentation did not
- match. But both were changed in order to have a more consistent
- and useful behavior. The main changes in the code are as follows.
- The binary exponent is now accepted even without the ‘0b’ or ‘0x’
- prefix. Data corresponding to NaN can now have an optional sign
- (such data were previously invalid).
- • ‘mpfr_strtofr’ changed in MPFR 3.0. This function now accepts
- bases from 37 to 62 (no changes for the other bases). Note: if an
- unsupported base is provided to this function, the behavior is
- undefined; more precisely, in MPFR 2.3.1 and later, providing an
- unsupported base yields an assertion failure (this behavior may
- change in the future).
- • ‘mpfr_subnormalize’ changed in MPFR 3.1. This was actually
- regarded as a bug fix. The ‘mpfr_subnormalize’ implementation up
- to MPFR 3.0.0 did not change the flags. In particular, it did not
- follow the generic rule concerning the inexact flag (and no special
- behavior was specified). The case of the underflow flag was more a
- lack of specification.
- • ‘mpfr_urandom’ and ‘mpfr_urandomb’ changed in MPFR 3.1. Their
- behavior no longer depends on the platform (assuming this is also
- true for GMP’s random generator, which is not the case between GMP
- 4.1 and 4.2 if ‘gmp_randinit_default’ is used). As a consequence,
- the returned values can be different between MPFR 3.1 and previous
- MPFR versions. Note: as the reproducibility of these functions was
- not specified before MPFR 3.1, the MPFR 3.1 behavior is _not_
- regarded as backward incompatible with previous versions.
- File: mpfr.info, Node: Removed Functions, Next: Other Changes, Prev: Changed Functions, Up: API Compatibility
- 6.4 Removed Functions
- =====================
- Functions ‘mpfr_random’ and ‘mpfr_random2’ have been removed in MPFR 3.0
- (this only affects old code built against MPFR 3.0 or later). (The
- function ‘mpfr_random’ had been deprecated since at least MPFR 2.2.0,
- and ‘mpfr_random2’ since MPFR 2.4.0.)
- File: mpfr.info, Node: Other Changes, Prev: Removed Functions, Up: API Compatibility
- 6.5 Other Changes
- =================
- For users of a C++ compiler, the way how the availability of ‘intmax_t’
- is detected has changed in MPFR 3.0. In MPFR 2.x, if a macro ‘INTMAX_C’
- or ‘UINTMAX_C’ was defined (e.g. when the ‘__STDC_CONSTANT_MACROS’
- macro had been defined before ‘<stdint.h>’ or ‘<inttypes.h>’ has been
- included), ‘intmax_t’ was assumed to be defined. However this was not
- always the case (more precisely, ‘intmax_t’ can be defined only in the
- namespace ‘std’, as with Boost), so that compilations could fail. Thus
- the check for ‘INTMAX_C’ or ‘UINTMAX_C’ is now disabled for C++
- compilers, with the following consequences:
- • Programs written for MPFR 2.x that need ‘intmax_t’ may no longer be
- compiled against MPFR 3.0: a ‘#define MPFR_USE_INTMAX_T’ may be
- necessary before ‘mpfr.h’ is included.
- • The compilation of programs that work with MPFR 3.0 may fail with
- MPFR 2.x due to the problem described above. Workarounds are
- possible, such as defining ‘intmax_t’ and ‘uintmax_t’ in the global
- namespace, though this is not clean.
- The divide-by-zero exception is new in MPFR 3.1. However it should
- not introduce incompatible changes for programs that strictly follow the
- MPFR API since the exception can only be seen via new functions.
- As of MPFR 3.1, the ‘mpfr.h’ header can be included several times,
- while still supporting optional functions (*note Headers and
- Libraries::).
- File: mpfr.info, Node: Contributors, Next: References, Prev: API Compatibility, Up: Top
- Contributors
- ************
- The main developers of MPFR are Guillaume Hanrot, Vincent Lefèvre,
- Patrick Pélissier, Philippe Théveny and Paul Zimmermann.
- Sylvie Boldo from ENS-Lyon, France, contributed the functions
- ‘mpfr_agm’ and ‘mpfr_log’. Sylvain Chevillard contributed the ‘mpfr_ai’
- function. David Daney contributed the hyperbolic and inverse hyperbolic
- functions, the base-2 exponential, and the factorial function. Alain
- Delplanque contributed the new version of the ‘mpfr_get_str’ function.
- Mathieu Dutour contributed the functions ‘mpfr_acos’, ‘mpfr_asin’ and
- ‘mpfr_atan’, and a previous version of ‘mpfr_gamma’. Laurent Fousse
- contributed the ‘mpfr_sum’ function. Emmanuel Jeandel, from ENS-Lyon
- too, contributed the generic hypergeometric code, as well as the
- internal function ‘mpfr_exp3’, a first implementation of the sine and
- cosine, and improved versions of ‘mpfr_const_log2’ and ‘mpfr_const_pi’.
- Ludovic Meunier helped in the design of the ‘mpfr_erf’ code. Jean-Luc
- Rémy contributed the ‘mpfr_zeta’ code. Fabrice Rouillier contributed
- the ‘mpfr_xxx_z’ and ‘mpfr_xxx_q’ functions, and helped to the Microsoft
- Windows porting. Damien Stehlé contributed the ‘mpfr_get_ld_2exp’
- function.
- We would like to thank Jean-Michel Muller and Joris van der Hoeven
- for very fruitful discussions at the beginning of that project, Torbjörn
- Granlund and Kevin Ryde for their help about design issues, and Nathalie
- Revol for her careful reading of a previous version of this
- documentation. In particular Kevin Ryde did a tremendous job for the
- portability of MPFR in 2002-2004.
- The development of the MPFR library would not have been possible
- without the continuous support of INRIA, and of the LORIA (Nancy,
- France) and LIP (Lyon, France) laboratories. In particular the main
- authors were or are members of the PolKA, Spaces, Cacao, Caramel and
- Caramba project-teams at LORIA and of the Arénaire and AriC
- project-teams at LIP. This project was started during the Fiable
- (reliable in French) action supported by INRIA, and continued during the
- AOC action. The development of MPFR was also supported by a grant
- (202F0659 00 MPN 121) from the Conseil Régional de Lorraine in 2002,
- from INRIA by an "associate engineer" grant (2003-2005), an "opération
- de développement logiciel" grant (2007-2009), and the post-doctoral
- grant of Sylvain Chevillard in 2009-2010. The MPFR-MPC workshop in June
- 2012 was partly supported by the ERC grant ANTICS of Andreas Enge.
- File: mpfr.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top
- References
- **********
- • Richard Brent and Paul Zimmermann, "Modern Computer Arithmetic",
- Cambridge University Press (to appear), also available from the
- authors’ web pages.
- • Laurent Fousse, Guillaume Hanrot, Vincent Lefèvre, Patrick
- Pélissier and Paul Zimmermann, "MPFR: A Multiple-Precision Binary
- Floating-Point Library With Correct Rounding", ACM Transactions on
- Mathematical Software, volume 33, issue 2, article 13, 15 pages,
- 2007, <http://doi.acm.org/10.1145/1236463.1236468>.
- • Torbjörn Granlund, "GNU MP: The GNU Multiple Precision Arithmetic
- Library", version 5.0.1, 2010, <http://gmplib.org>.
- • IEEE standard for binary floating-point arithmetic, Technical
- Report ANSI-IEEE Standard 754-1985, New York, 1985. Approved March
- 21, 1985: IEEE Standards Board; approved July 26, 1985: American
- National Standards Institute, 18 pages.
- • IEEE Standard for Floating-Point Arithmetic, ANSI-IEEE Standard
- 754-2008, 2008. Revision of ANSI-IEEE Standard 754-1985, approved
- June 12, 2008: IEEE Standards Board, 70 pages.
- • Donald E. Knuth, "The Art of Computer Programming", vol 2,
- "Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981.
- • Jean-Michel Muller, "Elementary Functions, Algorithms and
- Implementation", Birkhäuser, Boston, 2nd edition, 2006.
- • Jean-Michel Muller, Nicolas Brisebarre, Florent de Dinechin,
- Claude-Pierre Jeannerod, Vincent Lefèvre, Guillaume Melquiond,
- Nathalie Revol, Damien Stehlé and Serge Torrès, "Handbook of
- Floating-Point Arithmetic", Birkhäuser, Boston, 2009.
- File: mpfr.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top
- Appendix A GNU Free Documentation License
- *****************************************
- Version 1.2, November 2002
- Copyright © 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- 0. PREAMBLE
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document “free” in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
- This License is a kind of “copyleft”, which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book. We
- recommend this License principally for works whose purpose is
- instruction or reference.
- 1. APPLICABILITY AND DEFINITIONS
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it can
- be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- “Document”, below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as “you”. You accept
- the license if you copy, modify or distribute the work in a way
- requiring permission under copyright law.
- A “Modified Version” of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
- A “Secondary Section” is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document’s overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
- The “Invariant Sections” are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in the
- notice that says that the Document is released under this License.
- If a section does not fit the above definition of Secondary then it
- is not allowed to be designated as Invariant. The Document may
- contain zero Invariant Sections. If the Document does not identify
- any Invariant Sections then there are none.
- The “Cover Texts” are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
- A “Transparent” copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images composed
- of pixels) generic paint programs or (for drawings) some widely
- available drawing editor, and that is suitable for input to text
- formatters or for automatic translation to a variety of formats
- suitable for input to text formatters. A copy made in an otherwise
- Transparent file format whose markup, or absence of markup, has
- been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if
- used for any substantial amount of text. A copy that is not
- “Transparent” is called “Opaque”.
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and standard-conforming
- simple HTML, PostScript or PDF designed for human modification.
- Examples of transparent image formats include PNG, XCF and JPG.
- Opaque formats include proprietary formats that can be read and
- edited only by proprietary word processors, SGML or XML for which
- the DTD and/or processing tools are not generally available, and
- the machine-generated HTML, PostScript or PDF produced by some word
- processors for output purposes only.
- The “Title Page” means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, “Title
- Page” means the text near the most prominent appearance of the
- work’s title, preceding the beginning of the body of the text.
- A section “Entitled XYZ” means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.)
- To “Preserve the Title” of such a section when you modify the
- Document means that it remains a section “Entitled XYZ” according
- to this definition.
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
- 2. VERBATIM COPYING
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow the
- conditions in section 3.
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
- 3. COPYING IN QUANTITY
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document’s license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the title
- equally prominent and visible. You may add other material on the
- covers in addition. Copying with changes limited to the covers, as
- long as they preserve the title of the Document and satisfy these
- conditions, can be treated as verbatim copying in other respects.
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a machine-readable
- Transparent copy along with each Opaque copy, or state in or with
- each Opaque copy a computer-network location from which the general
- network-using public has access to download using public-standard
- network protocols a complete Transparent copy of the Document, free
- of added material. If you use the latter option, you must take
- reasonably prudent steps, when you begin distribution of Opaque
- copies in quantity, to ensure that this Transparent copy will
- remain thus accessible at the stated location until at least one
- year after the last time you distribute an Opaque copy (directly or
- through your agents or retailers) of that edition to the public.
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of copies,
- to give them a chance to provide you with an updated version of the
- Document.
- 4. MODIFICATIONS
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with the
- Modified Version filling the role of the Document, thus licensing
- distribution and modification of the Modified Version to whoever
- possesses a copy of it. In addition, you must do these things in
- the Modified Version:
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of previous
- versions (which should, if there were any, be listed in the
- History section of the Document). You may use the same title
- as a previous version if the original publisher of that
- version gives permission.
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
- D. Preserve all the copyright notices of the Document.
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document’s
- license notice.
- H. Include an unaltered copy of this License.
- I. Preserve the section Entitled “History”, Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on the
- Title Page. If there is no section Entitled “History” in the
- Document, create one stating the title, year, authors, and
- publisher of the Document as given on its Title Page, then add
- an item describing the Modified Version as stated in the
- previous sentence.
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in the
- “History” section. You may omit a network location for a work
- that was published at least four years before the Document
- itself, or if the original publisher of the version it refers
- to gives permission.
- K. For any section Entitled “Acknowledgements” or “Dedications”,
- Preserve the Title of the section, and preserve in the section
- all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
- L. Preserve all the Invariant Sections of the Document, unaltered
- in their text and in their titles. Section numbers or the
- equivalent are not considered part of the section titles.
- M. Delete any section Entitled “Endorsements”. Such a section
- may not be included in the Modified Version.
- N. Do not retitle any existing section to be Entitled
- “Endorsements” or to conflict in title with any Invariant
- Section.
- O. Preserve any Warranty Disclaimers.
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option designate
- some or all of these sections as invariant. To do this, add their
- titles to the list of Invariant Sections in the Modified Version’s
- license notice. These titles must be distinct from any other
- section titles.
- You may add a section Entitled “Endorsements”, provided it contains
- nothing but endorsements of your Modified Version by various
- parties—for example, statements of peer review or that the text has
- been approved by an organization as the authoritative definition of
- a standard.
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end of
- the list of Cover Texts in the Modified Version. Only one passage
- of Front-Cover Text and one of Back-Cover Text may be added by (or
- through arrangements made by) any one entity. If the Document
- already includes a cover text for the same cover, previously added
- by you or by arrangement made by the same entity you are acting on
- behalf of, you may not add another; but you may replace the old
- one, on explicit permission from the previous publisher that added
- the old one.
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
- 5. COMBINING DOCUMENTS
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination all
- of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
- In the combination, you must combine any sections Entitled
- “History” in the various original documents, forming one section
- Entitled “History”; likewise combine any sections Entitled
- “Acknowledgements”, and any sections Entitled “Dedications”. You
- must delete all sections Entitled “Endorsements.”
- 6. COLLECTIONS OF DOCUMENTS
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the documents
- in all other respects.
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow this
- License in all other respects regarding verbatim copying of that
- document.
- 7. AGGREGATION WITH INDEPENDENT WORKS
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of a
- storage or distribution medium, is called an “aggregate” if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation’s users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document’s Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
- 8. TRANSLATION
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
- If a section in the Document is Entitled “Acknowledgements”,
- “Dedications”, or “History”, the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
- 9. TERMINATION
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses terminated
- so long as such parties remain in full compliance.
- 10. FUTURE REVISIONS OF THIS LICENSE
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- <http://www.gnu.org/copyleft/>.
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License “or any later version” applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If the
- Document does not specify a version number of this License, you may
- choose any version ever published (not as a draft) by the Free
- Software Foundation.
- A.1 ADDENDUM: How to Use This License For Your Documents
- ========================================================
- To use this License in a document you have written, include a copy of
- the License in the document and put the following copyright and license
- notices just after the title page:
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
- Texts, replace the “with...Texts.” line with this:
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
- If you have Invariant Sections without Cover Texts, or some other
- combination of the three, merge those two alternatives to suit the
- situation.
- If your document contains nontrivial examples of program code, we
- recommend releasing these examples in parallel under your choice of free
- software license, such as the GNU General Public License, to permit
- their use in free software.
- File: mpfr.info, Node: Concept Index, Next: Function and Type Index, Prev: GNU Free Documentation License, Up: Top
- Concept Index
- *************
- �[index�]
- * Menu:
- * Accuracy: MPFR Interface. (line 25)
- * Arithmetic functions: Basic Arithmetic Functions.
- (line 3)
- * Assignment functions: Assignment Functions. (line 3)
- * Basic arithmetic functions: Basic Arithmetic Functions.
- (line 3)
- * Combined initialization and assignment functions: Combined Initialization and Assignment Functions.
- (line 3)
- * Comparison functions: Comparison Functions. (line 3)
- * Compatibility with MPF: Compatibility with MPF.
- (line 3)
- * Conditions for copying MPFR: Copying. (line 6)
- * Conversion functions: Conversion Functions. (line 3)
- * Copying conditions: Copying. (line 6)
- * Custom interface: Custom Interface. (line 3)
- * Exception related functions: Exception Related Functions.
- (line 3)
- * Float arithmetic functions: Basic Arithmetic Functions.
- (line 3)
- * Float comparisons functions: Comparison Functions. (line 3)
- * Float functions: MPFR Interface. (line 6)
- * Float input and output functions: Input and Output Functions.
- (line 3)
- * Float output functions: Formatted Output Functions.
- (line 3)
- * Floating-point functions: MPFR Interface. (line 6)
- * Floating-point number: Nomenclature and Types.
- (line 6)
- * GNU Free Documentation License: GNU Free Documentation License.
- (line 6)
- * GNU Free Documentation License <1>: GNU Free Documentation License.
- (line 6)
- * I/O functions: Input and Output Functions.
- (line 3)
- * I/O functions <1>: Formatted Output Functions.
- (line 3)
- * Initialization functions: Initialization Functions.
- (line 3)
- * Input functions: Input and Output Functions.
- (line 3)
- * Installation: Installing MPFR. (line 6)
- * Integer related functions: Integer Related Functions.
- (line 3)
- * Internals: Internals. (line 3)
- * intmax_t: Headers and Libraries.
- (line 22)
- * inttypes.h: Headers and Libraries.
- (line 22)
- * libmpfr: Headers and Libraries.
- (line 50)
- * Libraries: Headers and Libraries.
- (line 50)
- * Libtool: Headers and Libraries.
- (line 56)
- * Limb: Internals. (line 6)
- * Linking: Headers and Libraries.
- (line 50)
- * Miscellaneous float functions: Miscellaneous Functions.
- (line 3)
- * mpfr.h: Headers and Libraries.
- (line 6)
- * Output functions: Input and Output Functions.
- (line 3)
- * Output functions <1>: Formatted Output Functions.
- (line 3)
- * Precision: Nomenclature and Types.
- (line 20)
- * Precision <1>: MPFR Interface. (line 17)
- * Reporting bugs: Reporting Bugs. (line 6)
- * Rounding mode related functions: Rounding Related Functions.
- (line 3)
- * Rounding Modes: Nomenclature and Types.
- (line 34)
- * Special functions: Special Functions. (line 3)
- * stdarg.h: Headers and Libraries.
- (line 19)
- * stdint.h: Headers and Libraries.
- (line 22)
- * stdio.h: Headers and Libraries.
- (line 12)
- * Ternary value: Rounding Modes. (line 24)
- * uintmax_t: Headers and Libraries.
- (line 22)
- File: mpfr.info, Node: Function and Type Index, Prev: Concept Index, Up: Top
- Function and Type Index
- ***********************
- �[index�]
- * Menu:
- * mpfr_abs: Basic Arithmetic Functions.
- (line 165)
- * mpfr_acos: Special Functions. (line 53)
- * mpfr_acosh: Special Functions. (line 117)
- * mpfr_add: Basic Arithmetic Functions.
- (line 6)
- * mpfr_add_d: Basic Arithmetic Functions.
- (line 12)
- * mpfr_add_q: Basic Arithmetic Functions.
- (line 16)
- * mpfr_add_si: Basic Arithmetic Functions.
- (line 10)
- * mpfr_add_ui: Basic Arithmetic Functions.
- (line 8)
- * mpfr_add_z: Basic Arithmetic Functions.
- (line 14)
- * mpfr_agm: Special Functions. (line 219)
- * mpfr_ai: Special Functions. (line 236)
- * mpfr_asin: Special Functions. (line 54)
- * mpfr_asinh: Special Functions. (line 118)
- * mpfr_asprintf: Formatted Output Functions.
- (line 193)
- * mpfr_atan: Special Functions. (line 55)
- * mpfr_atan2: Special Functions. (line 65)
- * mpfr_atanh: Special Functions. (line 119)
- * mpfr_buildopt_decimal_p: Miscellaneous Functions.
- (line 162)
- * mpfr_buildopt_gmpinternals_p: Miscellaneous Functions.
- (line 167)
- * mpfr_buildopt_tls_p: Miscellaneous Functions.
- (line 156)
- * mpfr_buildopt_tune_case: Miscellaneous Functions.
- (line 172)
- * mpfr_can_round: Rounding Related Functions.
- (line 39)
- * mpfr_cbrt: Basic Arithmetic Functions.
- (line 113)
- * mpfr_ceil: Integer Related Functions.
- (line 7)
- * mpfr_check_range: Exception Related Functions.
- (line 37)
- * mpfr_clear: Initialization Functions.
- (line 30)
- * mpfr_clears: Initialization Functions.
- (line 35)
- * mpfr_clear_divby0: Exception Related Functions.
- (line 112)
- * mpfr_clear_erangeflag: Exception Related Functions.
- (line 115)
- * mpfr_clear_flags: Exception Related Functions.
- (line 128)
- * mpfr_clear_inexflag: Exception Related Functions.
- (line 114)
- * mpfr_clear_nanflag: Exception Related Functions.
- (line 113)
- * mpfr_clear_overflow: Exception Related Functions.
- (line 111)
- * mpfr_clear_underflow: Exception Related Functions.
- (line 110)
- * mpfr_cmp: Comparison Functions.
- (line 6)
- * mpfr_cmpabs: Comparison Functions.
- (line 34)
- * mpfr_cmp_d: Comparison Functions.
- (line 9)
- * mpfr_cmp_f: Comparison Functions.
- (line 13)
- * mpfr_cmp_ld: Comparison Functions.
- (line 10)
- * mpfr_cmp_q: Comparison Functions.
- (line 12)
- * mpfr_cmp_si: Comparison Functions.
- (line 8)
- * mpfr_cmp_si_2exp: Comparison Functions.
- (line 29)
- * mpfr_cmp_ui: Comparison Functions.
- (line 7)
- * mpfr_cmp_ui_2exp: Comparison Functions.
- (line 27)
- * mpfr_cmp_z: Comparison Functions.
- (line 11)
- * mpfr_const_catalan: Special Functions. (line 247)
- * mpfr_const_euler: Special Functions. (line 246)
- * mpfr_const_log2: Special Functions. (line 244)
- * mpfr_const_pi: Special Functions. (line 245)
- * mpfr_copysign: Miscellaneous Functions.
- (line 109)
- * mpfr_cos: Special Functions. (line 31)
- * mpfr_cosh: Special Functions. (line 97)
- * mpfr_cot: Special Functions. (line 49)
- * mpfr_coth: Special Functions. (line 113)
- * mpfr_csc: Special Functions. (line 48)
- * mpfr_csch: Special Functions. (line 112)
- * mpfr_custom_get_exp: Custom Interface. (line 75)
- * mpfr_custom_get_kind: Custom Interface. (line 65)
- * mpfr_custom_get_significand: Custom Interface. (line 70)
- * mpfr_custom_get_size: Custom Interface. (line 37)
- * mpfr_custom_init: Custom Interface. (line 41)
- * mpfr_custom_init_set: Custom Interface. (line 48)
- * mpfr_custom_move: Custom Interface. (line 82)
- * MPFR_DECL_INIT: Initialization Functions.
- (line 74)
- * mpfr_digamma: Special Functions. (line 172)
- * mpfr_dim: Basic Arithmetic Functions.
- (line 171)
- * mpfr_div: Basic Arithmetic Functions.
- (line 74)
- * mpfr_divby0_p: Exception Related Functions.
- (line 134)
- * mpfr_div_2exp: Compatibility with MPF.
- (line 49)
- * mpfr_div_2si: Basic Arithmetic Functions.
- (line 186)
- * mpfr_div_2ui: Basic Arithmetic Functions.
- (line 184)
- * mpfr_div_d: Basic Arithmetic Functions.
- (line 86)
- * mpfr_div_q: Basic Arithmetic Functions.
- (line 90)
- * mpfr_div_si: Basic Arithmetic Functions.
- (line 82)
- * mpfr_div_ui: Basic Arithmetic Functions.
- (line 78)
- * mpfr_div_z: Basic Arithmetic Functions.
- (line 88)
- * mpfr_d_div: Basic Arithmetic Functions.
- (line 84)
- * mpfr_d_sub: Basic Arithmetic Functions.
- (line 36)
- * mpfr_eint: Special Functions. (line 135)
- * mpfr_eq: Compatibility with MPF.
- (line 28)
- * mpfr_equal_p: Comparison Functions.
- (line 59)
- * mpfr_erangeflag_p: Exception Related Functions.
- (line 137)
- * mpfr_erf: Special Functions. (line 183)
- * mpfr_erfc: Special Functions. (line 184)
- * mpfr_exp: Special Functions. (line 25)
- * mpfr_exp10: Special Functions. (line 27)
- * mpfr_exp2: Special Functions. (line 26)
- * mpfr_expm1: Special Functions. (line 131)
- * mpfr_fac_ui: Special Functions. (line 123)
- * mpfr_fits_intmax_p: Conversion Functions.
- (line 150)
- * mpfr_fits_sint_p: Conversion Functions.
- (line 146)
- * mpfr_fits_slong_p: Conversion Functions.
- (line 144)
- * mpfr_fits_sshort_p: Conversion Functions.
- (line 148)
- * mpfr_fits_uintmax_p: Conversion Functions.
- (line 149)
- * mpfr_fits_uint_p: Conversion Functions.
- (line 145)
- * mpfr_fits_ulong_p: Conversion Functions.
- (line 143)
- * mpfr_fits_ushort_p: Conversion Functions.
- (line 147)
- * mpfr_floor: Integer Related Functions.
- (line 8)
- * mpfr_fma: Special Functions. (line 209)
- * mpfr_fmod: Integer Related Functions.
- (line 92)
- * mpfr_fms: Special Functions. (line 211)
- * mpfr_fprintf: Formatted Output Functions.
- (line 157)
- * mpfr_frac: Integer Related Functions.
- (line 76)
- * mpfr_free_cache: Special Functions. (line 254)
- * mpfr_free_str: Conversion Functions.
- (line 137)
- * mpfr_frexp: Conversion Functions.
- (line 45)
- * mpfr_gamma: Special Functions. (line 150)
- * mpfr_get_d: Conversion Functions.
- (line 7)
- * mpfr_get_decimal64: Conversion Functions.
- (line 9)
- * mpfr_get_default_prec: Initialization Functions.
- (line 112)
- * mpfr_get_default_rounding_mode: Rounding Related Functions.
- (line 10)
- * mpfr_get_d_2exp: Conversion Functions.
- (line 32)
- * mpfr_get_emax: Exception Related Functions.
- (line 7)
- * mpfr_get_emax_max: Exception Related Functions.
- (line 30)
- * mpfr_get_emax_min: Exception Related Functions.
- (line 29)
- * mpfr_get_emin: Exception Related Functions.
- (line 6)
- * mpfr_get_emin_max: Exception Related Functions.
- (line 28)
- * mpfr_get_emin_min: Exception Related Functions.
- (line 27)
- * mpfr_get_exp: Miscellaneous Functions.
- (line 88)
- * mpfr_get_f: Conversion Functions.
- (line 72)
- * mpfr_get_flt: Conversion Functions.
- (line 6)
- * mpfr_get_ld: Conversion Functions.
- (line 8)
- * mpfr_get_ld_2exp: Conversion Functions.
- (line 34)
- * mpfr_get_patches: Miscellaneous Functions.
- (line 147)
- * mpfr_get_prec: Initialization Functions.
- (line 149)
- * mpfr_get_si: Conversion Functions.
- (line 19)
- * mpfr_get_sj: Conversion Functions.
- (line 21)
- * mpfr_get_str: Conversion Functions.
- (line 85)
- * mpfr_get_ui: Conversion Functions.
- (line 20)
- * mpfr_get_uj: Conversion Functions.
- (line 22)
- * mpfr_get_version: Miscellaneous Functions.
- (line 116)
- * mpfr_get_z: Conversion Functions.
- (line 67)
- * mpfr_get_z_2exp: Conversion Functions.
- (line 54)
- * mpfr_grandom: Miscellaneous Functions.
- (line 63)
- * mpfr_greaterequal_p: Comparison Functions.
- (line 56)
- * mpfr_greater_p: Comparison Functions.
- (line 55)
- * mpfr_hypot: Special Functions. (line 227)
- * mpfr_inexflag_p: Exception Related Functions.
- (line 136)
- * mpfr_inf_p: Comparison Functions.
- (line 40)
- * mpfr_init: Initialization Functions.
- (line 53)
- * mpfr_init2: Initialization Functions.
- (line 10)
- * mpfr_inits: Initialization Functions.
- (line 62)
- * mpfr_inits2: Initialization Functions.
- (line 22)
- * mpfr_init_set: Combined Initialization and Assignment Functions.
- (line 6)
- * mpfr_init_set_d: Combined Initialization and Assignment Functions.
- (line 11)
- * mpfr_init_set_f: Combined Initialization and Assignment Functions.
- (line 16)
- * mpfr_init_set_ld: Combined Initialization and Assignment Functions.
- (line 12)
- * mpfr_init_set_q: Combined Initialization and Assignment Functions.
- (line 15)
- * mpfr_init_set_si: Combined Initialization and Assignment Functions.
- (line 9)
- * mpfr_init_set_str: Combined Initialization and Assignment Functions.
- (line 21)
- * mpfr_init_set_ui: Combined Initialization and Assignment Functions.
- (line 7)
- * mpfr_init_set_z: Combined Initialization and Assignment Functions.
- (line 14)
- * mpfr_inp_str: Input and Output Functions.
- (line 31)
- * mpfr_integer_p: Integer Related Functions.
- (line 119)
- * mpfr_j0: Special Functions. (line 188)
- * mpfr_j1: Special Functions. (line 189)
- * mpfr_jn: Special Functions. (line 190)
- * mpfr_lessequal_p: Comparison Functions.
- (line 58)
- * mpfr_lessgreater_p: Comparison Functions.
- (line 64)
- * mpfr_less_p: Comparison Functions.
- (line 57)
- * mpfr_lgamma: Special Functions. (line 162)
- * mpfr_li2: Special Functions. (line 145)
- * mpfr_lngamma: Special Functions. (line 154)
- * mpfr_log: Special Functions. (line 16)
- * mpfr_log10: Special Functions. (line 18)
- * mpfr_log1p: Special Functions. (line 127)
- * mpfr_log2: Special Functions. (line 17)
- * mpfr_max: Miscellaneous Functions.
- (line 22)
- * mpfr_min: Miscellaneous Functions.
- (line 20)
- * mpfr_min_prec: Rounding Related Functions.
- (line 64)
- * mpfr_modf: Integer Related Functions.
- (line 82)
- * mpfr_mul: Basic Arithmetic Functions.
- (line 53)
- * mpfr_mul_2exp: Compatibility with MPF.
- (line 47)
- * mpfr_mul_2si: Basic Arithmetic Functions.
- (line 179)
- * mpfr_mul_2ui: Basic Arithmetic Functions.
- (line 177)
- * mpfr_mul_d: Basic Arithmetic Functions.
- (line 59)
- * mpfr_mul_q: Basic Arithmetic Functions.
- (line 63)
- * mpfr_mul_si: Basic Arithmetic Functions.
- (line 57)
- * mpfr_mul_ui: Basic Arithmetic Functions.
- (line 55)
- * mpfr_mul_z: Basic Arithmetic Functions.
- (line 61)
- * mpfr_nanflag_p: Exception Related Functions.
- (line 135)
- * mpfr_nan_p: Comparison Functions.
- (line 39)
- * mpfr_neg: Basic Arithmetic Functions.
- (line 164)
- * mpfr_nextabove: Miscellaneous Functions.
- (line 15)
- * mpfr_nextbelow: Miscellaneous Functions.
- (line 16)
- * mpfr_nexttoward: Miscellaneous Functions.
- (line 6)
- * mpfr_number_p: Comparison Functions.
- (line 41)
- * mpfr_out_str: Input and Output Functions.
- (line 15)
- * mpfr_overflow_p: Exception Related Functions.
- (line 133)
- * mpfr_pow: Basic Arithmetic Functions.
- (line 121)
- * mpfr_pow_si: Basic Arithmetic Functions.
- (line 125)
- * mpfr_pow_ui: Basic Arithmetic Functions.
- (line 123)
- * mpfr_pow_z: Basic Arithmetic Functions.
- (line 127)
- * mpfr_prec_round: Rounding Related Functions.
- (line 13)
- * mpfr_prec_t: Nomenclature and Types.
- (line 20)
- * mpfr_printf: Formatted Output Functions.
- (line 164)
- * mpfr_print_rnd_mode: Rounding Related Functions.
- (line 71)
- * mpfr_rec_sqrt: Basic Arithmetic Functions.
- (line 105)
- * mpfr_regular_p: Comparison Functions.
- (line 43)
- * mpfr_reldiff: Compatibility with MPF.
- (line 39)
- * mpfr_remainder: Integer Related Functions.
- (line 94)
- * mpfr_remquo: Integer Related Functions.
- (line 96)
- * mpfr_rint: Integer Related Functions.
- (line 6)
- * mpfr_rint_ceil: Integer Related Functions.
- (line 46)
- * mpfr_rint_floor: Integer Related Functions.
- (line 47)
- * mpfr_rint_round: Integer Related Functions.
- (line 49)
- * mpfr_rint_trunc: Integer Related Functions.
- (line 51)
- * mpfr_rnd_t: Nomenclature and Types.
- (line 34)
- * mpfr_root: Basic Arithmetic Functions.
- (line 114)
- * mpfr_round: Integer Related Functions.
- (line 9)
- * mpfr_sec: Special Functions. (line 47)
- * mpfr_sech: Special Functions. (line 111)
- * mpfr_set: Assignment Functions.
- (line 9)
- * mpfr_setsign: Miscellaneous Functions.
- (line 103)
- * mpfr_set_d: Assignment Functions.
- (line 16)
- * mpfr_set_decimal64: Assignment Functions.
- (line 19)
- * mpfr_set_default_prec: Initialization Functions.
- (line 100)
- * mpfr_set_default_rounding_mode: Rounding Related Functions.
- (line 6)
- * mpfr_set_divby0: Exception Related Functions.
- (line 121)
- * mpfr_set_emax: Exception Related Functions.
- (line 16)
- * mpfr_set_emin: Exception Related Functions.
- (line 15)
- * mpfr_set_erangeflag: Exception Related Functions.
- (line 124)
- * mpfr_set_exp: Miscellaneous Functions.
- (line 93)
- * mpfr_set_f: Assignment Functions.
- (line 23)
- * mpfr_set_flt: Assignment Functions.
- (line 15)
- * mpfr_set_inexflag: Exception Related Functions.
- (line 123)
- * mpfr_set_inf: Assignment Functions.
- (line 143)
- * mpfr_set_ld: Assignment Functions.
- (line 17)
- * mpfr_set_nan: Assignment Functions.
- (line 142)
- * mpfr_set_nanflag: Exception Related Functions.
- (line 122)
- * mpfr_set_overflow: Exception Related Functions.
- (line 120)
- * mpfr_set_prec: Initialization Functions.
- (line 135)
- * mpfr_set_prec_raw: Compatibility with MPF.
- (line 22)
- * mpfr_set_q: Assignment Functions.
- (line 22)
- * mpfr_set_si: Assignment Functions.
- (line 12)
- * mpfr_set_si_2exp: Assignment Functions.
- (line 50)
- * mpfr_set_sj: Assignment Functions.
- (line 14)
- * mpfr_set_sj_2exp: Assignment Functions.
- (line 54)
- * mpfr_set_str: Assignment Functions.
- (line 62)
- * mpfr_set_ui: Assignment Functions.
- (line 10)
- * mpfr_set_ui_2exp: Assignment Functions.
- (line 48)
- * mpfr_set_uj: Assignment Functions.
- (line 13)
- * mpfr_set_uj_2exp: Assignment Functions.
- (line 52)
- * mpfr_set_underflow: Exception Related Functions.
- (line 119)
- * mpfr_set_z: Assignment Functions.
- (line 21)
- * mpfr_set_zero: Assignment Functions.
- (line 144)
- * mpfr_set_z_2exp: Assignment Functions.
- (line 56)
- * mpfr_sgn: Comparison Functions.
- (line 49)
- * mpfr_signbit: Miscellaneous Functions.
- (line 99)
- * mpfr_sin: Special Functions. (line 32)
- * mpfr_sinh: Special Functions. (line 98)
- * mpfr_sinh_cosh: Special Functions. (line 103)
- * mpfr_sin_cos: Special Functions. (line 37)
- * mpfr_si_div: Basic Arithmetic Functions.
- (line 80)
- * mpfr_si_sub: Basic Arithmetic Functions.
- (line 32)
- * mpfr_snprintf: Formatted Output Functions.
- (line 180)
- * mpfr_sprintf: Formatted Output Functions.
- (line 170)
- * mpfr_sqr: Basic Arithmetic Functions.
- (line 71)
- * mpfr_sqrt: Basic Arithmetic Functions.
- (line 98)
- * mpfr_sqrt_ui: Basic Arithmetic Functions.
- (line 99)
- * mpfr_strtofr: Assignment Functions.
- (line 80)
- * mpfr_sub: Basic Arithmetic Functions.
- (line 26)
- * mpfr_subnormalize: Exception Related Functions.
- (line 60)
- * mpfr_sub_d: Basic Arithmetic Functions.
- (line 38)
- * mpfr_sub_q: Basic Arithmetic Functions.
- (line 44)
- * mpfr_sub_si: Basic Arithmetic Functions.
- (line 34)
- * mpfr_sub_ui: Basic Arithmetic Functions.
- (line 30)
- * mpfr_sub_z: Basic Arithmetic Functions.
- (line 42)
- * mpfr_sum: Special Functions. (line 262)
- * mpfr_swap: Assignment Functions.
- (line 150)
- * mpfr_t: Nomenclature and Types.
- (line 6)
- * mpfr_tan: Special Functions. (line 33)
- * mpfr_tanh: Special Functions. (line 99)
- * mpfr_trunc: Integer Related Functions.
- (line 10)
- * mpfr_ui_div: Basic Arithmetic Functions.
- (line 76)
- * mpfr_ui_pow: Basic Arithmetic Functions.
- (line 131)
- * mpfr_ui_pow_ui: Basic Arithmetic Functions.
- (line 129)
- * mpfr_ui_sub: Basic Arithmetic Functions.
- (line 28)
- * mpfr_underflow_p: Exception Related Functions.
- (line 132)
- * mpfr_unordered_p: Comparison Functions.
- (line 69)
- * mpfr_urandom: Miscellaneous Functions.
- (line 48)
- * mpfr_urandomb: Miscellaneous Functions.
- (line 29)
- * mpfr_vasprintf: Formatted Output Functions.
- (line 194)
- * MPFR_VERSION: Miscellaneous Functions.
- (line 119)
- * MPFR_VERSION_MAJOR: Miscellaneous Functions.
- (line 120)
- * MPFR_VERSION_MINOR: Miscellaneous Functions.
- (line 121)
- * MPFR_VERSION_NUM: Miscellaneous Functions.
- (line 139)
- * MPFR_VERSION_PATCHLEVEL: Miscellaneous Functions.
- (line 122)
- * MPFR_VERSION_STRING: Miscellaneous Functions.
- (line 123)
- * mpfr_vfprintf: Formatted Output Functions.
- (line 158)
- * mpfr_vprintf: Formatted Output Functions.
- (line 165)
- * mpfr_vsnprintf: Formatted Output Functions.
- (line 182)
- * mpfr_vsprintf: Formatted Output Functions.
- (line 171)
- * mpfr_y0: Special Functions. (line 199)
- * mpfr_y1: Special Functions. (line 200)
- * mpfr_yn: Special Functions. (line 201)
- * mpfr_zero_p: Comparison Functions.
- (line 42)
- * mpfr_zeta: Special Functions. (line 177)
- * mpfr_zeta_ui: Special Functions. (line 178)
- * mpfr_z_sub: Basic Arithmetic Functions.
- (line 40)
- Tag Table:
- Node: Top775
- Node: Copying2007
- Node: Introduction to MPFR3770
- Node: Installing MPFR5884
- Node: Reporting Bugs11328
- Node: MPFR Basics13359
- Node: Headers and Libraries13675
- Node: Nomenclature and Types16829
- Node: MPFR Variable Conventions18892
- Node: Rounding Modes20436
- Ref: ternary value21566
- Node: Floating-Point Values on Special Numbers23552
- Node: Exceptions26812
- Node: Memory Handling29989
- Node: MPFR Interface31135
- Node: Initialization Functions33249
- Node: Assignment Functions40564
- Node: Combined Initialization and Assignment Functions49920
- Node: Conversion Functions51221
- Node: Basic Arithmetic Functions60283
- Node: Comparison Functions69785
- Node: Special Functions73273
- Node: Input and Output Functions87874
- Node: Formatted Output Functions89846
- Node: Integer Related Functions99633
- Node: Rounding Related Functions106254
- Node: Miscellaneous Functions110091
- Node: Exception Related Functions118774
- Node: Compatibility with MPF125592
- Node: Custom Interface128334
- Node: Internals132733
- Node: API Compatibility134277
- Node: Type and Macro Changes136207
- Node: Added Functions139056
- Node: Changed Functions142344
- Node: Removed Functions146758
- Node: Other Changes147186
- Node: Contributors148789
- Node: References151442
- Node: GNU Free Documentation License153196
- Node: Concept Index175789
- Node: Function and Type Index181854
- End Tag Table
- Local Variables:
- coding: utf-8
- End:
|