| Server IP : 82.208.35.60 / Your IP : 216.73.217.116 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/local/share/doc/mpdecimal/libmpdec/ |
Upload File : |
<!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>Assignment, Conversions, I/O — 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="Attributes of a Decimal" href="attributes.html" />
<link rel="prev" title="Decimals" href="decimals.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="attributes.html" title="Attributes of a Decimal"
accesskey="N">next</a></li>
<li class="right" >
<a href="decimals.html" title="Decimals"
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="#">Assignment, Conversions, I/O</a><ul>
<li><a class="reference internal" href="#create-decimal">Create Decimal</a><ul>
<li><a class="reference internal" href="#from-string">From String</a></li>
<li><a class="reference internal" href="#from-integer">From Integer</a></li>
<li><a class="reference internal" href="#from-special-values">From Special Values</a></li>
<li><a class="reference internal" href="#from-triple">From Triple</a></li>
</ul>
</li>
<li><a class="reference internal" href="#create-static-decimal">Create Static Decimal</a><ul>
<li><a class="reference internal" href="#std:topic-mpd_sset_u64">From Integer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#convert-decimal">Convert Decimal</a><ul>
<li><a class="reference internal" href="#to-string">To String</a></li>
<li><a class="reference internal" href="#to-integer">To Integer</a></li>
<li><a class="reference internal" href="#to-triple">To Triple</a></li>
</ul>
</li>
<li><a class="reference internal" href="#copy-decimal">Copy Decimal</a></li>
<li><a class="reference internal" href="#print-decimal">Print Decimal</a></li>
<li><a class="reference internal" href="#print-status-flags">Print Status Flags</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="decimals.html"
title="previous chapter">Decimals</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="attributes.html"
title="next chapter">Attributes of a Decimal</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="assignment-conversions-i-o">
<h1>Assignment, Conversions, I/O</h1>
<div class="section" id="create-decimal">
<h2>Create Decimal</h2>
<span class="target" id="std:topic-mpd_qset_string"></span><span class="target" id="std:topic-mpd_qset_string_exact"></span><div class="section" id="from-string">
<span id="std:topic-mpd_set_string"></span><h3>From String</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qset_string</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="kt">char</span> <span class="o">*</span><span class="n">s</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_set_string</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="kt">char</span> <span class="o">*</span><span class="n">s</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> from <em>s</em>. The context is respected. This means that rounding, overflow
etc. can take place. If the string is not valid, the <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Conversion_syntax</span></code>
condition is added to <em>status</em> and <em>result</em> is set to NaN.</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qset_string_exact</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="kt">char</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> from <em>s</em>. The conversion is exact. If internal limits prevent exact
conversion, 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>
and <em>result</em> is set to NaN.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.5.0.</span></p>
</div>
<span class="target" id="std:topic-mpd_qset_ssize"></span><span class="target" id="std:topic-mpd_qset_i32"></span><span class="target" id="std:topic-mpd_qset_i64"></span><span class="target" id="std:topic-mpd_qset_i64_exact"></span><span class="target" id="std:topic-mpd_qset_uint"></span><span class="target" id="std:topic-mpd_qset_u32"></span><span class="target" id="std:topic-mpd_qset_u64"></span><span class="target" id="std:topic-mpd_qset_u64_exact"></span><span class="target" id="std:topic-mpd_set_ssize"></span><span class="target" id="std:topic-mpd_set_i32"></span><span class="target" id="std:topic-mpd_set_i64"></span><span class="target" id="std:topic-mpd_set_uint"></span><span class="target" id="std:topic-mpd_set_u32"></span></div>
<div class="section" id="from-integer">
<span id="std:topic-mpd_set_u64"></span><h3>From Integer</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qset_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="n">mpd_ssize_t</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_qset_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="kt">int32_t</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_qset_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="kt">int64_t</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_qset_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="n">mpd_uint_t</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_qset_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="kt">uint32_t</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_qset_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="kt">uint64_t</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_set_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="n">mpd_ssize_t</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>
<span class="kt">void</span> <span class="nf">mpd_set_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="kt">int32_t</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>
<span class="kt">void</span> <span class="nf">mpd_set_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="kt">int64_t</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>
<span class="kt">void</span> <span class="nf">mpd_set_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="n">mpd_uint_t</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>
<span class="kt">void</span> <span class="nf">mpd_set_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="kt">uint32_t</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>
<span class="kt">void</span> <span class="nf">mpd_set_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="kt">uint64_t</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> from a C integer type. The context is respected.</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qset_i64_exact</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="kt">int64_t</span> <span class="n">a</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_qset_u64_exact</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="kt">uint64_t</span> <span class="n">a</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> from a C integer type. The conversion is exact. If exact conversion
is not possible, 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>
and <em>result</em> is set to NaN.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.5.0.</span></p>
</div>
</div>
<div class="section" id="from-special-values">
<span id="std:topic-mpd_seterror"></span><h3>From Special Values</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_seterror</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="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to NaN, with the error condition passed in <em>flags</em>. The error
condition is added to <em>status</em>. This is a convenience function intended to
be used inside quiet functions.</p>
<div class="highlight-c notranslate" id="std:topic-mpd_setspecial"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_setspecial</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="kt">uint8_t</span> <span class="n">sign</span><span class="p">,</span> <span class="kt">uint8_t</span> <span class="n">type</span><span class="p">);</span>
</pre></div>
</div>
<p>Set <em>result</em> to a special number. <em>sign</em> must be one of {<code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_POS</span></code>, <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_NEG</span></code>},
<em>type</em> one of {<code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_INF</span></code>, <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_NAN</span></code>, <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_SNAN</span></code>}.</p>
<div class="highlight-c notranslate" id="std:topic-mpd_zerocoeff"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_zerocoeff</span><span class="p">(</span><span class="n">mpd_t</span> <span class="o">*</span><span class="n">result</span><span class="p">);</span>
</pre></div>
</div>
<p>Set the coefficient of <em>result</em> to zero. This function cannot fail.</p>
<span class="target" id="std:topic-mpd_qmaxcoeff"></span><div class="highlight-c notranslate" id="std:topic-mpd_maxcoeff"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qmaxcoeff</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_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_maxcoeff</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="n">mpd_context_t</span> <span class="o">*</span><span class="n">ctx</span><span class="p">);</span>
</pre></div>
</div>
<p>Set the coefficient of <em>result</em> to the maximum value allowed by <em>ctx->prec</em>.
The function can fail with <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_error</span></code>.</p>
</div>
<div class="section" id="from-triple">
<span id="std:topic-mpd_from_uint128_triple"></span><h3>From Triple</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">mpd_triple_class</span> <span class="p">{</span>
<span class="n">MPD_TRIPLE_NORMAL</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_INF</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_QNAN</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_SNAN</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_ERROR</span><span class="p">,</span>
<span class="p">};</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="k">enum</span> <span class="n">mpd_triple_class</span> <span class="n">tag</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">sign</span><span class="p">;</span> <span class="cm">/* 0 for positive and 1 for negative */</span>
<span class="kt">uint64_t</span> <span class="n">hi</span><span class="p">;</span> <span class="cm">/* ((uint128_t)hi << 64) + lo is the coefficient */</span>
<span class="kt">uint64_t</span> <span class="n">lo</span><span class="p">;</span>
<span class="kt">int64_t</span> <span class="n">exp</span><span class="p">;</span> <span class="cm">/* exponent */</span>
<span class="p">}</span> <span class="n">mpd_uint128_triple_t</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">mpd_from_uint128_triple</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_uint128_triple_t</span> <span class="o">*</span><span class="n">triple</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">status</span><span class="p">);</span>
</pre></div>
</div>
<p>Create a decimal from a triple. The following rules must be observed for
initializing the triple:</p>
<ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">sign</span></code> must always be 0 (for positive) or 1 (for negative).</li>
<li><code class="docutils literal notranslate"><span class="pre">MPD_TRIPLE_QNAN</span></code>: <code class="docutils literal notranslate"><span class="pre">exp</span></code> must be 0. If <code class="docutils literal notranslate"><span class="pre">hi</span></code> or <code class="docutils literal notranslate"><span class="pre">lo</span></code> are nonzero,
create a <code class="docutils literal notranslate"><span class="pre">NaN</span></code> with a payload.</li>
<li><code class="docutils literal notranslate"><span class="pre">MPD_TRIPLE_SNAN</span></code>: <code class="docutils literal notranslate"><span class="pre">exp</span></code> must be 0. If <code class="docutils literal notranslate"><span class="pre">hi</span></code> or <code class="docutils literal notranslate"><span class="pre">lo</span></code>
are nonzero, create an <code class="docutils literal notranslate"><span class="pre">sNaN</span></code> with a payload.</li>
<li><code class="docutils literal notranslate"><span class="pre">MPD_TRIPLE_INF</span></code>: <code class="docutils literal notranslate"><span class="pre">exp</span></code>, <code class="docutils literal notranslate"><span class="pre">hi</span></code> and <code class="docutils literal notranslate"><span class="pre">lo</span></code> must be zero.</li>
<li><code class="docutils literal notranslate"><span class="pre">MPD_TRIPLE_NORMAL</span></code>: <code class="docutils literal notranslate"><span class="pre">MPD_MIN_ETINY</span> <span class="pre">+</span> <span class="pre">38</span> <span class="pre"><</span> <span class="pre">exp</span> <span class="pre"><</span> <span class="pre">MPD_MAX_EMAX</span> <span class="pre">-</span> <span class="pre">38</span></code>.
<code class="docutils literal notranslate"><span class="pre">hi</span></code> and <code class="docutils literal notranslate"><span class="pre">lo</span></code> can be chosen freely.</li>
<li><code class="docutils literal notranslate"><span class="pre">MPD_TRIPLE_ERROR</span></code>: It is always an error to set this tag.</li>
</ul>
<p>If one of the above conditions is not met, the function sets
<code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> and <em>result</em> is <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.</p>
<p>Additionally, though extremely unlikely give the small allocation sizes,
the function can set <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_error</span></code>.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.5.1.</span></p>
</div>
</div>
</div>
<div class="section" id="create-static-decimal">
<h2>Create Static Decimal</h2>
<span class="target" id="std:topic-mpd_qsset_ssize"></span><span class="target" id="std:topic-mpd_qsset_i32"></span><span class="target" id="std:topic-mpd_qsset_i64"></span><span class="target" id="std:topic-mpd_qsset_uint"></span><span class="target" id="std:topic-mpd_qsset_u32"></span><span class="target" id="std:topic-mpd_qsset_u64"></span><span class="target" id="std:topic-mpd_sset_ssize"></span><span class="target" id="std:topic-mpd_sset_i32"></span><span class="target" id="std:topic-mpd_sset_i64"></span><span class="target" id="std:topic-mpd_sset_uint"></span><span class="target" id="std:topic-mpd_sset_u32"></span><div class="section" id="std:topic-mpd_sset_u64">
<span id="id1"></span><h3>From Integer</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_qsset_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="n">mpd_ssize_t</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_qsset_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="kt">int32_t</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_qsset_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="n">mpd_uint_t</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_qsset_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="kt">uint32_t</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_sset_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="n">mpd_ssize_t</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>
<span class="kt">void</span> <span class="nf">mpd_sset_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="kt">int32_t</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>
<span class="kt">void</span> <span class="nf">mpd_sset_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="n">mpd_uint_t</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>
<span class="kt">void</span> <span class="nf">mpd_sset_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="kt">uint32_t</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>
<span class="cm">/* 64-bit build only */</span>
<span class="kt">void</span> <span class="nf">mpd_qsset_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="kt">int64_t</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_qsset_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="kt">uint64_t</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_sset_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="kt">int64_t</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>
<span class="kt">void</span> <span class="nf">mpd_sset_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="kt">uint64_t</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> from a C integer type. The context is respected. <em>result</em> must be a
static decimal, see section <a class="reference internal" href="memory.html#advanced-memory-handling"><span class="std std-ref">Advanced Memory Handling</span></a>.</p>
</div>
</div>
<div class="section" id="convert-decimal">
<h2>Convert Decimal</h2>
<span class="target" id="std:topic-mpd_to_sci"></span><span class="target" id="std:topic-mpd_to_eng"></span><span class="target" id="std:topic-mpd_to_sci_size"></span><div class="section" id="to-string">
<span id="std:topic-mpd_to_eng_size"></span><h3>To String</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_to_sci</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_to_eng</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="n">mpd_ssize_t</span> <span class="nf">mpd_to_sci_size</span><span class="p">(</span><span class="kt">char</span> <span class="o">**</span><span class="n">res</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
<span class="n">mpd_ssize_t</span> <span class="nf">mpd_to_eng_size</span><span class="p">(</span><span class="kt">char</span> <span class="o">**</span><span class="n">res</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="kt">int</span> <span class="n">fmt</span><span class="p">);</span>
</pre></div>
</div>
<p>Return the <em>scientific</em> or <em>engineering</em> string representation of a decimal.
This operation is not context sensitive. If <em>fmt</em> is zero, the exponent
character is lower case, otherwise it is upper case. If allocating memory
for the string fails, <code class="xref c c-macro docutils literal notranslate"><span class="pre">NULL</span></code> is returned.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.4.0: </span><code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_to_sci_size</span></code> and <code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_to_eng_size</span></code> additionally return the
size of the result string, without counting the terminating NUL.
The goal is to avoid an unnecessary call to <code class="xref c c-func docutils literal notranslate"><span class="pre">strlen</span></code>.</p>
</div>
<span class="target" id="std:topic-mpd_qformat"></span><div class="highlight-c notranslate" id="std:topic-mpd_format"><div class="highlight"><pre><span></span><span class="kt">char</span> <span class="o">*</span><span class="nf">mpd_qformat</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</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">char</span> <span class="o">*</span><span class="nf">mpd_format</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">fmt</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>Return the string representation of a decimal according to format string <em>fmt</em>.
The format string syntax is the same as in Python PEP 3101 (See Standard Format
Specifiers) and is quite similar to the syntax used for floating point numbers
the C <code class="xref c c-func docutils literal notranslate"><span class="pre">fprintf</span></code> function. The fill character may be a UTF-8 character,
the rest of the format string must be ASCII.</p>
<p>The function can fail with <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code> for an invalid format
string or <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_error</span></code>. In both cases, the return value is
<code class="xref c c-macro docutils literal notranslate"><span class="pre">NULL</span></code>.</p>
<p>If the “n” format specifier is used, the function calls <code class="xref c c-func docutils literal notranslate"><span class="pre">localeconv</span></code>.
Depending on the guarantees of the system’s <code class="xref c c-func docutils literal notranslate"><span class="pre">localeconv</span></code>, calls to
<code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_qformat</span></code> may require a lock.</p>
<p>All other format specifiers are thread-safe.</p>
<span class="target" id="std:topic-mpd_qget_ssize"></span><span class="target" id="std:topic-mpd_qget_uint"></span><span class="target" id="std:topic-mpd_get_ssize"></span><span class="target" id="std:topic-mpd_get_uint"></span><span class="target" id="std:topic-mpd_qget_i32"></span><span class="target" id="std:topic-mpd_qget_u32"></span><span class="target" id="std:topic-mpd_get_i32"></span><span class="target" id="std:topic-mpd_get_u32"></span><span class="target" id="std:topic-mpd_qget_u64"></span><span class="target" id="std:topic-mpd_qget_i64"></span><span class="target" id="std:topic-mpd_get_i64"></span></div>
<div class="section" id="to-integer">
<span id="std:topic-mpd_get_u64"></span><h3>To Integer</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">mpd_ssize_t</span> <span class="nf">mpd_qget_ssize</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</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="n">mpd_uint_t</span> <span class="nf">mpd_qget_uint</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</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="n">mpd_ssize_t</span> <span class="nf">mpd_get_ssize</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>
<span class="n">mpd_uint_t</span> <span class="nf">mpd_get_uint</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>
<span class="kt">int32_t</span> <span class="nf">mpd_qget_i32</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="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">uint32_t</span> <span class="nf">mpd_qget_u32</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="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">int32_t</span> <span class="nf">mpd_get_i32</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>
<span class="kt">uint32_t</span> <span class="nf">mpd_get_u32</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>
<span class="kt">uint64_t</span> <span class="nf">mpd_qget_u64</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</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">int64_t</span> <span class="nf">mpd_qget_i64</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</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">int64_t</span> <span class="nf">mpd_get_i64</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>
<span class="kt">uint64_t</span> <span class="nf">mpd_get_u64</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>Convert a decimal to a C integer type. If the decimal is not an integer or
its value is outside the range of the C type, <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_SSIZE_MAX</span></code> is
returned for signed types and <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_UINT_MAX</span></code> for unsigned types. In
this case, the status is set to <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Invalid_operation</span></code>. Since a
decimal can have the values <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_SSIZE_MAX</span></code> or <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_UINT_MAX</span></code>,
the only reliable way to check for errors is to check the status.</p>
<span class="target" id="std:topic-mpd_qabs_uint"></span><div class="highlight-c notranslate" id="std:topic-mpd_abs_uint"><div class="highlight"><pre><span></span><span class="n">mpd_uint_t</span> <span class="nf">mpd_qabs_uint</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</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="n">mpd_uint_t</span> <span class="nf">mpd_abs_uint</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>Return the absolute of numbers in the range [<code class="xref c c-macro docutils literal notranslate"><span class="pre">-MPD_UINT_MAX</span></code>, <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_UINT_MAX</span></code>].
Error handling as above.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.4.0: </span>All functions are available in both the 64-bit and the 32-bit builds.</p>
</div>
</div>
<div class="section" id="to-triple">
<span id="std:topic-mpd_as_uint128_triple"></span><h3>To Triple</h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">mpd_triple_class</span> <span class="p">{</span>
<span class="n">MPD_TRIPLE_NORMAL</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_INF</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_QNAN</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_SNAN</span><span class="p">,</span>
<span class="n">MPD_TRIPLE_ERROR</span><span class="p">,</span>
<span class="p">};</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="k">enum</span> <span class="n">mpd_triple_class</span> <span class="n">tag</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">sign</span><span class="p">;</span> <span class="cm">/* 0 for positive and 1 for negative */</span>
<span class="kt">uint64_t</span> <span class="n">hi</span><span class="p">;</span> <span class="cm">/* ((uint128_t)hi << 64) + lo is the coefficient */</span>
<span class="kt">uint64_t</span> <span class="n">lo</span><span class="p">;</span>
<span class="kt">int64_t</span> <span class="n">exp</span><span class="p">;</span> <span class="cm">/* exponent */</span>
<span class="p">}</span> <span class="n">mpd_uint128_triple_t</span><span class="p">;</span>
<span class="n">mpd_uint128_triple_t</span> <span class="nf">mpd_as_uint128_triple</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>
</pre></div>
</div>
<p>Convert a decimal with up to 38 decimal digits to a triple.</p>
<p>For simplicity, the usage of the function and all special cases are explained
in code form and comments:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">triple</span> <span class="o">=</span> <span class="n">mpd_as_uint128_triple</span><span class="p">(</span><span class="n">dec</span><span class="p">);</span>
<span class="k">switch</span> <span class="p">(</span><span class="n">triple</span><span class="p">.</span><span class="n">tag</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="nl">MPD_TRIPLE_QNAN</span><span class="p">:</span>
<span class="cm">/*</span>
<span class="cm"> * Success: handle a quiet NaN.</span>
<span class="cm"> * 1) sign is 0 or 1.</span>
<span class="cm"> * 2) exp is always 0.</span>
<span class="cm"> * 3) If hi or lo are nonzero, the NaN has a payload.</span>
<span class="cm"> */</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">MPD_TRIPLE_SNAN</span><span class="p">:</span>
<span class="cm">/*</span>
<span class="cm"> * Success: handle a signaling NaN.</span>
<span class="cm"> * 1) sign is 0 or 1.</span>
<span class="cm"> * 2) exp is always 0.</span>
<span class="cm"> * 3) If hi or lo are nonzero, the sNaN has a payload.</span>
<span class="cm"> */</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">MPD_TRIPLE_INF</span><span class="p">:</span>
<span class="cm">/*</span>
<span class="cm"> * Success: handle Infinity.</span>
<span class="cm"> * 1) sign is 0 or 1.</span>
<span class="cm"> * 2) exp is always 0.</span>
<span class="cm"> * 3) hi and lo are always zero.</span>
<span class="cm"> */</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">MPD_TRIPLE_NORMAL</span><span class="p">:</span>
<span class="cm">/* Success: handle a finite value. */</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="nl">MPD_TRIPLE_ERROR</span><span class="p">:</span>
<span class="cm">/* The coefficient is too large for conversion. Handle the error. */</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="versionadded">
<p><span class="versionmodified added">New in version 2.5.1.</span></p>
</div>
</div>
</div>
<div class="section" id="copy-decimal">
<h2>Copy Decimal</h2>
<span class="target" id="std:topic-mpd_qcopy"></span><div class="highlight-c notranslate" id="std:topic-mpd_copy"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcopy</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="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy</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 value of <em>a</em> and return 1 for success. On failure,
return 0 and add <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_Error</span></code> to <em>status</em>.</p>
<div class="highlight-c notranslate" id="std:topic-mpd_qncopy"><div class="highlight"><pre><span></span><span class="n">mpd_t</span> <span class="o">*</span><span class="nf">mpd_qncopy</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>
</pre></div>
</div>
<p>Return a pointer to a fresh copy of <em>a</em>, <code class="xref c c-macro docutils literal notranslate"><span class="pre">NULL</span></code> on failure.</p>
<span class="target" id="std:topic-mpd_qcopy_abs"></span><div class="highlight-c notranslate" id="std:topic-mpd_copy_abs"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcopy_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="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_copy_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 value of <em>a</em> with the sign set to 0. If successful,
return 1. Otherwise, return 0 and add <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_Error</span></code> to <em>status</em>.</p>
<span class="target" id="std:topic-mpd_qcopy_negate"></span><div class="highlight-c notranslate" id="std:topic-mpd_copy_negate"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcopy_negate</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="o">*</span><span class="n">status</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_copy_negate</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 value of <em>a</em> with the sign inverted. If successful,
return 1. Otherwise, return 0 and add <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_Error</span></code> to <em>status</em>.</p>
<span class="target" id="std:topic-mpd_qcopy_sign"></span><div class="highlight-c notranslate" id="std:topic-mpd_copy_sign"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_qcopy_sign</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="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_copy_sign</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 value of <em>a</em>, using the sign of <em>b</em>. If successful,
return 1. Otherwise, return 0 and add <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_Malloc_Error</span></code> to <em>status</em>.</p>
</div>
<div class="section" id="print-decimal">
<h2>Print Decimal</h2>
<span class="target" id="std:topic-mpd_fprint"></span><div class="highlight-c notranslate" id="std:topic-mpd_print"><div class="highlight"><pre><span></span><span class="kt">void</span> <span class="nf">mpd_fprint</span><span class="p">(</span><span class="kt">FILE</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">);</span>
<span class="kt">void</span> <span class="nf">mpd_print</span><span class="p">(</span><span class="k">const</span> <span class="n">mpd_t</span> <span class="o">*</span><span class="n">dec</span><span class="p">);</span>
</pre></div>
</div>
<p>Print a decimal with a trailing newline to <em>FILE</em> or to <em>stdout</em>. These
functions are mostly useful for debugging.</p>
</div>
<div class="section" id="print-status-flags">
<h2>Print Status Flags</h2>
<span class="target" id="std:topic-mpd_snprint_flags"></span><span class="target" id="std:topic-mpd_lsnprint_flags"></span><div class="highlight-c notranslate" id="std:topic-mpd_lsnprint_signals"><div class="highlight"><pre><span></span><span class="kt">int</span> <span class="nf">mpd_snprint_flags</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">);</span>
<span class="kt">int</span> <span class="nf">mpd_lsnprint_flags</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">flag_string</span><span class="p">[]);</span>
<span class="kt">int</span> <span class="nf">mpd_lsnprint_signals</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">dest</span><span class="p">,</span> <span class="kt">int</span> <span class="n">nmemb</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">flags</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">signal_string</span><span class="p">[]);</span>
</pre></div>
</div>
<p><code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_snprint_flags</span></code> prints the conditions contained in <em>flags</em>
- separated by spaces - to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_MAX_FLAG_STRING</span></code>.</p>
<p><code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_lsnprint_flags</span></code> prints the conditions contained in <em>flags</em> as
a comma separated list to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_MAX_FLAG_LIST</span></code>.</p>
<p><code class="xref c c-func docutils literal notranslate"><span class="pre">mpd_lsnprint_signals</span></code> prints signals contained in <em>flags</em> as
a comma separated list to the buffer <em>dest</em> with size <em>nmemb</em>. <em>nmemb</em>
must be at least <code class="xref c c-macro docutils literal notranslate"><span class="pre">MPD_MAX_SIGNAL_LIST</span></code>.</p>
<p>The result string is always <code class="xref c c-macro docutils literal notranslate"><span class="pre">NUL</span></code> terminated. The return value of
both functions is the number of characters printed, without the <code class="xref c c-macro docutils literal notranslate"><span class="pre">NUL</span></code>
terminator. On failure, -1 is returned.</p>
</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="attributes.html" title="Attributes of a Decimal"
>next</a></li>
<li class="right" >
<a href="decimals.html" title="Decimals"
>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>