003 File Manager
Current Path:
/usr/local/share/doc/mpdecimal/libmpdec
usr
/
local
/
share
/
doc
/
mpdecimal
/
libmpdec
/
📁
..
📄
README.txt
(88 B)
📁
_static
📄
arithmetic.html
(109.46 KB)
📄
assign-convert.html
(56.83 KB)
📄
attributes.html
(24.85 KB)
📄
context.html
(37.84 KB)
📄
decimals.html
(8.45 KB)
📄
functions.html
(58.37 KB)
📄
index.html
(16.95 KB)
📄
memory.html
(15.59 KB)
📄
objects.inv
(1.83 KB)
📄
search.html
(2.76 KB)
📄
searchindex.js
(30.97 KB)
📄
various.html
(40.5 KB)
Editing: arithmetic.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta content="index,follow" name="robots" /> <meta content="libmpdec documentation" name="description" /> <title>Arithmetic Functions — mpdecimal 2.5.1 documentation</title> <link rel="stylesheet" href="_static/mpdecimal-doc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/doctools.js"></script> <script src="_static/language_data.js"></script> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Various Functions" href="various.html" /> <link rel="prev" title="Attributes of a Decimal" href="attributes.html" /> </head><body> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="various.html" title="Various Functions" accesskey="N">next</a></li> <li class="right" > <a href="attributes.html" title="Attributes of a Decimal" accesskey="P">previous</a> |</li> <li><a href="http://www.bytereef.org/mpdecimal/index.html">project home</a></li> </ul> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3><a href="index.html">Table of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Arithmetic Functions</a><ul> <li><a class="reference internal" href="#basic-arithmetic">Basic Arithmetic</a><ul> <li><a class="reference internal" href="#add">add</a></li> <li><a class="reference internal" href="#subtract">subtract</a></li> <li><a class="reference internal" href="#multiply">multiply</a></li> <li><a class="reference internal" href="#divide">divide</a></li> <li><a class="reference internal" href="#fused-multiply-add">fused-multiply-add</a></li> </ul> </li> <li><a class="reference internal" href="#integer-division">Integer Division</a><ul> <li><a class="reference internal" href="#divide-integer">divide-integer</a></li> <li><a class="reference internal" href="#remainder">remainder</a></li> <li><a class="reference internal" href="#remainder-near">remainder-near</a></li> <li><a class="reference internal" href="#divmod">divmod</a></li> </ul> </li> <li><a class="reference internal" href="#powers-and-logarithms">Powers and Logarithms</a><ul> <li><a class="reference internal" href="#exp">exp</a></li> <li><a class="reference internal" href="#ln">ln</a></li> <li><a class="reference internal" href="#log10">log10</a></li> <li><a class="reference internal" href="#power">power</a></li> <li><a class="reference internal" href="#square-root">square-root</a></li> <li><a class="reference internal" href="#inverse-square-root">inverse-square-root</a></li> </ul> </li> <li><a class="reference internal" href="#sign-and-absolute">Sign and Absolute</a><ul> <li><a class="reference internal" href="#minus">minus</a></li> <li><a class="reference internal" href="#plus">plus</a></li> <li><a class="reference internal" href="#abs">abs</a></li> </ul> </li> <li><a class="reference internal" href="#comparisons">Comparisons</a><ul> <li><a class="reference internal" href="#compare">compare</a></li> <li><a class="reference internal" href="#compare-signal">compare-signal</a></li> <li><a class="reference internal" href="#compare-total">compare-total</a></li> <li><a class="reference internal" href="#compare-total-magnitude">compare-total-magnitude</a></li> <li><a class="reference internal" href="#cmp">cmp</a></li> <li><a class="reference internal" href="#cmp-total">cmp-total</a></li> <li><a class="reference internal" href="#cmp-total-magnitude">cmp-total-magnitude</a></li> <li><a class="reference internal" href="#max">max</a></li> <li><a class="reference internal" href="#max-mag">max-mag</a></li> <li><a class="reference internal" href="#min">min</a></li> <li><a class="reference internal" href="#min-mag">min-mag</a></li> </ul> </li> <li><a class="reference internal" href="#closest-numbers">Closest Numbers</a><ul> <li><a class="reference internal" href="#next-minus">next-minus</a></li> <li><a class="reference internal" href="#next-plus">next-plus</a></li> <li><a class="reference internal" href="#next-toward">next-toward</a></li> </ul> </li> <li><a class="reference internal" href="#quantizing-and-normalizing">Quantizing and Normalizing</a><ul> <li><a class="reference internal" href="#quantize">quantize</a></li> <li><a class="reference internal" href="#rescale">rescale</a></li> <li><a class="reference internal" href="#same-quantum">same-quantum</a></li> <li><a class="reference internal" href="#reduce">reduce</a></li> </ul> </li> <li><a class="reference internal" href="#integral-values">Integral Values</a><ul> <li><a class="reference internal" href="#round-to-integral-exact">round-to-integral-exact</a></li> <li><a class="reference internal" href="#round-to-integral-value">round-to-integral-value</a></li> <li><a class="reference internal" href="#floor">floor</a></li> <li><a class="reference internal" href="#ceiling">ceiling</a></li> <li><a class="reference internal" href="#truncate">truncate</a></li> </ul> </li> <li><a class="reference internal" href="#scale">Scale</a><ul> <li><a class="reference internal" href="#logb">logb</a></li> <li><a class="reference internal" href="#scaleb">scaleb</a></li> </ul> </li> <li><a class="reference internal" href="#integer-functions">Integer Functions</a><ul> <li><a class="reference internal" href="#powmod">powmod</a></li> </ul> </li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="attributes.html" title="previous chapter">Attributes of a Decimal</a></p> <h4>Next topic</h4> <p class="topless"><a href="various.html" title="next chapter">Various Functions</a></p> <div id="searchbox" style="display: none" role="search"> <h3 id="searchlabel">Quick search</h3> <div class="searchformwrapper"> <form class="search" action="search.html" method="get"> <input type="text" name="q" aria-labelledby="searchlabel" /> <input type="submit" value="Go" /> </form> </div> </div> <script>$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body" role="main"> <div class="section" id="arithmetic-functions"> <h1>Arithmetic Functions</h1> <div class="section" id="basic-arithmetic"> <h2>Basic Arithmetic</h2> <p>Most of these functions are part of the specification, and some descriptions contain direct quotes.</p> <span class="target" id="std:topic-mpd_qadd"></span><span class="target" id="std:topic-mpd_add"></span><span class="target" id="std:topic-mpd_qadd_ssize"></span><span class="target" id="std:topic-mpd_qadd_i32"></span><span class="target" id="std:topic-mpd_qadd_i64"></span><span class="target" id="std:topic-mpd_qadd_uint"></span><span class="target" id="std:topic-mpd_qadd_u32"></span><span class="target" id="std:topic-mpd_qadd_u64"></span><span class="target" id="std:topic-mpd_add_ssize"></span><span class="target" id="std:topic-mpd_add_i32"></span><span class="target" id="std:topic-mpd_add_i64"></span><span class="target" id="std:topic-mpd_add_uint"></span><span class="target" id="std:topic-mpd_add_u32"></span><div class="section" id="add"> <span id="std:topic-mpd_add_u64"></span><h3>add</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qadd</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> + <em>b</em>.</p> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qadd_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qadd_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qadd_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qadd_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qadd_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qadd_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_add_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> + <em>b</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>All functions are now available in both the 64-bit and 32-bit builds.</p> </div> <span class="target" id="std:topic-mpd_qsub"></span><span class="target" id="std:topic-mpd_sub"></span><span class="target" id="std:topic-mpd_qsub_ssize"></span><span class="target" id="std:topic-mpd_qsub_i32"></span><span class="target" id="std:topic-mpd_qsub_i64"></span><span class="target" id="std:topic-mpd_qsub_uint"></span><span class="target" id="std:topic-mpd_qsub_u32"></span><span class="target" id="std:topic-mpd_qsub_u64"></span><span class="target" id="std:topic-mpd_sub_ssize"></span><span class="target" id="std:topic-mpd_sub_i32"></span><span class="target" id="std:topic-mpd_sub_i64"></span><span class="target" id="std:topic-mpd_sub_uint"></span><span class="target" id="std:topic-mpd_sub_u32"></span></div> <div class="section" id="subtract"> <span id="std:topic-mpd_sub_u64"></span><h3>subtract</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qsub</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> - <em>b</em>.</p> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qsub_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qsub_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qsub_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qsub_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qsub_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qsub_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sub_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> - <em>b</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>All functions are now available in both the 64-bit and 32-bit builds.</p> </div> <span class="target" id="std:topic-mpd_qmul"></span><span class="target" id="std:topic-mpd_mul"></span><span class="target" id="std:topic-mpd_qmul_ssize"></span><span class="target" id="std:topic-mpd_qmul_i32"></span><span class="target" id="std:topic-mpd_qmul_i64"></span><span class="target" id="std:topic-mpd_qmul_uint"></span><span class="target" id="std:topic-mpd_qmul_u32"></span><span class="target" id="std:topic-mpd_qmul_u64"></span><span class="target" id="std:topic-mpd_mul_ssize"></span><span class="target" id="std:topic-mpd_mul_i32"></span><span class="target" id="std:topic-mpd_mul_i64"></span><span class="target" id="std:topic-mpd_mul_uint"></span><span class="target" id="std:topic-mpd_mul_u32"></span></div> <div class="section" id="multiply"> <span id="std:topic-mpd_mul_u64"></span><h3>multiply</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmul</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> * <em>b</em>.</p> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmul_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qmul_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qmul_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qmul_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qmul_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qmul_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_mul_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> * <em>b</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>All functions are now available in both the 64-bit and 32-bit builds.</p> </div> <span class="target" id="std:topic-mpd_qdiv"></span><span class="target" id="std:topic-mpd_div"></span><span class="target" id="std:topic-mpd_qdiv_ssize"></span><span class="target" id="std:topic-mpd_qdiv_i32"></span><span class="target" id="std:topic-mpd_qdiv_i64"></span><span class="target" id="std:topic-mpd_qdiv_uint"></span><span class="target" id="std:topic-mpd_qdiv_u32"></span><span class="target" id="std:topic-mpd_qdiv_u64"></span><span class="target" id="std:topic-mpd_div_ssize"></span><span class="target" id="std:topic-mpd_div_i32"></span><span class="target" id="std:topic-mpd_div_i64"></span><span class="target" id="std:topic-mpd_div_uint"></span><span class="target" id="std:topic-mpd_div_u32"></span></div> <div class="section" id="divide"> <span id="std:topic-mpd_div_u64"></span><h3>divide</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qdiv</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> / <em>b</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.5.0: </span>If <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_error</span></code> occurs for extremely large precisions, the function now retries the operation in case the result is exact and fits in a much lower precision.</p> </div> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qdiv_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qdiv_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qdiv_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qdiv_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qdiv_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_qdiv_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_ssize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_i32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_i64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">int64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_uint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_uint_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_u32</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_div_u64</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>a</em> / <em>b</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>All functions are now available in both the 64-bit and 32-bit builds.</p> </div> <span class="target" id="std:topic-mpd_qfma"></span></div> <div class="section" id="fused-multiply-add"> <span id="std:topic-mpd_fma"></span><h3>fused-multiply-add</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qfma</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">c</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_fma</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">c</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>r</em> to <em>a</em> * <em>b</em> + <em>c</em> with a single, final rounding.</p> </div> </div> <div class="section" id="integer-division"> <h2>Integer Division</h2> <span class="target" id="std:topic-mpd_qdivint"></span><div class="section" id="divide-integer"> <span id="std:topic-mpd_divint"></span><h3>divide-integer</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qdivint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_divint</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>q</em> to the integer part of <em>a</em> / <em>b</em>.</p> <span class="target" id="std:topic-mpd_qrem"></span></div> <div class="section" id="remainder"> <span id="std:topic-mpd_rem"></span><h3>remainder</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qrem</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_rem</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>r</em> to the remainder of <em>a</em> / <em>b</em>.</p> <span class="target" id="std:topic-mpd_qrem_near"></span></div> <div class="section" id="remainder-near"> <span id="std:topic-mpd_rem_near"></span><h3>remainder-near</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qrem_near</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_rem_near</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>r</em> to <em>a</em> - <em>b</em> * n, where n is the integer nearest the exact value of a / b. If two integers are equally near then the even one is chosen.</p> <span class="target" id="std:topic-mpd_qdivmod"></span></div> <div class="section" id="divmod"> <span id="std:topic-mpd_divmod"></span><h3>divmod</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qdivmod</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_divmod</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>q</em> and <em>r</em> to the integer part and remainder of <em>a</em> / <em>b</em>. This function is not part of the standard.</p> </div> </div> <div class="section" id="powers-and-logarithms"> <h2>Powers and Logarithms</h2> <span class="target" id="std:topic-mpd_qexp"></span><div class="section" id="exp"> <span id="std:topic-mpd_exp"></span><h3>exp</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qexp</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_exp</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>e</em> ** <em>a</em>. Results are correctly rounded if the <em>allcr</em> field in the context is set to 1.</p> <span class="target" id="std:topic-mpd_qln"></span></div> <div class="section" id="ln"> <span id="std:topic-mpd_ln"></span><h3>ln</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qln</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_ln</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the natural logarithm of <em>a</em>. Results are correctly rounded if the <em>allcr</em> field in the context is set to 1.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>This function is now thread-safe.</p> </div> <span class="target" id="std:topic-mpd_qlog10"></span></div> <div class="section" id="log10"> <span id="std:topic-mpd_log10"></span><h3>log10</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qlog10</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_log10</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the base-10 logarithm of <em>a</em>. Results are correctly rounded if the <em>allcr</em> field in the context is set to 1.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>This function is now thread-safe.</p> </div> <span class="target" id="std:topic-mpd_qpow"></span></div> <div class="section" id="power"> <span id="std:topic-mpd_pow"></span><h3>power</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qpow</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">exp</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_pow</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">exp</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to <em>base</em> ** <em>exp</em>. Integer powers are exact, provided that that the result is finite and fits into <em>prec</em>.</p> <p>Results are not correctly rounded, even if the <em>allcr</em> context field is set to 1. This might change in a future release. The error of the function is less than <em>0.5ULP+t</em> (1ULP+t for directed rounding modes), where <em>t</em> has a maximum of <em>0.1ULP</em>, but is almost always less than <em>0.01ULP</em>.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.4.0: </span>This function is now thread-safe.</p> </div> <span class="target" id="std:topic-mpd_qsqrt"></span></div> <div class="section" id="square-root"> <span id="std:topic-mpd_sqrt"></span><h3>square-root</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qsqrt</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_sqrt</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the square root of <em>a</em>. This function is always correctly rounded and always uses the <code class="xref c c-macro docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code> mode.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.5.0: </span>If <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_error</span></code> occurs for extremely large precisions, the function now retries the operation in case the result is exact and fits in a much lower precision.</p> </div> <span class="target" id="std:topic-mpd_qinvroot"></span></div> <div class="section" id="inverse-square-root"> <span id="std:topic-mpd_invroot"></span><h3>inverse-square-root</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qinvroot</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_invroot</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the reciprocal of the square root of <em>a</em>. The function always uses the <code class="xref c c-macro docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code> mode. Results are not correctly rounded, even if the <em>allcr</em> context field is set to 1. This might change in a future release.</p> </div> </div> <div class="section" id="sign-and-absolute"> <h2>Sign and Absolute</h2> <span class="target" id="std:topic-mpd_qminus"></span><div class="section" id="minus"> <span id="std:topic-mpd_minus"></span><h3>minus</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qminus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_minus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to - <em>a</em>. The operation is context sensitive.</p> <span class="target" id="std:topic-mpd_qplus"></span></div> <div class="section" id="plus"> <span id="std:topic-mpd_plus"></span><h3>plus</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qplus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_plus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to + <em>a</em>. The operation is context sensitive.</p> <span class="target" id="std:topic-mpd_qabs"></span></div> <div class="section" id="abs"> <span id="std:topic-mpd_abs"></span><h3>abs</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qabs</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_abs</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the absolute value of <em>a</em>. For negative numbers, <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qabs</span></code> is the same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qminus</span></code>, for positive numbers the same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qplus</span></code>.</p> </div> </div> <div class="section" id="comparisons"> <h2>Comparisons</h2> <span class="target" id="std:topic-mpd_qcompare"></span><div class="section" id="compare"> <span id="std:topic-mpd_compare"></span><h3>compare</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcompare</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">int</span> <span class="nf">mpd_compare</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to -1 if <em>a</em> is less than <em>b</em>, 0 if <em>a</em> is equal to <em>b</em> and 1 if <em>a</em> is greater than <em>b</em>. For convenience, the result is also returned as a C integer. The <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_Operation</span></code> condition is added to <em>status</em> if at least one of the operands is a signaling NaN. In this case, result is set to NaN and <code class="xref c c-macro docutils literal notranslate"><span class="pre">INT_MAX</span></code> is returned.</p> <span class="target" id="std:topic-mpd_qcompare_signal"></span></div> <div class="section" id="compare-signal"> <span id="std:topic-mpd_compare_signal"></span><h3>compare-signal</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcompare_signal</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">int</span> <span class="nf">mpd_compare_signal</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qcompare</span></code>, except that the <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_Operation</span></code> condition is also added to <em>status</em> if at least one of the operands is a quiet NaN.</p> </div> <div class="section" id="compare-total"> <span id="std:topic-mpd_compare_total"></span><h3>compare-total</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_compare_total</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">);</span> </pre></div> </div> <p>Compare <em>a</em> and <em>b</em> using a total ordering. This function is always quiet.</p> </div> <div class="section" id="compare-total-magnitude"> <span id="std:topic-mpd_compare_total_mag"></span><h3>compare-total-magnitude</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_compare_total_mag</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">);</span> </pre></div> </div> <p>Compare the magnitude of <em>a</em> and <em>b</em> using a total ordering. This function is always quiet.</p> <span class="target" id="std:topic-mpd_qcmp"></span></div> <div class="section" id="cmp"> <span id="std:topic-mpd_cmp"></span><h3>cmp</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcmp</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">int</span> <span class="nf">mpd_cmp</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qcompare_signal</span></code>, but without the decimal result operand.</p> </div> <div class="section" id="cmp-total"> <span id="std:topic-mpd_cmp_total"></span><h3>cmp-total</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_cmp_total</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_compare_total</span></code>, but without the decimal result operand.</p> </div> <div class="section" id="cmp-total-magnitude"> <span id="std:topic-mpd_cmp_total_mag"></span><h3>cmp-total-magnitude</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_cmp_total_mag</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_compare_total_mag</span></code>, but without the decimal result operand.</p> <span class="target" id="std:topic-mpd_qmax"></span></div> <div class="section" id="max"> <span id="std:topic-mpd_max"></span><h3>max</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmax</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_max</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the maximum of <em>a</em> and <em>b</em>. If one of the operands is a quiet NaN and the other is numeric, the numeric operand is returned.</p> <span class="target" id="std:topic-mpd_qmax_mag"></span></div> <div class="section" id="max-mag"> <span id="std:topic-mpd_max_mag"></span><h3>max-mag</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmax_mag</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_max_mag</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qmax</span></code>, but the numerical comparison takes place with the signs of the operands set to 0 (positive).</p> <span class="target" id="std:topic-mpd_qmin"></span></div> <div class="section" id="min"> <span id="std:topic-mpd_min"></span><h3>min</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmin</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_min</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the minimum of <em>a</em> and <em>b</em>. If one of the operands is a quiet NaN and the other is numeric, the numeric operand is returned.</p> <span class="target" id="std:topic-mpd_qmin_mag"></span></div> <div class="section" id="min-mag"> <span id="std:topic-mpd_min_mag"></span><h3>min-mag</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmin_mag</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_min_mag</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qmin</span></code>, but the numerical comparison takes place with the signs of the operands set to 0 (positive).</p> </div> </div> <div class="section" id="closest-numbers"> <h2>Closest Numbers</h2> <span class="target" id="std:topic-mpd_qnext_minus"></span><div class="section" id="next-minus"> <span id="std:topic-mpd_next_minus"></span><h3>next-minus</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qnext_minus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_next_minus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>The closest representable number that is smaller than <em>a</em>.</p> <span class="target" id="std:topic-mpd_qnext_plus"></span></div> <div class="section" id="next-plus"> <span id="std:topic-mpd_next_plus"></span><h3>next-plus</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qnext_plus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_next_plus</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>The closest representable number that is larger than <em>a</em>.</p> <span class="target" id="std:topic-mpd_qnext_toward"></span></div> <div class="section" id="next-toward"> <span id="std:topic-mpd_next_toward"></span><h3>next-toward</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qnext_toward</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_next_toward</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Representable number closest to <em>a</em> that is in the direction towards <em>b</em>.</p> </div> </div> <div class="section" id="quantizing-and-normalizing"> <h2>Quantizing and Normalizing</h2> <span class="target" id="std:topic-mpd_qquantize"></span><div class="section" id="quantize"> <span id="std:topic-mpd_quantize"></span><h3>quantize</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qquantize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_quantize</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the number that is equal in value to <em>a</em>, but has the exponent of <em>b</em>.</p> <span class="target" id="std:topic-mpd_qrescale"></span></div> <div class="section" id="rescale"> <span id="std:topic-mpd_rescale"></span><h3>rescale</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qrescale</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">exp</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_rescale</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_ssize_t</span> <span class="n">exp</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the number that is equal in value to <em>a</em>, but has the exponent <em>exp</em>. Special numbers are copied without signaling. This function is not part of the standard. It is also not equivalent to the <code class="xref c c-func docutils literal notranslate"><span class="pre">rescale</span></code> function that was removed from the standard.</p> </div> <div class="section" id="same-quantum"> <span id="std:topic-mpd_same_quantum"></span><h3>same-quantum</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_same_quantum</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">);</span> </pre></div> </div> <p>Return 1 if <em>a</em> and <em>b</em> have the same exponent, 0 otherwise.</p> <span class="target" id="std:topic-mpd_qreduce"></span></div> <div class="section" id="reduce"> <span id="std:topic-mpd_reduce"></span><h3>reduce</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qreduce</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_reduce</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>If <em>a</em> is finite after applying rounding and overflow/underflow checks, <em>result</em> is set to the simplest form of <em>a</em> with all trailing zeros removed.</p> <span class="target" id="std:topic-mpd_qround_to_intx"></span></div> </div> <div class="section" id="integral-values"> <span id="std:topic-mpd_round_to_intx"></span><h2>Integral Values</h2> <div class="section" id="round-to-integral-exact"> <h3>round-to-integral-exact</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qround_to_intx</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_round_to_intx</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Round to an integer, using the rounding mode of the context. Only a signaling NaN causes an <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> condition.</p> <span class="target" id="std:topic-mpd_qround_to_int"></span></div> <div class="section" id="round-to-integral-value"> <span id="std:topic-mpd_round_to_int"></span><h3>round-to-integral-value</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qround_to_int</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_round_to_int</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Same as <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qround_to_intx</span></code>, but the <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Inexact</span></code> and <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Rounded</span></code> flags are never set.</p> <span class="target" id="std:topic-mpd_qfloor"></span></div> <div class="section" id="floor"> <span id="std:topic-mpd_floor"></span><h3>floor</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qfloor</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_floor</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the floor of <em>a</em>. Not part of the standard.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.5.0: </span>The function now sets <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> if <em>a</em> is special. Previously it followed <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_round_to_int</span></code>, for which the specification allows special values.</p> </div> <span class="target" id="std:topic-mpd_qceil"></span></div> <div class="section" id="ceiling"> <span id="std:topic-mpd_ceil"></span><h3>ceiling</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qceil</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_ceil</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the ceiling of <em>a</em>. Not part of the standard.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.5.0: </span>The function now sets <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> if <em>a</em> is special. Previously it followed <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_round_to_int</span></code>, for which the specification allows special values.</p> </div> <span class="target" id="std:topic-mpd_qtrunc"></span></div> <div class="section" id="truncate"> <span id="std:topic-mpd_trunc"></span><h3>truncate</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qtrunc</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_trunc</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to the truncated value of <em>a</em>. Not part of the standard.</p> <div class="versionchanged"> <p><span class="versionmodified changed">Changed in version 2.5.0: </span>The function now sets <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> if <em>a</em> is special. Previously it followed <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_round_to_int</span></code>, for which the specification allows special values.</p> </div> </div> </div> <div class="section" id="scale"> <h2>Scale</h2> <span class="target" id="std:topic-mpd_qlogb"></span><div class="section" id="logb"> <span id="std:topic-mpd_logb"></span><h3>logb</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qlogb</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_logb</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>If <em>a</em> is NaN, the general rules apply. If <em>a</em> is infinite, <em>result</em> is +Infinity. If <em>a</em> is zero, result is -Infinity and <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> is added to <em>status</em>. Otherwise, <em>result</em> is the same as the adjusted exponent of <em>a</em>, or <code class="xref c c-macro docutils literal notranslate"><span class="pre">floor(log10(a))</span></code>.</p> <span class="target" id="std:topic-mpd_qscaleb"></span></div> <div class="section" id="scaleb"> <span id="std:topic-mpd_scaleb"></span><h3>scaleb</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qscaleb</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_scaleb</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">b</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p><em>b</em> must be an integer with exponent 0. If <em>a</em> is infinite, <em>result</em> is set to a. Otherwise, <em>result</em> is <em>a</em> with the value of <em>b</em> added to the exponent.</p> </div> </div> <div class="section" id="integer-functions"> <h2>Integer Functions</h2> <span class="target" id="std:topic-mpd_qpowmod"></span><div class="section" id="powmod"> <span id="std:topic-mpd_powmod"></span><h3>powmod</h3> <div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qpowmod</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">exp</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">mod</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span> <span class="kt">void</span> <span class="nf">mpd_powmod</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">exp</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">mod</span><span class="p">,</span> <span class="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span> </pre></div> </div> <p>Set <em>result</em> to (<em>base</em> ** <em>exp</em>) % <em>mod</em>. All operands must be integers. The function fails if <em>result</em> does not fit in the current <em>prec</em>.</p> </div> </div> </div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="various.html" title="Various Functions" >next</a></li> <li class="right" > <a href="attributes.html" title="Attributes of a Decimal" >previous</a> |</li> <li><a href="http://www.bytereef.org/mpdecimal/index.html">project home</a></li> </ul> </div> <div class="footer" role="contentinfo"> © Copyright 2010-2020, Stefan Krah. Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4. </div> </body> </html>
Upload File
Create Folder