renderd7/main/doc/html/namespacenlohmann_1_1detail_1_1dtoa__impl.html
2021-07-25 10:33:20 +00:00

420 lines
18 KiB
HTML

<head>
<title>RenderD7</title>
</head>
<!-- Generated by Doxygen 1.8.17 -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('namespacenlohmann_1_1detail_1_1dtoa__impl.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">nlohmann::detail::dtoa_impl Namespace Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>implements the Grisu2 algorithm for binary to decimal floating-point conversion.
<a href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a22b6e37654ac93c6d0d9c06ec1bf5ded"><td class="memTemplParams" colspan="2">template&lt;typename FloatType &gt; </td></tr>
<tr class="memitem:a22b6e37654ac93c6d0d9c06ec1bf5ded"><td class="memTemplItemLeft" align="right" valign="top">boundaries&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#a22b6e37654ac93c6d0d9c06ec1bf5ded">compute_boundaries</a> (FloatType value)</td></tr>
<tr class="separator:a22b6e37654ac93c6d0d9c06ec1bf5ded"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbf329a18c5cf854a3477327afd2200b"><td class="memItemLeft" align="right" valign="top">cached_power&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#adbf329a18c5cf854a3477327afd2200b">get_cached_power_for_binary_exponent</a> (int e)</td></tr>
<tr class="separator:adbf329a18c5cf854a3477327afd2200b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36ded358763b5dbcea9867660fbe4e28"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#a36ded358763b5dbcea9867660fbe4e28">find_largest_pow10</a> (const std::uint32_t n, std::uint32_t &amp;pow10)</td></tr>
<tr class="separator:a36ded358763b5dbcea9867660fbe4e28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b899c72b0e1e3dd46d75c2b4e6bcdfb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#a9b899c72b0e1e3dd46d75c2b4e6bcdfb">grisu2_digit_gen</a> (char *buffer, int &amp;length, int &amp;decimal_exponent, diyfp M_minus, diyfp w, diyfp M_plus)</td></tr>
<tr class="separator:a9b899c72b0e1e3dd46d75c2b4e6bcdfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05b681dcb8569b9784c6dccfadb01633"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#a05b681dcb8569b9784c6dccfadb01633">grisu2</a> (char *buf, int &amp;len, int &amp;decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus)</td></tr>
<tr class="separator:a05b681dcb8569b9784c6dccfadb01633"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab7a9670a4f4704a5d0347ad7588576b"><td class="memTemplParams" colspan="2">template&lt;typename FloatType &gt; </td></tr>
<tr class="memitem:aab7a9670a4f4704a5d0347ad7588576b"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#aab7a9670a4f4704a5d0347ad7588576b">grisu2</a> (char *buf, int &amp;len, int &amp;decimal_exponent, FloatType value)</td></tr>
<tr class="separator:aab7a9670a4f4704a5d0347ad7588576b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad90f19ed10d8133b727df4b9bc5ddf5c"><td class="memItemLeft" align="right" valign="top">JSON_HEDLEY_RETURNS_NON_NULL char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#ad90f19ed10d8133b727df4b9bc5ddf5c">append_exponent</a> (char *buf, int e)</td></tr>
<tr class="memdesc:ad90f19ed10d8133b727df4b9bc5ddf5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">appends a decimal representation of e to buf <a href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#ad90f19ed10d8133b727df4b9bc5ddf5c">More...</a><br /></td></tr>
<tr class="separator:ad90f19ed10d8133b727df4b9bc5ddf5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab441f2761e33839ca48bc2225e14a2a9"><td class="memItemLeft" align="right" valign="top">JSON_HEDLEY_RETURNS_NON_NULL char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#ab441f2761e33839ca48bc2225e14a2a9">format_buffer</a> (char *buf, int len, int decimal_exponent, int min_exp, int max_exp)</td></tr>
<tr class="memdesc:ab441f2761e33839ca48bc2225e14a2a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">prettify v = buf * 10^decimal_exponent <a href="namespacenlohmann_1_1detail_1_1dtoa__impl.html#ab441f2761e33839ca48bc2225e14a2a9">More...</a><br /></td></tr>
<tr class="separator:ab441f2761e33839ca48bc2225e14a2a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>implements the Grisu2 algorithm for binary to decimal floating-point conversion. </p>
<p>This implementation is a slightly modified version of the reference implementation which may be obtained from <a href="http://florian.loitsch.com/publications">http://florian.loitsch.com/publications</a> (bench.tar.gz).</p>
<p>The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch.</p>
<p>For a detailed description of the algorithm see:</p>
<p>[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with
Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming Language Design and Implementation, PLDI 2010 [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, PLDI 1996 </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a22b6e37654ac93c6d0d9c06ec1bf5ded"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22b6e37654ac93c6d0d9c06ec1bf5ded">&#9670;&nbsp;</a></span>compute_boundaries()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatType &gt; </div>
<table class="memname">
<tr>
<td class="memname">boundaries nlohmann::detail::dtoa_impl::compute_boundaries </td>
<td>(</td>
<td class="paramtype">FloatType&#160;</td>
<td class="paramname"><em>value</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute the (normalized) diyfp representing the input number 'value' and its boundaries.</p>
<dl class="section pre"><dt>Precondition</dt><dd>value must be finite and positive </dd></dl>
</div>
</div>
<a id="adbf329a18c5cf854a3477327afd2200b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adbf329a18c5cf854a3477327afd2200b">&#9670;&nbsp;</a></span>get_cached_power_for_binary_exponent()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">cached_power nlohmann::detail::dtoa_impl::get_cached_power_for_binary_exponent </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>e</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c satisfies (Definition 3.2 from [1]) </p><pre class="fragment"> alpha &lt;= e_c + e + q &lt;= gamma.
</pre>
</div>
</div>
<a id="a36ded358763b5dbcea9867660fbe4e28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36ded358763b5dbcea9867660fbe4e28">&#9670;&nbsp;</a></span>find_largest_pow10()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int nlohmann::detail::dtoa_impl::find_largest_pow10 </td>
<td>(</td>
<td class="paramtype">const std::uint32_t&#160;</td>
<td class="paramname"><em>n</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::uint32_t &amp;&#160;</td>
<td class="paramname"><em>pow10</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For n != 0, returns k, such that pow10 := 10^(k-1) &lt;= n &lt; 10^k. For n == 0, returns 1 and sets pow10 := 1. </p>
</div>
</div>
<a id="a9b899c72b0e1e3dd46d75c2b4e6bcdfb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b899c72b0e1e3dd46d75c2b4e6bcdfb">&#9670;&nbsp;</a></span>grisu2_digit_gen()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void nlohmann::detail::dtoa_impl::grisu2_digit_gen </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>length</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>decimal_exponent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>M_minus</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>M_plus</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Generates V = buffer * 10^decimal_exponent, such that M- &lt;= V &lt;= M+. M- and M+ must be normalized and share the same exponent -60 &lt;= e &lt;= -32. </p>
</div>
</div>
<a id="a05b681dcb8569b9784c6dccfadb01633"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05b681dcb8569b9784c6dccfadb01633">&#9670;&nbsp;</a></span>grisu2() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void nlohmann::detail::dtoa_impl::grisu2 </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>decimal_exponent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>m_minus</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>v</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">diyfp&#160;</td>
<td class="paramname"><em>m_plus</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. &gt;= max_digits10. </p>
</div>
</div>
<a id="aab7a9670a4f4704a5d0347ad7588576b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab7a9670a4f4704a5d0347ad7588576b">&#9670;&nbsp;</a></span>grisu2() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FloatType &gt; </div>
<table class="memname">
<tr>
<td class="memname">void nlohmann::detail::dtoa_impl::grisu2 </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int &amp;&#160;</td>
<td class="paramname"><em>decimal_exponent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">FloatType&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. &gt;= max_digits10. </p>
</div>
</div>
<a id="ad90f19ed10d8133b727df4b9bc5ddf5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad90f19ed10d8133b727df4b9bc5ddf5c">&#9670;&nbsp;</a></span>append_exponent()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">JSON_HEDLEY_RETURNS_NON_NULL char* nlohmann::detail::dtoa_impl::append_exponent </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>e</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>appends a decimal representation of e to buf </p>
<dl class="section return"><dt>Returns</dt><dd>a pointer to the element following the exponent. </dd></dl>
<dl class="section pre"><dt>Precondition</dt><dd>-1000 &lt; e &lt; 1000 </dd></dl>
</div>
</div>
<a id="ab441f2761e33839ca48bc2225e14a2a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab441f2761e33839ca48bc2225e14a2a9">&#9670;&nbsp;</a></span>format_buffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">JSON_HEDLEY_RETURNS_NON_NULL char* nlohmann::detail::dtoa_impl::format_buffer </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>decimal_exponent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>min_exp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_exp</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>prettify v = buf * 10^decimal_exponent </p>
<p>If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point notation. Otherwise it will be printed in exponential notation.</p>
<dl class="section pre"><dt>Precondition</dt><dd>min_exp &lt; 0 </dd>
<dd>
max_exp &gt; 0 </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<head>
<title>RenderD7 2020-2021 NPI-D7</title>
</head>