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: assign-convert.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>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>
Upload File
Create Folder