| <!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"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
| <meta http-equiv="X-UA-Compatible" content="IE=9"/> |
| <meta name="generator" content="Doxygen 1.9.1"/> |
| <meta name="viewport" content="width=device-width, initial-scale=1"/> |
| <title>datasketches-cpp: cpc/include/icon_estimator.hpp 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 style="height: 56px;"> |
| <td id="projectalign" style="padding-left: 0.5em;"> |
| <div id="projectname">datasketches-cpp |
| </div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <!-- end header part --> |
| <!-- Generated by Doxygen 1.9.1 --> |
| <script type="text/javascript"> |
| /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ |
| var searchBox = new SearchBox("searchBox", "search",false,'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:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ |
| $(function() { |
| initMenu('',true,false,'search.php','Search'); |
| $(document).ready(function() { init_search(); }); |
| }); |
| /* @license-end */</script> |
| <div id="main-nav"></div> |
| <!-- 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"> |
| <iframe src="javascript:void(0)" frameborder="0" |
| name="MSearchResults" id="MSearchResults"> |
| </iframe> |
| </div> |
| |
| <div id="nav-path" class="navpath"> |
| <ul> |
| <li class="navelem"><a class="el" href="dir_82f3a10095a8f2296c0cf5c491a57b02.html">cpc</a></li><li class="navelem"><a class="el" href="dir_fabb7854c43508dcbf81254d1daad42f.html">include</a></li> </ul> |
| </div> |
| </div><!-- top --> |
| <div class="header"> |
| <div class="headertitle"> |
| <div class="title">icon_estimator.hpp</div> </div> |
| </div><!--header--> |
| <div class="contents"> |
| <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div> |
| <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div> |
| <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div> |
| <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * distributed with this work for additional information</span></div> |
| <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div> |
| <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div> |
| <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * "License"); you may not use this file except in compliance</span></div> |
| <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * with the License. You may obtain a copy of the License at</span></div> |
| <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div> |
| <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div> |
| <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div> |
| <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div> |
| <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * software distributed under the License is distributed on an</span></div> |
| <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div> |
| <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * KIND, either express or implied. See the License for the</span></div> |
| <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * specific language governing permissions and limitations</span></div> |
| <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * under the License.</span></div> |
| <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> */</span></div> |
| <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  </div> |
| <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">// author Kevin Lang, Oath Research</span></div> |
| <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  </div> |
| <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifndef ICON_ESTIMATOR_HPP_</span></div> |
| <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#define ICON_ESTIMATOR_HPP_</span></div> |
| <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  </div> |
| <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <cmath></span></div> |
| <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <cstdint></span></div> |
| <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdexcept></span></div> |
| <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div> |
| <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div> |
| <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div> |
| <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// The ICON estimator for FM85 sketches is defined by the arXiv paper.</span></div> |
| <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div> |
| <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// The current file provides exact and approximate implementations of this estimator.</span></div> |
| <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div> |
| <div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// The exact version works for any value of K, but is quite slow.</span></div> |
| <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div> |
| <div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">// The much faster approximate version works for K values that are powers of two</span></div> |
| <div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">// ranging from 2^4 to 2^32.</span></div> |
| <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div> |
| <div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// At a high-level, this approximation can be described as using an</span></div> |
| <div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// exponential approximation when C > K * (5.6 or 5.7), while smaller</span></div> |
| <div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// values of C are handled by a degree-19 polynomial approximation of</span></div> |
| <div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// a pre-conditioned version of the true ICON mapping from C to N_hat.</span></div> |
| <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div> |
| <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// This file also provides a validation procedure that compares its approximate</span></div> |
| <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// and exact implementations of the FM85 ICON estimator.</span></div> |
| <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div> |
| <div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ICON_MIN_LOG_K = 4;</div> |
| <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ICON_MAX_LOG_K = 26;</div> |
| <div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ICON_POLYNOMIAL_DEGREE = 19;</div> |
| <div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ICON_POLYNOMIAL_NUM_COEFFICIENTS = 1 + ICON_POLYNOMIAL_DEGREE;</div> |
| <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ICON_TABLE_SIZE = ICON_POLYNOMIAL_NUM_COEFFICIENTS * (1 + (ICON_MAX_LOG_K - ICON_MIN_LOG_K));</div> |
| <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div> |
| <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> ICON_POLYNOMIAL_COEFFICIENTS[ICON_TABLE_SIZE] = {</div> |
| <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div> |
| <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// log K = 4</span></div> |
| <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  0.9895027971889700513, 0.3319496644645180128, 0.1242818722715769986, -0.03324149686026930256, -0.2985637298081619817,</div> |
| <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  1.366555923595830002, -4.705499366260569971, 11.61506432505530029, -21.11254986175579873, 28.89421695078809904,</div> |
| <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  -30.1383659011730991, 24.11946778830730054, -14.83391445199539938, 6.983088767267210173, -2.48964120264876998,</div> |
| <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  0.6593243603602499947, -0.125493534558034997, 0.01620971672896159843, -0.001271267679036929953, 4.567178653294529745e-05,</div> |
| <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div> |
| <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// log K = 5</span></div> |
| <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  0.9947713741300230339, 0.3326559581620939787, 0.1250050661634889981, -0.04130073804472530336, -0.2584095537451129854,</div> |
| <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  1.218050389433120051, -4.319106696095399656, 10.87175052045090062, -20.0184979022142997, 27.63210188163320069,</div> |
| <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  -28.97950009664030091, 23.26740804691930009, -14.33375703270860058, 6.751281271241110105, -2.406363094133439962,</div> |
| <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  0.6367414734718820357, -0.1210468076141379967, 0.01561196698118279963, -0.001222335432128580056, 4.383502970318410206e-05,</div> |
| <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div> |
| <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// log K = 6</span></div> |
| <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  0.9973904854982870161, 0.3330148852217920119, 0.125251536589509993, -0.04434075124043219962, -0.2436238890691720116,</div> |
| <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  1.163293254754570016, -4.177758779777369647, 10.60301981340099964, -19.6274507428828997, 27.18420839597660077,</div> |
| <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  -28.56827214174580121, 22.96268674086600114, -14.15234202220280046, 6.665700662642549901, -2.375043356720739851,</div> |
| <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  0.6280993991240929608, -0.119319019358031006, 0.01537674055733759954, -0.001202881695730769916, 4.309894633186929849e-05,</div> |
| <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div> |
| <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// log K = 7</span></div> |
| <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  0.9986963310058679655, 0.3331956705633329907, 0.125337696770523005, -0.04546817338088020299, -0.2386752211125199863,</div> |
| <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  1.145927328111949972, -4.135694445582720036, 10.52805060502839929, -19.52408322548339825, 27.06921653903929936,</div> |
| <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  -28.46207532143190022, 22.88083524357429965, -14.10057147392659971, 6.63958754983273991, -2.364865219283200037,</div> |
| <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  0.6251341806425250169, -0.1186991327450530043, 0.0152892726403408008, -0.001195439764873199896, 4.281098416794090072e-05,</div> |
| <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div> |
| <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">// log K = 8</span></div> |
| <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  0.999348600452531044, 0.3332480372393080148, 0.126666900963325002, -0.06495714694254159371, -0.08376282050638980681,</div> |
| <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  0.3760158094643630267, -1.568204791601850001, 4.483117719555970382, -9.119180124379150598, 13.65799293358900002,</div> |
| <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  -15.3100211234349004, 12.97546344654869976, -8.351661538536939489, 4.075022612435580172, -1.49387015887069996,</div> |
| <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  0.4040976870253379927, -0.07813232681879349328, 0.01020545649538820085, -0.0008063279210812720381, 2.909334976414100078e-05,</div> |
| <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div> |
| <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="comment">// log K = 9</span></div> |
| <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  0.9996743787297059924, 0.3332925779481850093, 0.1267124599259649986, -0.06550452970936600228, -0.08191738117533520214,</div> |
| <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  0.3773034458363569987, -1.604679509609959975, 4.636761898691969641, -9.487348609558699408, 14.25164235443030059,</div> |
| <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  -15.99674955529870068, 13.56353219046370029, -8.730194904342459594, 4.259010067932120336, -1.56106689792022002,</div> |
| <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  0.4222540912786589828, -0.08165296504921559784, 0.01066878484925220041, -0.0008433887618256910015, 3.045339724886519912e-05,</div> |
| <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  </div> |
| <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">// log K = 10</span></div> |
| <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  0.999837191783945034, 0.3333142252339619804, 0.1267759538087240012, -0.06631005632753710077, -0.07692759158286699428,</div> |
| <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  0.3568943956395980166, -1.546598721379510044, 4.51595019978557044, -9.298431968763770428, 14.02586858080080034,</div> |
| <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  -15.78858959520439953, 13.41484931677589998, -8.647958125130809748, 4.22398017468472009, -1.549708891200570093,</div> |
| <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  0.419507410264540026, -0.08117411611046250475, 0.01061202286184199928, -0.000839300527596772007, 3.03185874520205985e-05,</div> |
| <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div> |
| <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// log K = 11</span></div> |
| <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  0.9999186020796150265, 0.3333249054574359826, 0.126791713589799987, -0.06662487271699729652, -0.07335552427910230211,</div> |
| <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  0.3316370184815959909, -1.434143797561290068, 4.180260309967409604, -8.593906870708760692, 12.95088874800289958,</div> |
| <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  -14.56876092520539956, 12.37074367531410068, -7.969152075707960137, 3.888774396648960074, -1.424923326506990051,</div> |
| <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  0.385084561785229984, -0.07435541911616409816, 0.009695363567476529554, -0.0007644375960047160388, 2.75156194717188011e-05,</div> |
| <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div> |
| <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">// log K = 12</span></div> |
| <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  0.9999592955649559967, 0.3333310560725140093, 0.1267379744020450116, -0.06524495415766619344, -0.08854031542298740343,</div> |
| <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  0.4244320628874230228, -1.794077789033230008, 5.133875262768450298, -10.40149374917120007, 15.47808115629240078,</div> |
| <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  -17.2272296137545986, 14.5002173676463002, -9.274819801602760094, 4.500782540026570189, -1.642359389030050076,</div> |
| <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  0.442596113445525019, -0.0853226219238850947, 0.01111969379054169975, -0.0008771614088006969611, 3.161668519459719752e-05,</div> |
| <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div> |
| <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="comment">// log K = 13</span></div> |
| <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  0.9999796468102559732, 0.3333336602394039727, 0.126728089053198989, -0.06503798598282370391, -0.09050261023823169548,</div> |
| <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  0.4350609244189960201, -1.831274835815670077, 5.223387516985289913, -10.55574395269979959, 15.67359470222429962,</div> |
| <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  -17.41263416341029924, 14.63297400889229927, -9.346752431221359458, 4.530124905188380069, -1.651245566462089975,</div> |
| <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  0.444542549250713015, -0.08561720963336499901, 0.01114805146185449992, -0.0008786251203363140043, 3.16416341644572998e-05,</div> |
| <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div> |
| <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// log K = 14</span></div> |
| <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  0.9999898187060970445, 0.3333362579300819806, 0.1266984078369459976, -0.06464561179765909715, -0.09343280886228019777,</div> |
| <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  0.4490702549264070087, -1.878087608052450008, 5.338004322057390283, -10.76690603590630069, 15.97069195083200022,</div> |
| <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  -17.73440379943459888, 14.90212518309260048, -9.520506013770420495, 4.616238931978830173, -1.68364817877918993,</div> |
| <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  0.4536194960681350086, -0.087448605434800597, 0.01139929991331390009, -0.0008995891451622229631, 3.244407259782900338e-05,</div> |
| <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div> |
| <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">// log K = 15</span></div> |
| <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  0.9999949072549390028, 0.3333376334705290267, 0.126665364358402005, -0.06411790034705669439, -0.09776009134670660128,</div> |
| <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  0.4704691112248470253, -1.948021675295769972, 5.497760972696490001, -11.03165645315390009, 16.29703330781000048,</div> |
| <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  -18.03851029448010124, 15.11836776139680083, -9.638205179917429533, 4.665122328753120051, -1.698980686525759953,</div> |
| <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  0.4571799506245269873, -0.08804011353783609828, 0.01146553155965330043, -0.0009040455800659569869, 3.257931866957050274e-05,</div> |
| <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div> |
| <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// log K = 16</span></div> |
| <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  0.9999974544793589493, 0.3333381337614599871, 0.1266524862971120102, -0.06391676499117690535, -0.09929616211306059592,</div> |
| <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  0.4771390820378790254, -1.965762451227349938, 5.526802350376460282, -11.05703067024660058, 16.29535848023060041,</div> |
| <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  -18.00114005075790047, 15.06214012231560062, -9.58874727382628933, 4.63537541652793017, -1.686222848555620102,</div> |
| <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  0.4532602373715179933, -0.08719448925964939923, 0.01134365425717459921, -0.0008934965241274289835, 3.216436244471380105e-05,</div> |
| <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div> |
| <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// log K = 17</span></div> |
| <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  0.9999987278278800185, 0.3333383411464330148, 0.126642761751724009, -0.06371042959073920653, -0.1013564516034080043,</div> |
| <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  0.4891311195679299839, -2.010971712051409899, 5.644390807952309963, -11.27697253921500042, 16.59957157207080058,</div> |
| <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  -18.31808338317799922, 15.31363518393730061, -9.741451446816620674, 4.706207545519429658, -1.711102469010010063,</div> |
| <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  0.4597587341089349744, -0.08841670767182820134, 0.01149999225097850068, -0.0009056651366963050422, 3.259910736274500059e-05,</div> |
| <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div> |
| <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">// log K = 18</span></div> |
| <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  0.9999993637727100371, 0.3333385511608860097, 0.1266341580529160016, -0.06353272828164230335, -0.103139962850642003,</div> |
| <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  0.4996216017206500104, -2.05099128585287982, 5.749874086531799655, -11.47727638570349917, 16.88141587810320132,</div> |
| <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  -18.61744656177490143, 15.55634230427719977, -9.892350736128680211, 4.778033520984200422, -1.737045483861280104,</div> |
| <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  0.4667410882683730167, -0.08977256212421590165, 0.01167940146667079994, -0.0009201381242396030127, 3.313600701586759867e-05,</div> |
| <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  </div> |
| <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// log K = 19</span></div> |
| <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  0.9999996805376010212, 0.3333372324328989778, 0.1267104737214659882, -0.06504749929326139601, -0.0882341962464350954,</div> |
| <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  0.4131871162041140244, -1.725190703567099915, 4.900817515593920426, -9.883452720776510603, 14.6657081190816001,</div> |
| <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  -16.29398295135089825, 13.69805011761319946, -8.753475239465899449, 4.244072374564439976, -1.547202527706629915,</div> |
| <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  0.4164770109614310267, -0.08017596922092029565, 0.01043146101701039954, -0.00082124200571200305, 2.953319493719429935e-05,</div> |
| <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  </div> |
| <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">// log K = 20</span></div> |
| <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  0.9999998390037539986, 0.3333365859956040067, 0.1267460211029839967, -0.06569456024647769843, -0.0823070353477164951,</div> |
| <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  0.3810826463303410017, -1.611983580241109992, 4.624520077758210057, -9.397308335633589138, 14.03184981378050011,</div> |
| <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  -15.6703191315401007, 13.22992718704790072, -8.484216393184780713, 4.125607133488029987, -1.507690650697159906,</div> |
| <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  0.4066678517577320129, -0.07842110121777939868, 0.01021780862225150042, -0.0008054065857047439754, 2.899431830426989844e-05,</div> |
| <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  </div> |
| <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// log K = 21</span></div> |
| <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  0.9999999207001479817, 0.3333384953015239849, 0.1266331480396669928, -0.06345750166298599892, -0.1042341210992499961,</div> |
| <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  0.5077112908497130039, -2.087398133609810191, 5.858842546192500222, -11.70620319777190055, 17.23103975433669888,</div> |
| <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  -19.01462552846669851, 15.89674059836560005, -10.11395134034419918, 4.88760796465891989, -1.777886770904629987,</div> |
| <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  0.4780200178339499839, -0.09200895321782050218, 0.01198029553244219989, -0.0009447283875782100165, 3.405716775824710232e-05,</div> |
| <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  </div> |
| <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// log K = 22</span></div> |
| <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  0.9999999606908690497, 0.3333383929524300071, 0.1266456445096819927, -0.06373504294081690225, -0.1012834291081849969,</div> |
| <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  0.4893810690172959998, -2.01391428223606983, 5.656430437473649597, -11.3067201537791, 16.64980594135310099,</div> |
| <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  -18.3792355790383013, 15.36879753115040081, -9.778831246425049528, 4.725308061988969577, -1.718423596500280093,</div> |
| <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  0.4618308177809870019, -0.08883675060799739454, 0.01155766944804260087, -0.0009104695617243750358, 3.278237729674439666e-05,</div> |
| <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  </div> |
| <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// log K = 23</span></div> |
| <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  0.9999999794683379628, 0.3333386441751680085, 0.1266463995182049995, -0.06376031920455070556, -0.1010799540803130059,</div> |
| <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  0.488540137426137, -2.012048323537570127, 5.654949475342659682, -11.31023240892979942, 16.66334675284959843,</div> |
| <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  -18.40241452866079896, 15.39443572867130072, -9.798844412838670692, 4.736683907539640082, -1.723168363744929987,</div> |
| <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  0.463270349018644001, -0.08914619066708899531, 0.01160235936257320022, -0.0009143600818183229709, 3.293669304679140117e-05,</div> |
| <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  </div> |
| <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">// log K = 24</span></div> |
| <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  0.9999999911469820146, 0.3333376076934529975, 0.1266944349940530012, -0.06470524278387919381, -0.09189342220283110152,</div> |
| <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  0.4359182372694809793, -1.815980282951169977, 5.149474056470340066, -10.37086570678100017, 15.36962686758569951,</div> |
| <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  -17.05756384717849983, 14.32755177515199918, -9.149944050025640152, 4.434601894497260055, -1.616478926806520056,</div> |
| <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  0.4351979157055039793, -0.08381768225272340223, 0.01091321820476520016, -0.0008600264403629039739, 3.09667800347144002e-05,</div> |
| <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div> |
| <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="comment">// log K = 25</span></div> |
| <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  0.9999999968592140354, 0.3333379164881000167, 0.1266782495827009913, -0.06434163088961859789, -0.09575258124988890451,</div> |
| <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  0.4597843575354370049, -1.911374431241559924, 5.411856661251520428, -10.88850084646090011, 16.12298941380269923,</div> |
| <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  -17.88172178487259956, 15.01301780636859995, -9.585542896142529301, 4.645811872761620442, -1.693952293156189892,</div> |
| <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  0.4563143308861309921, -0.08795976148455289523, 0.01146560428011200033, -0.0009048442931930629528, 3.26358391497329992e-05,</div> |
| <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div> |
| <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// log K = 26</span></div> |
| <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  0.9999999970700530483, 0.333338329556315982, 0.126644753076394001, -0.06372365346512399997, -0.1012760856945769949,</div> |
| <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  0.4886852278576360176, -2.009005418394389952, 5.638119224137019714, -11.26276715335160006, 16.57640024218650154,</div> |
| <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  -18.29035093605569884, 15.28892246224570073, -9.724916375991760731, 4.6978877652334603, -1.707974125916829955,</div> |
| <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  0.4588937864564729963, -0.08824617586088029375, 0.01147732114826570046, -0.00090384524860747295, 3.253252703695579795e-05,</div> |
| <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div> |
| <div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor">#ifdef LARGER_K_VALUES</span></div> |
| <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="comment">// log K = 27</span></div> |
| <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  1.000000000639100106, 0.3333378987508219815, 0.126670943746902992, -0.06418811974745139426, -0.0972951198506895043,</div> |
| <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  0.4687977077401049852, -1.945290489888900076, 5.499494964974400268, -11.05078190574979935, 16.3446428009706004,</div> |
| <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  -18.10936908931320133, 15.19089294103859977, -9.691829972777059155, 4.694320543263319934, -1.710719212277360013,</div> |
| <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  0.4606257962161550146, -0.08875858006645380438, 0.01156634964444109952, -0.0009125838337464230437, 3.290907977404550287e-05,</div> |
| <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div> |
| <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">// log K = 28</span></div> |
| <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  0.9999999993590269476, 0.3333385660745579737, 0.1266394134278630013, -0.0636305053404186971, -0.1022354305220320031,</div> |
| <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  0.4945787360853979853, -2.032468917547570086, 5.702461924065530319, -11.38943406618639997, 16.76052144140630062,</div> |
| <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  -18.49169753114890113, 15.4564578116809006, -9.831507534599410292, 4.749667961030789698, -1.72701519749717991,</div> |
| <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  0.4640997252013580043, -0.08927103511252110213, 0.01161455495023329919, -0.000915030036039231982, 3.295110296010450275e-05,</div> |
| <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  </div> |
| <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// log K = 29</span></div> |
| <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  0.9999999998441060356, 0.3333383341194189886, 0.1266687338487519909, -0.06416245828383730643, -0.09764561286937140094,</div> |
| <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  0.4715274747139350242, -1.958172229464169911, 5.539587632966780362, -11.13784217611559946, 16.48149277721759987,</div> |
| <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  -18.26888916646990069, 15.33085193018819936, -9.78493991484172021, 4.741302923579859829, -1.728568959451310061,</div> |
| <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  0.4656457646521020011, -0.08977142058582450457, 0.01170492245846839995, -0.0009240931538567209464, 3.334703207098030245e-05,</div> |
| <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div> |
| <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="comment">// log K = 30</span></div> |
| <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  0.9999999992599339915, 0.3333384538468979752, 0.1266452025739940035, -0.06374775920488300052, -0.1009917742909720029,</div> |
| <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  0.4867931642504759737, -2.000981224888669807, 5.614968747087539569, -11.21527907219130071, 16.50500949673639894,</div> |
| <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  -18.21007853829650003, 15.22056128176249956, -9.680565515478869898, 4.675983737170599674, -1.69980511941418011,</div> |
| <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  0.4566332138743600111, -0.08779650251621799739, 0.01141656381272189956, -0.0008988545845624889468, 3.234448025291899689e-05,</div> |
| <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  </div> |
| <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="comment">// log K = 31</span></div> |
| <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  0.9999999973204000137, 0.333337762450663988, 0.1266965469104399944, -0.06475154253624139378, -0.09133098208494490333,</div> |
| <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  0.4320356889637699815, -1.799236887220760028, 5.100971076171499696, -10.27175516606700079, 15.22198757843720074,</div> |
| <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  -16.89368636262300072, 14.19016571851859965, -9.062390133299189188, 4.39220025249522994, -1.600994848692480099,</div> |
| <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  0.4310075283759189912, -0.08300339267288289746, 0.01080584419810979961, -0.0008514267355136160122, 3.065110087496039805e-05,</div> |
| <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  </div> |
| <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// log K = 32</span></div> |
| <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  0.9999999987706390536, 0.3333387038350890119, 0.1266354589419070031, -0.06355195838981600454, -0.102952771506954005,</div> |
| <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  0.4983589546197609854, -2.045281215270029929, 5.732181222451769642, -11.43849817800069957, 16.81961198331340057,</div> |
| <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  -18.54433120118400069, 15.49126422718470053, -9.84846998787154071, 4.755615082534379923, -1.728430514092559989,</div> |
| <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  0.4642927653670489985, -0.08927380119154580684, 0.01161055316485629964, -0.0009143724787632470305, 3.291492066818770055e-05,</div> |
| <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  </div> |
| <div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor">#endif</span></div> |
| <div class="line"><a name="l00232"></a><span class="lineno"> 232</span> };</div> |
| <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  </div> |
| <div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> evaluate_polynomial(<span class="keyword">const</span> <span class="keywordtype">double</span>* coefficients, <span class="keywordtype">int</span> start, <span class="keywordtype">int</span> num, <span class="keywordtype">double</span> x) {</div> |
| <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> <span class="keyword">final</span> = start + num - 1;</div> |
| <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordtype">double</span> total = coefficients[<span class="keyword">final</span>];</div> |
| <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = <span class="keyword">final</span> - 1; j >= start; j--) {</div> |
| <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  total *= x;</div> |
| <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  total += coefficients[j];</div> |
| <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div> |
| <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> total;</div> |
| <div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div> |
| <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  </div> |
| <div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> icon_exponential_approximation(<span class="keywordtype">double</span> k, <span class="keywordtype">double</span> c) {</div> |
| <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> (0.7940236163830469 * k * pow(2.0, c / k));</div> |
| <div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div> |
| <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  </div> |
| <div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> compute_icon_estimate(uint8_t lg_k, uint32_t c) {</div> |
| <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (lg_k < ICON_MIN_LOG_K || lg_k > ICON_MAX_LOG_K) <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">"lg_k out of range"</span>);</div> |
| <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">if</span> (c < 2) <span class="keywordflow">return</span> ((c == 0) ? 0.0 : 1.0);</div> |
| <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">const</span> uint32_t k = 1 << lg_k;</div> |
| <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> double_k = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(k);</div> |
| <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> double_c = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(c);</div> |
| <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// Differing thresholds ensure that the approximated estimator is monotonically increasing.</span></div> |
| <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> threshold_factor = ((lg_k < 14) ? 5.7 : 5.6);</div> |
| <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (double_c > (threshold_factor * double_k)) <span class="keywordflow">return</span> icon_exponential_approximation(double_k, double_c);</div> |
| <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> factor = evaluate_polynomial(</div> |
| <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  ICON_POLYNOMIAL_COEFFICIENTS,</div> |
| <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  ICON_POLYNOMIAL_NUM_COEFFICIENTS * (lg_k - ICON_MIN_LOG_K),</div> |
| <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  ICON_POLYNOMIAL_NUM_COEFFICIENTS,</div> |
| <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">// The somewhat arbitrary constant 2.0 is baked into the table ICON_POLYNOMIAL_COEFFICIENTS</span></div> |
| <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  double_c / (2.0 * double_k)</div> |
| <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  );</div> |
| <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> ratio = double_c / double_k;</div> |
| <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">// The somewhat arbitrary constant 66.774757 is baked into the table ICON_POLYNOMIAL_COEFFICIENTS</span></div> |
| <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> term = 1.0 + (ratio * ratio * ratio / 66.774757);</div> |
| <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> result = double_c * factor * term;</div> |
| <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (result >= double_c) <span class="keywordflow">return</span> result;</div> |
| <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">else</span> <span class="keywordflow">return</span> double_c;</div> |
| <div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div> |
| <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div> |
| <div class="line"><a name="l00272"></a><span class="lineno"> 272</span> } <span class="comment">/* namespace datasketches */</span></div> |
| <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  </div> |
| <div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor">#endif</span></div> |
| <div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div> |
| </div><!-- fragment --></div><!-- contents --> |
| <!-- start footer part --> |
| <hr class="footer"/><address class="footer"><small> |
| Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 |
| </small></address> |
| </body> |
| </html> |