You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
8.5 KiB
HTML
167 lines
8.5 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<!-- This manual documents how to install and use the Multiple Precision
|
|
Floating-Point Reliable Library, version 3.1.4.
|
|
|
|
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 GNU Free Documentation License. -->
|
|
<!-- Created by GNU Texinfo 6.4, http://www.gnu.org/software/texinfo/ -->
|
|
<head>
|
|
<title>Rounding Related Functions (GNU MPFR 3.1.4)</title>
|
|
|
|
<meta name="description" content="How to install and use GNU MPFR, a library for reliable multiple precision
|
|
floating-point arithmetic, version 3.1.4.">
|
|
<meta name="keywords" content="Rounding Related Functions (GNU MPFR 3.1.4)">
|
|
<meta name="resource-type" content="document">
|
|
<meta name="distribution" content="global">
|
|
<meta name="Generator" content="makeinfo">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link href="index.html#Top" rel="start" title="Top">
|
|
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
|
|
<link href="MPFR-Interface.html#MPFR-Interface" rel="up" title="MPFR Interface">
|
|
<link href="Miscellaneous-Functions.html#Miscellaneous-Functions" rel="next" title="Miscellaneous Functions">
|
|
<link href="Integer-Related-Functions.html#Integer-Related-Functions" rel="prev" title="Integer Related Functions">
|
|
<style type="text/css">
|
|
<!--
|
|
a.summary-letter {text-decoration: none}
|
|
blockquote.indentedblock {margin-right: 0em}
|
|
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
|
|
blockquote.smallquotation {font-size: smaller}
|
|
div.display {margin-left: 3.2em}
|
|
div.example {margin-left: 3.2em}
|
|
div.lisp {margin-left: 3.2em}
|
|
div.smalldisplay {margin-left: 3.2em}
|
|
div.smallexample {margin-left: 3.2em}
|
|
div.smalllisp {margin-left: 3.2em}
|
|
kbd {font-style: oblique}
|
|
pre.display {font-family: inherit}
|
|
pre.format {font-family: inherit}
|
|
pre.menu-comment {font-family: serif}
|
|
pre.menu-preformatted {font-family: serif}
|
|
pre.smalldisplay {font-family: inherit; font-size: smaller}
|
|
pre.smallexample {font-size: smaller}
|
|
pre.smallformat {font-family: inherit; font-size: smaller}
|
|
pre.smalllisp {font-size: smaller}
|
|
span.nolinebreak {white-space: nowrap}
|
|
span.roman {font-family: initial; font-weight: normal}
|
|
span.sansserif {font-family: sans-serif; font-weight: normal}
|
|
ul.no-bullet {list-style: none}
|
|
-->
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body lang="en">
|
|
<a name="Rounding-Related-Functions"></a>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Miscellaneous-Functions.html#Miscellaneous-Functions" accesskey="n" rel="next">Miscellaneous Functions</a>, Previous: <a href="Integer-Related-Functions.html#Integer-Related-Functions" accesskey="p" rel="prev">Integer Related Functions</a>, Up: <a href="MPFR-Interface.html#MPFR-Interface" accesskey="u" rel="up">MPFR Interface</a> [<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<hr>
|
|
<a name="index-Rounding-mode-related-functions"></a>
|
|
<a name="Rounding-Related-Functions-1"></a>
|
|
<h3 class="section">5.11 Rounding Related Functions</h3>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fset_005fdefault_005frounding_005fmode"></a>Function: <em>void</em> <strong>mpfr_set_default_rounding_mode</strong> <em>(mpfr_rnd_t <var>rnd</var>)</em></dt>
|
|
<dd><p>Set the default rounding mode to <var>rnd</var>.
|
|
The default rounding mode is to nearest initially.
|
|
</p></dd></dl>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fget_005fdefault_005frounding_005fmode"></a>Function: <em>mpfr_rnd_t</em> <strong>mpfr_get_default_rounding_mode</strong> <em>(void)</em></dt>
|
|
<dd><p>Get the default rounding mode.
|
|
</p></dd></dl>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fprec_005fround"></a>Function: <em>int</em> <strong>mpfr_prec_round</strong> <em>(mpfr_t <var>x</var>, mpfr_prec_t <var>prec</var>, mpfr_rnd_t <var>rnd</var>)</em></dt>
|
|
<dd><p>Round <var>x</var> according to <var>rnd</var> with precision <var>prec</var>, which
|
|
must be an integer between <code>MPFR_PREC_MIN</code> and <code>MPFR_PREC_MAX</code>
|
|
(otherwise the behavior is undefined).
|
|
If <var>prec</var> is greater or equal to the precision of <var>x</var>, then new
|
|
space is allocated for the significand, and it is filled with zeros.
|
|
Otherwise, the significand is rounded to precision <var>prec</var> with the given
|
|
direction. In both cases, the precision of <var>x</var> is changed to <var>prec</var>.
|
|
</p>
|
|
<p>Here is an example of how to use <code>mpfr_prec_round</code> to implement
|
|
Newton’s algorithm to compute the inverse of <var>a</var>, assuming <var>x</var> is
|
|
already an approximation to <var>n</var> bits:
|
|
</p><div class="example">
|
|
<pre class="example"> 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 */
|
|
</pre></div>
|
|
|
|
<p>Warning! You must not use this function if <var>x</var> was initialized
|
|
with <code>MPFR_DECL_INIT</code> or with <code>mpfr_custom_init_set</code>
|
|
(see <a href="Custom-Interface.html#Custom-Interface">Custom Interface</a>).
|
|
</p></dd></dl>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fcan_005fround"></a>Function: <em>int</em> <strong>mpfr_can_round</strong> <em>(mpfr_t <var>b</var>, mpfr_exp_t <var>err</var>, mpfr_rnd_t <var>rnd1</var>, mpfr_rnd_t <var>rnd2</var>, mpfr_prec_t <var>prec</var>)</em></dt>
|
|
<dd><p>Assuming <var>b</var> is an approximation of an unknown number
|
|
<var>x</var> in the direction <var>rnd1</var> with error at most two to the power
|
|
E(b)-<var>err</var> where E(b) is the exponent of <var>b</var>, return a non-zero
|
|
value if one is able to round correctly <var>x</var> to precision
|
|
<var>prec</var> with the direction <var>rnd2</var>,
|
|
and 0 otherwise (including for NaN and Inf).
|
|
This function <strong>does not modify</strong> its arguments.
|
|
</p>
|
|
<p>If <var>rnd1</var> is <code>MPFR_RNDN</code>, 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 <var>rnd1</var>.
|
|
</p>
|
|
<p>Note: if one wants to also determine the correct <a href="Rounding-Modes.html#ternary-value">ternary value</a> when
|
|
rounding <var>b</var> to precision <var>prec</var> with rounding mode <var>rnd</var>,
|
|
a useful trick is the following:
|
|
</p><div class="example">
|
|
<pre class="example">if (mpfr_can_round (b, err, MPFR_RNDN, MPFR_RNDZ,
|
|
prec + (rnd == MPFR_RNDN)))
|
|
...
|
|
</pre></div>
|
|
<p>Indeed, if <var>rnd</var> is <code>MPFR_RNDN</code>, this will check if one can
|
|
round to <var>prec</var>+1 bits with a directed rounding:
|
|
if so, one can surely round to nearest to <var>prec</var> bits,
|
|
and in addition one can determine the correct ternary value, which would not
|
|
be the case when <var>b</var> is near from a value exactly representable on
|
|
<var>prec</var> bits.
|
|
</p></dd></dl>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fmin_005fprec"></a>Function: <em>mpfr_prec_t</em> <strong>mpfr_min_prec</strong> <em>(mpfr_t <var>x</var>)</em></dt>
|
|
<dd><p>Return the minimal number of bits required to store the significand of
|
|
<var>x</var>, and 0 for special values, including 0. (Warning: the returned
|
|
value can be less than <code>MPFR_PREC_MIN</code>.)
|
|
</p>
|
|
<p>The function name is subject to change.
|
|
</p></dd></dl>
|
|
|
|
<dl>
|
|
<dt><a name="index-mpfr_005fprint_005frnd_005fmode"></a>Function: <em>const char *</em> <strong>mpfr_print_rnd_mode</strong> <em>(mpfr_rnd_t <var>rnd</var>)</em></dt>
|
|
<dd><p>Return a string ("MPFR_RNDD", "MPFR_RNDU", "MPFR_RNDN", "MPFR_RNDZ",
|
|
"MPFR_RNDA") corresponding to the rounding mode <var>rnd</var>, or a null pointer
|
|
if <var>rnd</var> is an invalid rounding mode.
|
|
</p></dd></dl>
|
|
|
|
<hr>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Miscellaneous-Functions.html#Miscellaneous-Functions" accesskey="n" rel="next">Miscellaneous Functions</a>, Previous: <a href="Integer-Related-Functions.html#Integer-Related-Functions" accesskey="p" rel="prev">Integer Related Functions</a>, Up: <a href="MPFR-Interface.html#MPFR-Interface" accesskey="u" rel="up">MPFR Interface</a> [<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|