Files
rippled/Number_8cpp_source.html
2025-09-04 01:57:28 -07:00

970 lines
157 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>rippled: Number.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">rippled
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_90ffdbabf412cfdffe6b2193e0ce938a.html">libxrpl</a></li><li class="navelem"><a class="el" href="dir_c9ad8b908996c4ad90b9a0cfb3c90cd8.html">basics</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Number.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">/*</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> This file is part of rippled: https://github.com/ripple/rippled</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> Copyright (c) 2022 Ripple Labs Inc.</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"></span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> purpose with or without fee is hereby granted, provided that the above</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> copyright notice and this permission notice appear in all copies.</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"></span> </div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">*/</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">//==============================================================================</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;xrpl/basics/Number.h&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;xrpl/beast/utility/instrumentation.h&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a>&gt;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/cstddef.html">cstddef</a>&gt;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/cstdint.html">cstdint</a>&gt;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/iterator.html">iterator</a>&gt;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/limits.html">limits</a>&gt;</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/numeric.html">numeric</a>&gt;</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/stdexcept.html">stdexcept</a>&gt;</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/string.html">string</a>&gt;</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/type_traits.html">type_traits</a>&gt;</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/utility.html">utility</a>&gt;</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#ifdef _MSC_VER</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#pragma message(&quot;Using boost::multiprecision::uint128_t&quot;)</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#include &lt;boost/multiprecision/cpp_int.hpp&gt;</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">using </span>uint128_t = boost::multiprecision::uint128_t;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#else </span><span class="comment">// !defined(_MSC_VER)</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keyword">using </span>uint128_t = __uint128_t;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#endif </span><span class="comment">// !defined(_MSC_VER)</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceripple.html">ripple</a> {</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">thread_local</span> <a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">Number::rounding_mode</a> <a class="code hl_variable" href="classripple_1_1Number.html#a5a2b36707b7dc7204982e873fcc50bac">Number::mode_</a> = <a class="code hl_enumvalue" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afb083653be2726415a0832efd2d66e95">Number::to_nearest</a>;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">Number::rounding_mode</a></div>
<div class="foldopen" id="foldopen00047" data-start="{" data-end="}">
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a69a91a7aca13639e1705b7fb94ee78d5"> 47</a></span><a class="code hl_function" href="classripple_1_1Number.html#a69a91a7aca13639e1705b7fb94ee78d5">Number::getround</a>()</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>{</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classripple_1_1Number.html#a5a2b36707b7dc7204982e873fcc50bac">mode_</a>;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span>}</div>
</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">Number::rounding_mode</a></div>
<div class="foldopen" id="foldopen00053" data-start="{" data-end="}">
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a9f2a0df7ad0f278908643927a19592f2"> 53</a></span><a class="code hl_function" href="classripple_1_1Number.html#a9f2a0df7ad0f278908643927a19592f2">Number::setround</a>(<a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">rounding_mode</a> mode)</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>{</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/exchange.html">std::exchange</a>(<a class="code hl_variable" href="classripple_1_1Number.html#a5a2b36707b7dc7204982e873fcc50bac">mode_</a>, mode);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">// Guard</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">// The Guard class is used to tempoarily add extra digits of</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// preicision to an operation. This enables the final result</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// to be correctly rounded to the internal precision of Number.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="foldopen" id="foldopen00064" data-start="{" data-end="};">
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html"> 64</a></span><span class="keyword">class </span><a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Number::Guard</a></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span>{</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd"> 66</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a>; <span class="comment">// 16 decimal guard digits</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948"> 67</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint8_t</a> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a> : 1; <span class="comment">// has a non-zero digit been shifted off the end</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382"> 68</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint8_t</a> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a> : 1; <span class="comment">// the sign of the guard digits</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00071" data-start="{" data-end="}">
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#ab8c124fbd66b71e9282831794d6dca7b"> 71</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ab8c124fbd66b71e9282831794d6dca7b">Guard</a>() : <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a>{0}, <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a>{0}, <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a>{0}</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// set &amp; test the sign bit</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ad867ec492c1533e448bda8bb58af444a">set_positive</a>() noexcept;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>() noexcept;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">bool</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ab190e6f6405f271600b2f99ff15a6bc2">is_negative</a>() const noexcept;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// add a digit</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(<span class="keywordtype">unsigned</span> d) noexcept;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// recover a digit</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">unsigned</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a997cf381405becb9566b855185984471">pop</a>() noexcept;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// Indicate round direction: 1 is up, -1 is down, 0 is even</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// This enables the client to round towards nearest, and on</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// tie, round towards even.</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>() noexcept;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>};</div>
</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>inline <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00099" data-start="{" data-end="}">
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#ad867ec492c1533e448bda8bb58af444a"> 99</a></span><a class="code hl_class" href="classripple_1_1Number.html">Number</a>::<a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Guard</a>::<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ad867ec492c1533e448bda8bb58af444a">set_positive</a>() noexcept</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>{</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a> = 0;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>}</div>
</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="keyword">inline</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00105" data-start="{" data-end="}">
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c"> 105</a></span><a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">Number::Guard::set_negative</a>() noexcept</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>{</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a> = 1;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="keyword">inline</span> <span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen00111" data-start="{" data-end="}">
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#ab190e6f6405f271600b2f99ff15a6bc2"> 111</a></span><a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ab190e6f6405f271600b2f99ff15a6bc2">Number::Guard::is_negative</a>() const noexcept</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span>{</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a> == 1;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>}</div>
</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="keyword">inline</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00117" data-start="{" data-end="}">
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1"> 117</a></span><a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">Number::Guard::push</a>(<span class="keywordtype">unsigned</span> d) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>{</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a> = <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a> || (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &amp; 0x0000&#39;0000&#39;0000&#39;000F) != 0;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &gt;&gt;= 4;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> |= (d &amp; 0x0000&#39;0000&#39;0000&#39;000FULL) &lt;&lt; 60;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span>}</div>
</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="keyword">inline</span> <span class="keywordtype">unsigned</span></div>
<div class="foldopen" id="foldopen00125" data-start="{" data-end="}">
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#a997cf381405becb9566b855185984471"> 125</a></span><a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a997cf381405becb9566b855185984471">Number::Guard::pop</a>() noexcept</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span>{</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">unsigned</span> d = (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &amp; 0xF000&#39;0000&#39;0000&#39;0000) &gt;&gt; 60;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &lt;&lt;= 4;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span> d;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span>}</div>
</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="comment">// Returns:</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="comment">// -1 if Guard is less than half</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">// 0 if Guard is exactly half</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="comment">// 1 if Guard is greater than half</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span><span class="keywordtype">int</span></div>
<div class="foldopen" id="foldopen00137" data-start="{" data-end="}">
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde"> 137</a></span><a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">Number::Guard::round</a>() noexcept</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span>{</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">auto</span> mode = <a class="code hl_function" href="classripple_1_1Number.html#a69a91a7aca13639e1705b7fb94ee78d5">Number::getround</a>();</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (mode == <a class="code hl_enumvalue" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d">towards_zero</a>)</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span> (mode == <a class="code hl_enumvalue" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534a25a8f50fce6cbdd3a8c0a3aa20126324">downward</a>)</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> {</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a>)</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> {</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &gt; 0 || <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a>)</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (mode == <a class="code hl_enumvalue" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534ade4db21da96eedd46544ea52ce11a6f2">upward</a>)</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">sbit_</a>)</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &gt; 0 || <a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a>)</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// assume round to nearest if mode is not one of the predefined values</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &gt; 0x5000&#39;0000&#39;0000&#39;0000)</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">digits_</a> &lt; 0x5000&#39;0000&#39;0000&#39;0000)</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">xbit_</a>)</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>}</div>
</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment">// Number</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093"> 175</a></span><span class="keyword">constexpr</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>{1000000000000000, -15, <a class="code hl_struct" href="structripple_1_1Number_1_1unchecked.html">Number::unchecked</a>{}};</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00178" data-start="{" data-end="}">
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a5fefb45b369635e7803f4f8d3f9b9dd4"> 178</a></span><a class="code hl_function" href="classripple_1_1Number.html#a5fefb45b369635e7803f4f8d3f9b9dd4">Number::normalize</a>()</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>{</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> == 0)</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> {</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> *<span class="keyword">this</span> = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> }</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> negative = (<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> &lt; 0);</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">auto</span> m = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/make_unsigned.html">std::make_unsigned_t&lt;rep&gt;</a><span class="keyword">&gt;</span>(<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a>);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (negative)</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> m = -m;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">while</span> ((m &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a550732b6c726cffc8a742569fe76aa6e">minMantissa</a>) &amp;&amp; (<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a72928c9b23a8c2b07024d2d3ff5eed73">minExponent</a>))</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> {</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> m *= 10;</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> --<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> }</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Guard</a> g;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span> (negative)</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>();</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">while</span> (m &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> {</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> &gt;= <a class="code hl_variable" href="classripple_1_1Number.html#a388d646cceab9673a0edb81206e1e106">maxExponent</a>)</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::normalize 1&quot;</span>);</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(m % 10);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> m /= 10;</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> ++<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> }</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> = m;</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span> ((<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a72928c9b23a8c2b07024d2d3ff5eed73">minExponent</a>) || (<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a550732b6c726cffc8a742569fe76aa6e">minMantissa</a>))</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> {</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> *<span class="keyword">this</span> = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> }</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">auto</span> r = g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>();</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span> (r == 1 || (r == 0 &amp;&amp; (<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> &amp; 1) == 1))</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> ++<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a>;</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> {</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> /= 10;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> ++<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a388d646cceab9673a0edb81206e1e106">maxExponent</a>)</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::normalize 2&quot;</span>);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (negative)</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> = -<a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a>;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>}</div>
</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span><a class="code hl_class" href="classripple_1_1Number.html">Number</a>&amp;</div>
<div class="foldopen" id="foldopen00230" data-start="{" data-end="}">
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a13a7bc45654573fdb3857dae23e363fc"> 230</a></span><a class="code hl_function" href="classripple_1_1Number.html#a13a7bc45654573fdb3857dae23e363fc">Number::operator+=</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; y)</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span>{</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (y == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> {</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> *<span class="keyword">this</span> = y;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == -y)</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> *<span class="keyword">this</span> = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <a class="code hl_function" href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">isnormal</a>() &amp;&amp; y.<a class="code hl_function" href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">isnormal</a>(),</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="stringliteral">&quot;ripple::Number::operator+=(Number) : is normal&quot;</span>);</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">auto</span> xm = <a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">auto</span> xe = <a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">int</span> xn = 1;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span> (xm &lt; 0)</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> xm = -xm;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> xn = -1;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keyword">auto</span> ym = y.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">auto</span> ye = y.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> yn = 1;</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span> (ym &lt; 0)</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> {</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> ym = -ym;</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> yn = -1;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> }</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Guard</a> g;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span> (xe &lt; ye)</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> {</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span> (xn == -1)</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>();</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">do</span></div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> {</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(xm % 10);</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> xm /= 10;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> ++xe;</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> } <span class="keywordflow">while</span> (xe &lt; ye);</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> }</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xe &gt; ye)</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> {</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (yn == -1)</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>();</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">do</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> {</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(ym % 10);</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> ym /= 10;</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> ++ye;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> } <span class="keywordflow">while</span> (xe &gt; ye);</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> }</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (xn == yn)</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> xm += ym;</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">if</span> (xm &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> {</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(xm % 10);</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> xm /= 10;</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> ++xe;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> }</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">auto</span> r = g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>();</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span> (r == 1 || (r == 0 &amp;&amp; (xm &amp; 1) == 1))</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> {</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> ++xm;</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span> (xm &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> {</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> xm /= 10;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> ++xe;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span> (xe &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a388d646cceab9673a0edb81206e1e106">maxExponent</a>)</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::addition overflow&quot;</span>);</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> }</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> {</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span> (xm &gt; ym)</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xm = xm - ym;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> }</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> {</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xm = ym - xm;</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xe = ye;</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> xn = yn;</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> }</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">while</span> (xm &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a550732b6c726cffc8a742569fe76aa6e">minMantissa</a>)</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> {</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> xm *= 10;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> xm -= g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a997cf381405becb9566b855185984471">pop</a>();</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> --xe;</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> }</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">auto</span> r = g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>();</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span> (r == 1 || (r == 0 &amp;&amp; (xm &amp; 1) == 1))</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> {</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> --xm;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">if</span> (xm &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a550732b6c726cffc8a742569fe76aa6e">minMantissa</a>)</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> {</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> xm *= 10;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> --xe;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> }</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> }</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span> (xe &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a72928c9b23a8c2b07024d2d3ff5eed73">minExponent</a>)</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> {</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xm = 0;</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> xe = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{}.<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> }</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> }</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> = xm * xn;</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> = xe;</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span>}</div>
</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="comment">// Optimization equivalent to:</span></div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span><span class="comment">// auto r = static_cast&lt;unsigned&gt;(u % 10);</span></div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="comment">// u /= 10;</span></div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span><span class="comment">// return r;</span></div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span><span class="comment">// Derived from Hacker&#39;s Delight Second Edition Chapter 10</span></div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="comment">// by Henry S. Warren, Jr.</span></div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span></div>
<div class="foldopen" id="foldopen00354" data-start="{" data-end="}">
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"><a class="line" href="namespaceripple.html#a923b922c724a109a539486a3115eb83d"> 354</a></span><a class="code hl_function" href="namespaceripple.html#a923b922c724a109a539486a3115eb83d">divu10</a>(uint128_t&amp; u)</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span>{</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// q = u * 0.75</span></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">auto</span> q = (u &gt;&gt; 1) + (u &gt;&gt; 2);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="comment">// iterate towards q = u * 0.8</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> q += q &gt;&gt; 4;</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> q += q &gt;&gt; 8;</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> q += q &gt;&gt; 16;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> q += q &gt;&gt; 32;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> q += q &gt;&gt; 64;</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="comment">// q /= 8 approximately == u / 10</span></div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> q &gt;&gt;= 3;</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// r = u - q * 10 approximately == u % 10</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">auto</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(u - ((q &lt;&lt; 3) + (q &lt;&lt; 1)));</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="comment">// correction c is 1 if r &gt;= 10 else 0</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keyword">auto</span> c = (r + 6) &gt;&gt; 4;</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> u = q + c;</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> r -= c * 10;</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span>}</div>
</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a>&amp;</div>
<div class="foldopen" id="foldopen00376" data-start="{" data-end="}">
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a6c5e4fb40d9530e2403c7d52075c304c"> 376</a></span><a class="code hl_function" href="classripple_1_1Number.html#a6c5e4fb40d9530e2403c7d52075c304c">Number::operator*=</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; y)</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span>{</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (y == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> {</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> *<span class="keyword">this</span> = y;</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> }</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <a class="code hl_function" href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">isnormal</a>() &amp;&amp; y.<a class="code hl_function" href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">isnormal</a>(),</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="stringliteral">&quot;ripple::Number::operator*=(Number) : is normal&quot;</span>);</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keyword">auto</span> xm = <a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keyword">auto</span> xe = <a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">int</span> xn = 1;</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span> (xm &lt; 0)</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> {</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> xm = -xm;</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> xn = -1;</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> }</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">auto</span> ym = y.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keyword">auto</span> ye = y.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keywordtype">int</span> yn = 1;</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span> (ym &lt; 0)</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> {</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> ym = -ym;</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> yn = -1;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> }</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keyword">auto</span> zm = uint128_t(xm) * uint128_t(ym);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">auto</span> ze = xe + ye;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">auto</span> zn = xn * yn;</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Guard</a> g;</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span> (zn == -1)</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>();</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">while</span> (zm &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="comment">// The following is optimization for:</span></div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="comment">// g.push(static_cast&lt;unsigned&gt;(zm % 10));</span></div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="comment">// zm /= 10;</span></div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(<a class="code hl_function" href="namespaceripple.html#a923b922c724a109a539486a3115eb83d">divu10</a>(zm));</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> ++ze;</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> }</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> xm = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">rep</a><span class="keyword">&gt;</span>(zm);</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> xe = ze;</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <span class="keyword">auto</span> r = g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>();</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">if</span> (r == 1 || (r == 0 &amp;&amp; (xm &amp; 1) == 1))</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> {</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> ++xm;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">if</span> (xm &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">maxMantissa</a>)</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> {</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> xm /= 10;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> ++xe;</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> }</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> }</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span> (xe &lt; <a class="code hl_variable" href="classripple_1_1Number.html#a72928c9b23a8c2b07024d2d3ff5eed73">minExponent</a>)</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> {</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> xm = 0;</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> xe = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{}.<a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> }</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">if</span> (xe &gt; <a class="code hl_variable" href="classripple_1_1Number.html#a388d646cceab9673a0edb81206e1e106">maxExponent</a>)</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="stringliteral">&quot;Number::multiplication overflow : exponent is &quot;</span> +</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(xe));</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> = xm * zn;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> = xe;</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <a class="code hl_function" href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">isnormal</a>() || *<span class="keyword">this</span> == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{},</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="stringliteral">&quot;ripple::Number::operator*=(Number) : result is normal&quot;</span>);</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span>}</div>
</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span><a class="code hl_class" href="classripple_1_1Number.html">Number</a>&amp;</div>
<div class="foldopen" id="foldopen00448" data-start="{" data-end="}">
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a3ae0d48f1d706dbff8b184716fa313fd"> 448</a></span><a class="code hl_function" href="classripple_1_1Number.html#a3ae0d48f1d706dbff8b184716fa313fd">Number::operator/=</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; y)</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span>{</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">if</span> (y == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number: divide by 0&quot;</span>);</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">int</span> np = 1;</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keyword">auto</span> nm = <a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="keyword">auto</span> ne = <a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">if</span> (nm &lt; 0)</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> nm = -nm;</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> np = -1;</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> }</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordtype">int</span> dp = 1;</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keyword">auto</span> dm = y.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">auto</span> de = y.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">if</span> (dm &lt; 0)</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> {</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> dm = -dm;</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> dp = -1;</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> }</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="comment">// Shift by 10^17 gives greatest precision while not overflowing uint128_t</span></div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="comment">// or the cast back to int64_t</span></div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> uint128_t <span class="keyword">const</span> f = 100&#39;000&#39;000&#39;000&#39;000&#39;000;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">&gt;</span>(uint128_t(nm) * f / uint128_t(dm));</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a> = ne - de - 17;</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a> *= np * dp;</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <a class="code hl_function" href="classripple_1_1Number.html#a5fefb45b369635e7803f4f8d3f9b9dd4">normalize</a>();</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span>}</div>
</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
<div class="foldopen" id="foldopen00480" data-start="{" data-end="}">
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"><a class="line" href="classripple_1_1Number.html#a8fa9f27fcce51b0e568cbe0804163e28"> 480</a></span>Number::operator <a class="code hl_typedef" href="classripple_1_1Number.html#a8d2697ce4073b76f05e0480a9b454a66">rep</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="keyword"></span>{</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">rep</a> drops = <a class="code hl_variable" href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">mantissa_</a>;</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keywordtype">int</span> offset = <a class="code hl_variable" href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">exponent_</a>;</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <a class="code hl_class" href="classripple_1_1Number_1_1Guard.html">Guard</a> g;</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">if</span> (drops != 0)</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> {</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span> (drops &lt; 0)</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> {</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">set_negative</a>();</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> drops = -drops;</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> }</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">for</span> (; offset &lt; 0; ++offset)</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> {</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">push</a>(drops % 10);</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> drops /= 10;</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">for</span> (; offset &gt; 0; --offset)</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> {</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span> (drops &gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits</a>&lt;<span class="keyword">decltype</span>(drops)&gt;<a class="code hl_function" href="classripple_1_1Number.html#a6223254bb40f9a21dbdd8b360faaf401">::max</a>() / 10)</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::operator rep() overflow&quot;</span>);</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> drops *= 10;</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> }</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keyword">auto</span> r = g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">round</a>();</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">if</span> (r == 1 || (r == 0 &amp;&amp; (drops &amp; 1) == 1))</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> {</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> ++drops;</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> }</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span> (g.<a class="code hl_function" href="classripple_1_1Number_1_1Guard.html#ab190e6f6405f271600b2f99ff15a6bc2">is_negative</a>())</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> drops = -drops;</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> }</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">return</span> drops;</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span>}</div>
</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
<div class="foldopen" id="foldopen00515" data-start="{" data-end="}">
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"><a class="line" href="namespaceripple.html#a5bf7ceb7c5d4c12b5137def1455f0bdc"> 515</a></span><a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; amount)</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span>{</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// keep full internal accuracy, but make more human friendly if possible</span></div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">if</span> (amount == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> = amount.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>();</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">auto</span> <a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a> = amount.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>();</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="comment">// Use scientific notation for exponents that are too small or too large</span></div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">if</span> (((<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> != 0) &amp;&amp; ((<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> &lt; -25) || (<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> &gt; -5))))</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> {</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ret = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>);</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">&#39;e&#39;</span>);</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>));</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> }</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">bool</span> negative = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a> &lt; 0)</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> {</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a> = -<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>;</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> negative = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> }</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> + 43 &gt; 0, <span class="stringliteral">&quot;ripple::to_string(Number) : minimum exponent&quot;</span>);</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> </div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> ptrdiff_t <span class="keyword">const</span> pad_prefix = 27;</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> ptrdiff_t <span class="keyword">const</span> pad_suffix = 23;</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> raw_value(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>));</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> val;</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> </div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">reserve</a>(raw_value.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">length</a>() + pad_prefix + pad_suffix);</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pad_prefix, <span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(raw_value);</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pad_suffix, <span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> ptrdiff_t <span class="keyword">const</span> offset(<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a> + 43);</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="keyword">auto</span> pre_from(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>());</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keyword">auto</span> <span class="keyword">const</span> pre_to(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>() + offset);</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keyword">auto</span> <span class="keyword">const</span> post_from(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>() + offset);</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">auto</span> post_to(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/end.html">end</a>());</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="comment">// Crop leading zeroes. Take advantage of the fact that there&#39;s always a</span></div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="comment">// fixed amount of leading zeroes and skip them.</span></div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a>(pre_from, pre_to) &gt; pad_prefix)</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> pre_from += pad_prefix;</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> </div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> post_to &gt;= post_from,</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="stringliteral">&quot;ripple::to_string(Number) : first distance check&quot;</span>);</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> pre_from = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(pre_from, pre_to, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> c != <span class="charliteral">&#39;0&#39;</span>; });</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> </div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// Crop trailing zeroes. Take advantage of the fact that there&#39;s always a</span></div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="comment">// fixed amount of trailing zeroes and skip them.</span></div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a>(post_from, post_to) &gt; pad_suffix)</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> post_to -= pad_suffix;</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> </div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> post_to &gt;= post_from,</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="stringliteral">&quot;ripple::to_string(Number) : second distance check&quot;</span>);</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> </div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> post_to = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a>(post_to),</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a>(post_from),</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> c != <span class="charliteral">&#39;0&#39;</span>; })</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> .base();</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> </div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ret;</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span> (negative)</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">&#39;-&#39;</span>);</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="comment">// Assemble the output:</span></div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">if</span> (pre_from == pre_to)</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pre_from, pre_to);</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span> (post_to != post_from)</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">&#39;.&#39;</span>);</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(post_from, post_to);</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> </div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span>}</div>
</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> </div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span><span class="comment">// Returns f^n</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span><span class="comment">// Uses a log_2(n) number of multiplications</span></div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> </div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a></div>
<div class="foldopen" id="foldopen00613" data-start="{" data-end="}">
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"><a class="line" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd"> 613</a></span><a class="code hl_function" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">power</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; f, <span class="keywordtype">unsigned</span> n)</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span>{</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span> (n == 0)</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">if</span> (n == 1)</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keyword">auto</span> r = <a class="code hl_function" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">power</a>(f, n / 2);</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> r *= r;</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">if</span> (n % 2 != 0)</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> r *= f;</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span>}</div>
</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> </div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="comment">// Returns f^(1/d)</span></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span><span class="comment">// Uses NewtonRaphson iterations until the result stops changing</span></div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span><span class="comment">// to find the non-negative root of the polynomial g(x) = x^d - f</span></div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> </div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span><span class="comment">// This function, and power(Number f, unsigned n, unsigned d)</span></div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span><span class="comment">// treat corner cases such as 0 roots as advised by Annex F of</span></div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span><span class="comment">// the C standard, which itself is consistent with the IEEE</span></div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span><span class="comment">// floating point standards.</span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> </div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span><a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a></div>
<div class="foldopen" id="foldopen00636" data-start="{" data-end="}">
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"><a class="line" href="namespaceripple.html#acdc87ea9c4ad1742d4aeebac963e8570"> 636</a></span><a class="code hl_function" href="namespaceripple.html#acdc87ea9c4ad1742d4aeebac963e8570">root</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> f, <span class="keywordtype">unsigned</span> d)</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span>{</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">if</span> (f == <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a> || d == 1)</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">if</span> (d == 0)</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> {</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span> (f == -<a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afd19ced6c417571e8762d1d3cd89be0b">abs</a>(f) &lt; <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::root infinity&quot;</span>);</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> }</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span> (f &lt; <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{} &amp;&amp; d % 2 == 0)</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::root nan&quot;</span>);</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">if</span> (f == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> </div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <span class="comment">// Scale f into the range (0, 1) such that f&#39;s exponent is a multiple of d</span></div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keyword">auto</span> e = f.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() + 16;</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keyword">auto</span> <span class="keyword">const</span> di = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(d);</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="keyword">auto</span> ex = [e = e, di = di]() <span class="comment">// Euclidean remainder of e/d</span></div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> {</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <span class="keywordtype">int</span> k = (e &gt;= 0 ? e : e - (di - 1)) / di;</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="keywordtype">int</span> k2 = e - k * di;</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span> (k2 == 0)</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">return</span> di - k2;</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> }();</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> e += ex;</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> f = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{f.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>(), f.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() - e}; <span class="comment">// f /= 10^e;</span></div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="keywordtype">bool</span> neg = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">if</span> (f &lt; <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> {</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> neg = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> f = -f;</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> }</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// Quadratic least squares curve fit of f^(1/d) in the range [0, 1]</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="keyword">auto</span> <span class="keyword">const</span> D = ((6 * di + 11) * di + 6) * di + 1;</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keyword">auto</span> <span class="keyword">const</span> a0 = 3 * di * ((2 * di - 3) * di + 1);</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keyword">auto</span> <span class="keyword">const</span> a1 = 24 * di * (2 * di - 1);</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keyword">auto</span> <span class="keyword">const</span> a2 = -30 * (di - 1) * di;</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> r = ((<a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a2} * f + <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a1}) * f + <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a0}) / <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{D};</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">if</span> (neg)</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> {</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> f = -f;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> r = -r;</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> }</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="comment">// NewtonRaphson iteration of f^(1/d) with initial guess r</span></div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="comment">// halt when r stops changing, checking for bouncing on the last iteration</span></div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> rm1{};</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> rm2{};</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">do</span></div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> {</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> rm2 = rm1;</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> rm1 = r;</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> r = (<a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a>(d - 1) * r + f / <a class="code hl_function" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">power</a>(r, d - 1)) / <a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a>(d);</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> } <span class="keywordflow">while</span> (r != rm1 &amp;&amp; r != rm2);</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> </div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="comment">// return r * 10^(e/d) to reverse scaling</span></div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{r.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>(), r.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() + e / di};</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span>}</div>
</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> </div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span><a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a></div>
<div class="foldopen" id="foldopen00701" data-start="{" data-end="}">
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"><a class="line" href="namespaceripple.html#aecb9ae1add070266b1be59ff570ec713"> 701</a></span><a class="code hl_function" href="namespaceripple.html#aecb9ae1add070266b1be59ff570ec713">root2</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> f)</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span>{</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">if</span> (f == <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">if</span> (f &lt; <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::root nan&quot;</span>);</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">if</span> (f == <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="comment">// Scale f into the range (0, 1) such that f&#39;s exponent is a multiple of d</span></div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="keyword">auto</span> e = f.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() + 16;</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">if</span> (e % 2 != 0)</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> ++e;</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> f = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{f.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>(), f.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() - e}; <span class="comment">// f /= 10^e;</span></div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> </div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <span class="comment">// Quadratic least squares curve fit of f^(1/d) in the range [0, 1]</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <span class="keyword">auto</span> <span class="keyword">const</span> D = 105;</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <span class="keyword">auto</span> <span class="keyword">const</span> a0 = 18;</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> <span class="keyword">auto</span> <span class="keyword">const</span> a1 = 144;</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="keyword">auto</span> <span class="keyword">const</span> a2 = -60;</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> r = ((<a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a2} * f + <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a1}) * f + <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{a0}) / <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{D};</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> </div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="comment">// NewtonRaphson iteration of f^(1/2) with initial guess r</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="comment">// halt when r stops changing, checking for bouncing on the last iteration</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> rm1{};</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> rm2{};</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">do</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> {</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> rm2 = rm1;</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> rm1 = r;</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> r = (r + f / r) / <a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a>(2);</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> } <span class="keywordflow">while</span> (r != rm1 &amp;&amp; r != rm2);</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> </div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// return r * 10^(e/2) to reverse scaling</span></div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{r.<a class="code hl_function" href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">mantissa</a>(), r.<a class="code hl_function" href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">exponent</a>() + e / 2};</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span>}</div>
</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> </div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span><span class="comment">// Returns f^(n/d)</span></div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> </div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span><a class="code hl_function" href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">Number</a></div>
<div class="foldopen" id="foldopen00741" data-start="{" data-end="}">
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"><a class="line" href="namespaceripple.html#a04fb82bcbf2bd573d39cc96706f3aa23"> 741</a></span><a class="code hl_function" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">power</a>(<a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; f, <span class="keywordtype">unsigned</span> n, <span class="keywordtype">unsigned</span> d)</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span>{</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">if</span> (f == <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">return</span> f;</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="keyword">auto</span> g = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/numeric/gcd.html">std::gcd</a>(n, d);</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">if</span> (g == 0)</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::power nan&quot;</span>);</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">if</span> (d == 0)</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> {</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="keywordflow">if</span> (f == -<a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afd19ced6c417571e8762d1d3cd89be0b">abs</a>(f) &lt; <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>)</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="comment">// abs(f) &gt; one</span></div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::power infinity&quot;</span>);</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> }</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">if</span> (n == 0)</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> n /= g;</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> d /= g;</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">if</span> ((n % 2) == 1 &amp;&amp; (d % 2) == 0 &amp;&amp; f &lt; <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{})</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a>(<span class="stringliteral">&quot;Number::power nan&quot;</span>);</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#acdc87ea9c4ad1742d4aeebac963e8570">root</a>(<a class="code hl_function" href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">power</a>(f, n), d);</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span>}</div>
</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
<div class="ttc" id="aappend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">std::string::append</a></div><div class="ttdeci">T append(T... args)</div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
<div class="ttc" id="abegin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">std::string::begin</a></div><div class="ttdeci">T begin(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html">ripple::Number::Guard</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00064">Number.cpp:65</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_a29e64e95a3e18476211420722180906c"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#a29e64e95a3e18476211420722180906c">ripple::Number::Guard::set_negative</a></div><div class="ttdeci">void set_negative() noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00105">Number.cpp:105</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_a78ddead46cd4a5ce528d7d8f765e4ea1"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#a78ddead46cd4a5ce528d7d8f765e4ea1">ripple::Number::Guard::push</a></div><div class="ttdeci">void push(unsigned d) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00117">Number.cpp:117</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_a997cf381405becb9566b855185984471"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#a997cf381405becb9566b855185984471">ripple::Number::Guard::pop</a></div><div class="ttdeci">unsigned pop() noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00125">Number.cpp:125</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_ab190e6f6405f271600b2f99ff15a6bc2"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#ab190e6f6405f271600b2f99ff15a6bc2">ripple::Number::Guard::is_negative</a></div><div class="ttdeci">bool is_negative() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00111">Number.cpp:111</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_ab8c124fbd66b71e9282831794d6dca7b"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#ab8c124fbd66b71e9282831794d6dca7b">ripple::Number::Guard::Guard</a></div><div class="ttdeci">Guard()</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00071">Number.cpp:71</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_abfe099a7a0d7b598b14f8ad317cb2948"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#abfe099a7a0d7b598b14f8ad317cb2948">ripple::Number::Guard::xbit_</a></div><div class="ttdeci">std::uint8_t xbit_</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00067">Number.cpp:67</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_ac287598d3a58a5b3521715c20cdf99bd"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#ac287598d3a58a5b3521715c20cdf99bd">ripple::Number::Guard::digits_</a></div><div class="ttdeci">std::uint64_t digits_</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00066">Number.cpp:66</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_acf34c737037a6e8a5d04d33338a2ccde"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#acf34c737037a6e8a5d04d33338a2ccde">ripple::Number::Guard::round</a></div><div class="ttdeci">int round() noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00137">Number.cpp:137</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_ad7474f95ecebeaa0a6a4b03a2ad3d382"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#ad7474f95ecebeaa0a6a4b03a2ad3d382">ripple::Number::Guard::sbit_</a></div><div class="ttdeci">std::uint8_t sbit_</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00068">Number.cpp:68</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_1_1Guard_html_ad867ec492c1533e448bda8bb58af444a"><div class="ttname"><a href="classripple_1_1Number_1_1Guard.html#ad867ec492c1533e448bda8bb58af444a">ripple::Number::Guard::set_positive</a></div><div class="ttdeci">void set_positive() noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00099">Number.cpp:99</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html"><div class="ttname"><a href="classripple_1_1Number.html">ripple::Number</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00035">Number.h:36</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a014fb6ab35fb927939c085dccb43422d"><div class="ttname"><a href="classripple_1_1Number.html#a014fb6ab35fb927939c085dccb43422d">ripple::Number::isnormal</a></div><div class="ttdeci">constexpr bool isnormal() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00342">Number.h:342</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a13a7bc45654573fdb3857dae23e363fc"><div class="ttname"><a href="classripple_1_1Number.html#a13a7bc45654573fdb3857dae23e363fc">ripple::Number::operator+=</a></div><div class="ttdeci">Number &amp; operator+=(Number const &amp;x)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00230">Number.cpp:230</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a18f3cb87112cf4436f8730a4f3333550"><div class="ttname"><a href="classripple_1_1Number.html#a18f3cb87112cf4436f8730a4f3333550">ripple::Number::maxMantissa</a></div><div class="ttdeci">static constexpr std::int64_t maxMantissa</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00044">Number.h:44</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">ripple::Number::rounding_mode</a></div><div class="ttdeci">rounding_mode</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00196">Number.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534a25a8f50fce6cbdd3a8c0a3aa20126324"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534a25a8f50fce6cbdd3a8c0a3aa20126324">ripple::Number::downward</a></div><div class="ttdeci">@ downward</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00196">Number.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534ade4db21da96eedd46544ea52ce11a6f2"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534ade4db21da96eedd46544ea52ce11a6f2">ripple::Number::upward</a></div><div class="ttdeci">@ upward</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00196">Number.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534afb083653be2726415a0832efd2d66e95"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afb083653be2726415a0832efd2d66e95">ripple::Number::to_nearest</a></div><div class="ttdeci">@ to_nearest</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00196">Number.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d">ripple::Number::towards_zero</a></div><div class="ttdeci">@ towards_zero</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00196">Number.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a388d646cceab9673a0edb81206e1e106"><div class="ttname"><a href="classripple_1_1Number.html#a388d646cceab9673a0edb81206e1e106">ripple::Number::maxExponent</a></div><div class="ttdeci">static constexpr int maxExponent</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00048">Number.h:48</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a3ae0d48f1d706dbff8b184716fa313fd"><div class="ttname"><a href="classripple_1_1Number.html#a3ae0d48f1d706dbff8b184716fa313fd">ripple::Number::operator/=</a></div><div class="ttdeci">Number &amp; operator/=(Number const &amp;x)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00448">Number.cpp:448</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a550732b6c726cffc8a742569fe76aa6e"><div class="ttname"><a href="classripple_1_1Number.html#a550732b6c726cffc8a742569fe76aa6e">ripple::Number::minMantissa</a></div><div class="ttdeci">static constexpr std::int64_t minMantissa</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00043">Number.h:43</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a596b96835970375f7f93f272600939d2"><div class="ttname"><a href="classripple_1_1Number.html#a596b96835970375f7f93f272600939d2">ripple::Number::exponent</a></div><div class="ttdeci">constexpr int exponent() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00236">Number.h:236</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a5a2b36707b7dc7204982e873fcc50bac"><div class="ttname"><a href="classripple_1_1Number.html#a5a2b36707b7dc7204982e873fcc50bac">ripple::Number::mode_</a></div><div class="ttdeci">static thread_local rounding_mode mode_</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00204">Number.h:204</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a5fefb45b369635e7803f4f8d3f9b9dd4"><div class="ttname"><a href="classripple_1_1Number.html#a5fefb45b369635e7803f4f8d3f9b9dd4">ripple::Number::normalize</a></div><div class="ttdeci">void normalize()</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00178">Number.cpp:178</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a6223254bb40f9a21dbdd8b360faaf401"><div class="ttname"><a href="classripple_1_1Number.html#a6223254bb40f9a21dbdd8b360faaf401">ripple::Number::max</a></div><div class="ttdeci">static constexpr Number max() noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00330">Number.h:330</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a62582b28d9183e7618fec0f0458331ab"><div class="ttname"><a href="classripple_1_1Number.html#a62582b28d9183e7618fec0f0458331ab">ripple::Number::exponent_</a></div><div class="ttdeci">int exponent_</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00039">Number.h:39</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a69a91a7aca13639e1705b7fb94ee78d5"><div class="ttname"><a href="classripple_1_1Number.html#a69a91a7aca13639e1705b7fb94ee78d5">ripple::Number::getround</a></div><div class="ttdeci">static rounding_mode getround()</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00047">Number.cpp:47</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a6c5e4fb40d9530e2403c7d52075c304c"><div class="ttname"><a href="classripple_1_1Number.html#a6c5e4fb40d9530e2403c7d52075c304c">ripple::Number::operator*=</a></div><div class="ttdeci">Number &amp; operator*=(Number const &amp;x)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00376">Number.cpp:376</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a72928c9b23a8c2b07024d2d3ff5eed73"><div class="ttname"><a href="classripple_1_1Number.html#a72928c9b23a8c2b07024d2d3ff5eed73">ripple::Number::minExponent</a></div><div class="ttdeci">static constexpr int minExponent</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00047">Number.h:47</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a8d2697ce4073b76f05e0480a9b454a66"><div class="ttname"><a href="classripple_1_1Number.html#a8d2697ce4073b76f05e0480a9b454a66">ripple::Number::rep</a></div><div class="ttdeci">std::int64_t rep</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00037">Number.h:37</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_a9f2a0df7ad0f278908643927a19592f2"><div class="ttname"><a href="classripple_1_1Number.html#a9f2a0df7ad0f278908643927a19592f2">ripple::Number::setround</a></div><div class="ttdeci">static rounding_mode setround(rounding_mode mode)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00053">Number.cpp:53</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_aa072c34be5b612f33b61787ad8f09d0b"><div class="ttname"><a href="classripple_1_1Number.html#aa072c34be5b612f33b61787ad8f09d0b">ripple::Number::mantissa</a></div><div class="ttdeci">constexpr rep mantissa() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00230">Number.h:230</a></div></div>
<div class="ttc" id="aclassripple_1_1Number_html_ac796fb449f3e3573c8d923bd3a905599"><div class="ttname"><a href="classripple_1_1Number.html#ac796fb449f3e3573c8d923bd3a905599">ripple::Number::Number</a></div><div class="ttdeci">constexpr Number()=default</div></div>
<div class="ttc" id="aclassripple_1_1Number_html_ae8914a365ad9ca852b2d8dbdd43abb6f"><div class="ttname"><a href="classripple_1_1Number.html#ae8914a365ad9ca852b2d8dbdd43abb6f">ripple::Number::mantissa_</a></div><div class="ttdeci">rep mantissa_</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00038">Number.h:38</a></div></div>
<div class="ttc" id="acstddef_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cstddef.html">cstddef</a></div></div>
<div class="ttc" id="acstdint_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cstdint.html">cstdint</a></div></div>
<div class="ttc" id="adistance_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a></div><div class="ttdeci">T distance(T... args)</div></div>
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/end.html">std::string::end</a></div><div class="ttdeci">T end(T... args)</div></div>
<div class="ttc" id="aexchange_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/exchange.html">std::exchange</a></div><div class="ttdeci">T exchange(T... args)</div></div>
<div class="ttc" id="afind_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a></div><div class="ttdeci">T find_if(T... args)</div></div>
<div class="ttc" id="agcd_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/gcd.html">std::gcd</a></div><div class="ttdeci">T gcd(T... args)</div></div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div></div>
<div class="ttc" id="aiterator_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/iterator.html">iterator</a></div></div>
<div class="ttc" id="alimits_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/limits.html">limits</a></div></div>
<div class="ttc" id="amake_reverse_iterator_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a></div><div class="ttdeci">T make_reverse_iterator(T... args)</div></div>
<div class="ttc" id="amake_unsigned_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/make_unsigned.html">std::make_unsigned_t</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00025">algorithm.h:25</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1330e8eb921148a60725bcfc77d0a093"><div class="ttname"><a href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">ripple::one</a></div><div class="ttdeci">constexpr Number one</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00175">Number.cpp:175</a></div></div>
<div class="ttc" id="anamespaceripple_html_a923b922c724a109a539486a3115eb83d"><div class="ttname"><a href="namespaceripple.html#a923b922c724a109a539486a3115eb83d">ripple::divu10</a></div><div class="ttdeci">static unsigned divu10(uint128_t &amp;u)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00354">Number.cpp:354</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa91f6bf62bcd2aa44e01926c3a160abd"><div class="ttname"><a href="namespaceripple.html#aa91f6bf62bcd2aa44e01926c3a160abd">ripple::power</a></div><div class="ttdeci">Number power(Number const &amp;f, unsigned n)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00613">Number.cpp:613</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::to_string</a></div><div class="ttdeci">std::string to_string(base_uint&lt; Bits, Tag &gt; const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00630">base_uint.h:630</a></div></div>
<div class="ttc" id="anamespaceripple_html_acdc87ea9c4ad1742d4aeebac963e8570"><div class="ttname"><a href="namespaceripple.html#acdc87ea9c4ad1742d4aeebac963e8570">ripple::root</a></div><div class="ttdeci">Number root(Number f, unsigned d)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00636">Number.cpp:636</a></div></div>
<div class="ttc" id="anamespaceripple_html_aecb9ae1add070266b1be59ff570ec713"><div class="ttname"><a href="namespaceripple.html#aecb9ae1add070266b1be59ff570ec713">ripple::root2</a></div><div class="ttdeci">Number root2(Number f)</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00701">Number.cpp:701</a></div></div>
<div class="ttc" id="anamespaceripple_html_afd19ced6c417571e8762d1d3cd89be0b"><div class="ttname"><a href="namespaceripple.html#afd19ced6c417571e8762d1d3cd89be0b">ripple::abs</a></div><div class="ttdeci">constexpr Number abs(Number x) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00350">Number.h:350</a></div></div>
<div class="ttc" id="anumeric_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/numeric.html">numeric</a></div></div>
<div class="ttc" id="anumeric_limits_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits</a></div></div>
<div class="ttc" id="aoverflow_error_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/overflow_error.html">std::overflow_error</a></div></div>
<div class="ttc" id="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">std::string::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">std::string::length</a></div><div class="ttdeci">T length(T... args)</div></div>
<div class="ttc" id="astdexcept_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/stdexcept.html">stdexcept</a></div></div>
<div class="ttc" id="astring_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/string.html">string</a></div></div>
<div class="ttc" id="astructripple_1_1Number_1_1unchecked_html"><div class="ttname"><a href="structripple_1_1Number_1_1unchecked.html">ripple::Number::unchecked</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00050">Number.h:51</a></div></div>
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
<div class="ttc" id="atype_traits_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/type_traits.html">type_traits</a></div></div>
<div class="ttc" id="autility_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/utility.html">utility</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>