summaryrefslogtreecommitdiff
path: root/FAQ.html
blob: 2e62af7dd6bfc0b77622afccaa50ce251e2a0425 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Frequently Asked Questions about MPFR</title>
<style type="text/css">
dt
{
  margin-top: 2ex;
  margin-bottom: 1ex;
  font-weight: bolder;
}
</style>
</head>

<body>

<h1>Frequently Asked Questions about <cite><acronym>MPFR</acronym></cite></h1>

<p><strong>Important notice: Problems with a particular version of
<cite><acronym>MPFR</acronym></cite> are discussed in the corresponding
bugs page.</strong></p>

<p>The latest version of this <acronym>FAQ</acronym> is available at
<a href="http://www.mpfr.org/faq.html">http://www.mpfr.org/faq.html</a>.</p>

<dl>

<dt>What are the differences between <cite><acronym>MPF</acronym></cite>
from <cite><acronym>GMP</acronym></cite> and
<cite><acronym>MPFR</acronym></cite>?</dt>

<dd>Unlike <cite><acronym>MPF</acronym></cite>, the precision of a
<cite><acronym>MPFR</acronym></cite> variable is the <em>exact</em>
number of bits used for its mantissa. This implies that
<cite><acronym>MPFR</acronym></cite> results do not depend on the
number of bits (16, 32, 64 or more) of the underlying architecture.
Also, <cite><acronym>MPFR</acronym></cite> provides an additional
rounding mode argument to its functions; furthermore, it is guaranteed
that the result of any operation is the nearest possible
floating-point value from the exact result (considering the input
variables as exact values), taking into account the precision of the
destination variable and the rounding mode.</dd>

<dt>How to convert my program written using
<cite><acronym>MPF</acronym></cite> to
<cite><acronym>MPFR</acronym></cite>?</dt>

<dd>You need to add <q><code>r</code></q> to the function names, and to
specify the rounding mode (<code>GMP_RNDN</code> for rounding to nearest,
<code>GMP_RNDZ</code> for rounding towards zero, <code>GMP_RNDU</code>
for rounding towards plus infinity, <code>GMP_RNDD</code> for rounding
towards minus infinity). You can also define macros as follows:
<pre>#define mpf_add(a, b, c) mpfr_add(a, b, c, GMP_RNDN)</pre>
The header file <samp>mpf2mpfr.h</samp> from the
<cite><acronym>MPFR</acronym></cite> distribution automatically
redefines all <cite><acronym>MPF</acronym></cite> functions in this
way, using the default <cite><acronym>MPFR</acronym></cite> rounding
mode. Thus you simply need to add the following line in all your files
using <cite><acronym>MPF</acronym></cite> functions:
<pre>#include &lt;mpf2mpfr.h&gt;</pre>
just after the <samp>gmp.h</samp> and <samp>mpfr.h</samp> header files.</dd>

<dt>When I link my program with <cite><acronym>MPFR</acronym></cite>,
I get undefined reference to <code>__gmpz_XXXX</code>,
<code>__gmpn_XXXX</code>.</dt>

<dd>Link your program with <cite><acronym>GMP</acronym></cite>. Assuming
that your program is <samp>foo.c</samp>, you should link it using:
<pre>    cc link.c -lmpfr -lgmp</pre>
<cite><acronym>MPFR</acronym></cite> library reference (<samp>-lmpfr</samp>)
should be before <cite><acronym>GMP</acronym></cite>'s one
(<samp>-lgmp</samp>). Another solution is, with <acronym>GNU</acronym>
<samp>ld</samp>, to give all the libraries inside a group:
<pre>    gcc link.c -Wl,--start-group libgmp.a libmpfr.a -Wl,--end-group</pre>
See <samp>ld</samp> manual for more details.</dd>

<dt>My program crashes with high precisions.</dt>

<dd>Your stack size limit may be too small. You can increase it with the
<samp>limit</samp>, <samp>unlimit</samp> or <samp>ulimit</samp> command,
depending on your shell.</dd>

</dl>

</body>

</html>