1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>User's Guide</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../accumulators.html" title="Chapter 1. Boost.Accumulators"> 10<link rel="prev" href="../accumulators.html" title="Chapter 1. Boost.Accumulators"> 11<link rel="next" href="acknowledgements.html" title="Acknowledgements"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="../accumulators.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../accumulators.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="accumulators.user_s_guide"></a><a class="link" href="user_s_guide.html" title="User's Guide">User's Guide</a> 29</h2></div></div></div> 30<div class="toc"><dl class="toc"> 31<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework">The 32 Accumulators Framework</a></span></dt> 33<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library">The 34 Statistical Accumulators Library</a></span></dt> 35</dl></div> 36<p> 37 This section describes how to use the Boost.Accumulators framework to create 38 new accumulators and how to use the existing statistical accumulators to perform 39 incremental statistical computation. For detailed information regarding specific 40 components in Boost.Accumulators, check the <a class="link" href="reference.html#accumulators_framework_reference" title="Accumulators Framework Reference">Reference</a> 41 section. 42 </p> 43<h3> 44<a name="accumulators.user_s_guide.h0"></a> 45 <span class="phrase"><a name="accumulators.user_s_guide.hello__world_"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.hello__world_">Hello, 46 World!</a> 47 </h3> 48<p> 49 Below is a complete example of how to use the Accumulators Framework and the 50 Statistical Accumulators to perform an incremental statistical calculation. 51 It calculates the mean and 2nd moment of a sequence of doubles. 52 </p> 53<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> 54<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 55<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">statistics</span><span class="special">/</span><span class="identifier">stats</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 56<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">statistics</span><span class="special">/</span><span class="identifier">mean</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 57<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">statistics</span><span class="special">/</span><span class="identifier">moment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 58<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulators</span><span class="special">;</span> 59 60<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 61<span class="special">{</span> 62 <span class="comment">// Define an accumulator set for calculating the mean and the</span> 63 <span class="comment">// 2nd moment ...</span> 64 <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 65 66 <span class="comment">// push in some data ...</span> 67 <span class="identifier">acc</span><span class="special">(</span><span class="number">1.2</span><span class="special">);</span> 68 <span class="identifier">acc</span><span class="special">(</span><span class="number">2.3</span><span class="special">);</span> 69 <span class="identifier">acc</span><span class="special">(</span><span class="number">3.4</span><span class="special">);</span> 70 <span class="identifier">acc</span><span class="special">(</span><span class="number">4.5</span><span class="special">);</span> 71 72 <span class="comment">// Display the results ...</span> 73 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Mean: "</span> <span class="special"><<</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 74 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Moment: "</span> <span class="special"><<</span> <span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 75 76 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> 77<span class="special">}</span> 78</pre> 79<p> 80 This program displays the following: 81 </p> 82<pre class="programlisting">Mean: 2.85 83Moment: 9.635 84</pre> 85<div class="section"> 86<div class="titlepage"><div><div><h3 class="title"> 87<a name="accumulators.user_s_guide.the_accumulators_framework"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework" title="The Accumulators Framework">The 88 Accumulators Framework</a> 89</h3></div></div></div> 90<div class="toc"><dl class="toc"> 91<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.using___accumulator_set___">Using 92 <code class="literal">accumulator_set<></code></a></span></dt> 93<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extracting_results">Extracting 94 Results</a></span></dt> 95<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.passing_optional_parameters">Passing 96 Optional Parameters</a></span></dt> 97<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.weighted_samples">Weighted 98 Samples</a></span></dt> 99<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.numeric_operators_sub_library">Numeric 100 Operators Sub-Library</a></span></dt> 101<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework">Extending 102 the Accumulators Framework</a></span></dt> 103<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts">Concepts</a></span></dt> 104</dl></div> 105<p> 106 The Accumulators Framework is framework for performing incremental calculations. 107 Usage of the framework follows the following pattern: 108 </p> 109<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 110<li class="listitem"> 111 Users build a computational object, called an <span class="emphasis"><em><code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code></em></span>, 112 by selecting the computations in which they are interested, or authoring 113 their own computational primitives which fit within the framework. 114 </li> 115<li class="listitem"> 116 Users push data into the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 117 object one sample at a time. 118 </li> 119<li class="listitem"> 120 The <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 121 computes the requested quantities in the most efficient method possible, 122 resolving dependencies between requested calculations, possibly caching 123 intermediate results. 124 </li> 125</ul></div> 126<p> 127 The Accumulators Framework defines the utilities needed for defining primitive 128 computational elements, called <span class="emphasis"><em>accumulators</em></span>. It also 129 provides the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 130 type, described above. 131 </p> 132<h3> 133<a name="accumulators.user_s_guide.the_accumulators_framework.h0"></a> 134 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.terminology"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.terminology">Terminology</a> 135 </h3> 136<p> 137 The following terms are used in the rest of the documentation. 138 </p> 139<div class="variablelist"> 140<p class="title"><b></b></p> 141<dl class="variablelist"> 142<dt><span class="term">Sample</span></dt> 143<dd><p> 144 <a name="sample_type"></a>A datum that is pushed into an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. The type of the 145 sample is the <span class="emphasis"><em>sample type</em></span>. 146 </p></dd> 147<dt><span class="term">Weight</span></dt> 148<dd><p> 149 <a name="weight_type"></a>An optional scalar value passed along with 150 the sample specifying the weight of the sample. Conceptually, each 151 sample is multiplied with its weight. The type of the weight is the 152 <span class="emphasis"><em>weight type</em></span>. 153 </p></dd> 154<dt><span class="term">Feature</span></dt> 155<dd><p> 156 An abstract primitive computational entity. When defining an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>, users specify 157 the features in which they are interested, and the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 158 figures out which <span class="emphasis"><em>accumulators</em></span> would best provide 159 those features. Features may depend on other features. If they do, 160 the accumulator set figures out which accumulators to add to satisfy 161 the dependencies. 162 </p></dd> 163<dt><span class="term">Accumulator</span></dt> 164<dd><p> 165 A concrete primitive computational entity. An accumulator is a concrete 166 implementation of a feature. It satisfies exactly one abstract feature. 167 Several different accumulators may provide the same feature, but may 168 represent different implementation strategies. 169 </p></dd> 170<dt><span class="term">Accumulator Set</span></dt> 171<dd><p> 172 A collection of accumulators. An accumulator set is specified with 173 a sample type and a list of features. The accumulator set uses this 174 information to generate an ordered set of accumulators depending on 175 the feature dependency graph. An accumulator set accepts samples one 176 datum at a time, propagating them to each accumulator in order. At 177 any point, results can be extracted from the accumulator set. 178 </p></dd> 179<dt><span class="term">Extractor</span></dt> 180<dd><p> 181 A function or function object that can be used to extract a result 182 from an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 183 </p></dd> 184</dl> 185</div> 186<h3> 187<a name="accumulators.user_s_guide.the_accumulators_framework.h1"></a> 188 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.overview"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.overview">Overview</a> 189 </h3> 190<p> 191 Here is a list of the important types and functions in the Accumulator Framework 192 and a brief description of each. 193 </p> 194<div class="table"> 195<a name="accumulators.user_s_guide.the_accumulators_framework.t0"></a><p class="title"><b>Table 1.1. Accumulators Toolbox</b></p> 196<div class="table-contents"><table class="table" summary="Accumulators Toolbox"> 197<colgroup> 198<col> 199<col> 200</colgroup> 201<thead><tr> 202<th> 203 <p> 204 Tool 205 </p> 206 </th> 207<th> 208 <p> 209 Description 210 </p> 211 </th> 212</tr></thead> 213<tbody> 214<tr> 215<td> 216 <p> 217 <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 218 </p> 219 </td> 220<td> 221 <p> 222 This is the most important type in the Accumulators Framework. 223 It is a collection of accumulators. A datum pushed into an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> is forwarded 224 to each accumulator, in an order determined by the dependency relationships 225 between the accumulators. Computational results can be extracted 226 from an accumulator at any time. 227 </p> 228 </td> 229</tr> 230<tr> 231<td> 232 <p> 233 <code class="computeroutput"><a class="link" href="../boost/accumulators/depends_on.html" title="Struct template depends_on">depends_on<></a></code> 234 </p> 235 </td> 236<td> 237 <p> 238 Used to specify which other features a feature depends on. 239 </p> 240 </td> 241</tr> 242<tr> 243<td> 244 <p> 245 <code class="computeroutput"><a class="link" href="../boost/accumulators/feature_of.html" title="Struct template feature_of">feature_of<></a></code> 246 </p> 247 </td> 248<td> 249 <p> 250 Trait used to tell the Accumulators Framework that, for the purpose 251 of feature-based dependency resolution, one feature should be treated 252 the same as another. 253 </p> 254 </td> 255</tr> 256<tr> 257<td> 258 <p> 259 <code class="computeroutput"><a class="link" href="../boost/accumulators/as_feature.html" title="Struct template as_feature">as_feature<></a></code> 260 </p> 261 </td> 262<td> 263 <p> 264 Used to create an alias for a feature. For example, if there are 265 two features, fast_X and accurate_X, they can be mapped to X(fast) 266 and X(accurate) with <code class="computeroutput"><a class="link" href="../boost/accumulators/as_feature.html" title="Struct template as_feature">as_feature<></a></code>. 267 This is just syntactic sugar. 268 </p> 269 </td> 270</tr> 271<tr> 272<td> 273 <p> 274 <code class="computeroutput"><a class="link" href="../boost/accumulators/features.html" title="Struct template features">features<></a></code> 275 </p> 276 </td> 277<td> 278 <p> 279 An <a href="../../../libs/mpl/index.html" target="_top">MPL</a> sequence. 280 We can use <code class="computeroutput"><a class="link" href="../boost/accumulators/features.html" title="Struct template features">features<></a></code> 281 as the second template parameter when declaring an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 282 </p> 283 </td> 284</tr> 285<tr> 286<td> 287 <p> 288 <code class="computeroutput">external<></code> 289 </p> 290 </td> 291<td> 292 <p> 293 Used when declaring an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 294 If the weight type is specified with <code class="computeroutput">external<></code>, 295 then the weight accumulators are assumed to reside in a separate 296 accumulator set which will be passed in with a named parameter. 297 </p> 298 </td> 299</tr> 300<tr> 301<td> 302 <p> 303 <code class="computeroutput">extractor<></code> 304 </p> 305 </td> 306<td> 307 <p> 308 A class template useful for creating an extractor function object. 309 It is parameterized on a feature, and it has member functions for 310 extracting from an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 311 the result corresponding to that feature. 312 </p> 313 </td> 314</tr> 315</tbody> 316</table></div> 317</div> 318<br class="table-break"><div class="section"> 319<div class="titlepage"><div><div><h4 class="title"> 320<a name="accumulators.user_s_guide.the_accumulators_framework.using___accumulator_set___"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.using___accumulator_set___" title="Using accumulator_set<>">Using 321 <code class="literal">accumulator_set<></code></a> 322</h4></div></div></div> 323<p> 324 Our tour of the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 325 class template begins with the forward declaration: 326 </p> 327<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">Sample</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Features</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Weight</span> <span class="special">=</span> <span class="keyword">void</span> <span class="special">></span> 328<span class="keyword">struct</span> <span class="identifier">accumulator_set</span><span class="special">;</span> 329</pre> 330<p> 331 The template parameters have the following meaning: 332 </p> 333<div class="variablelist"> 334<p class="title"><b></b></p> 335<dl class="variablelist"> 336<dt><span class="term"><code class="computeroutput"><span class="identifier">Sample</span></code></span></dt> 337<dd><p> 338 The type of the data that will be accumulated. 339 </p></dd> 340<dt><span class="term"><code class="computeroutput"><span class="identifier">Features</span></code></span></dt> 341<dd><p> 342 An <a href="../../../libs/mpl/index.html" target="_top">MPL</a> sequence of 343 features to be calculated. 344 </p></dd> 345<dt><span class="term"><code class="computeroutput"><span class="identifier">Weight</span></code></span></dt> 346<dd><p> 347 The type of the (optional) weight paramter. 348 </p></dd> 349</dl> 350</div> 351<p> 352 For example, the following line declares an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 353 that will accept a sequence of doubles one at a time and calculate the 354 min and mean: 355 </p> 356<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 357</pre> 358<p> 359 Notice that we use the <code class="computeroutput"><a class="link" href="../boost/accumulators/features.html" title="Struct template features">features<></a></code> 360 template to specify a list of features to be calculated. <code class="computeroutput"><a class="link" href="../boost/accumulators/features.html" title="Struct template features">features<></a></code> 361 is an MPL sequence of features. 362 </p> 363<div class="note"><table border="0" summary="Note"> 364<tr> 365<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> 366<th align="left">Note</th> 367</tr> 368<tr><td align="left" valign="top"><p> 369 <code class="computeroutput"><a class="link" href="../boost/accumulators/features.html" title="Struct template features">features<></a></code> is a synonym of 370 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code>. 371 In fact, we could use <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code> or any MPL sequence if we prefer, 372 and the meaning would be the same. 373 </p></td></tr> 374</table></div> 375<p> 376 Once we have defined an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>, 377 we can then push data into it, and it will calculate the quantities you 378 requested, as shown below. 379 </p> 380<pre class="programlisting"><span class="comment">// push some data into the accumulator_set ...</span> 381<span class="identifier">acc</span><span class="special">(</span><span class="number">1.2</span><span class="special">);</span> 382<span class="identifier">acc</span><span class="special">(</span><span class="number">2.3</span><span class="special">);</span> 383<span class="identifier">acc</span><span class="special">(</span><span class="number">3.4</span><span class="special">);</span> 384</pre> 385<p> 386 Since <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 387 defines its accumulate function to be the function call operator, we might 388 be tempted to use an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 389 as a UnaryFunction to a standard algorithm such as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code>. 390 That's fine as long as we keep in mind that the standard algorithms take 391 UnaryFunction objects by value, which involves making a copy of the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> object. Consider the 392 following: 393 </p> 394<pre class="programlisting"><span class="comment">// The data for which we wish to calculate statistical properties:</span> 395<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">data</span><span class="special">(</span> <span class="comment">/* stuff */</span> <span class="special">);</span> 396 397<span class="comment">// The accumulator set which will calculate the properties for us: </span> 398<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 399 400<span class="comment">// Use std::for_each to accumulate the statistical properties:</span> 401<span class="identifier">acc</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span> <span class="identifier">data</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">data</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">acc</span> <span class="special">);</span> 402</pre> 403<p> 404 Notice how we must assign the return value of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code> 405 back to the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 406 This works, but some accumulators are not cheap to copy. For example, the 407 <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> 408 and <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 409 accumulators must store a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code>, so copying these accumulators 410 involves a dynamic allocation. We might be better off in this case passing 411 the accumulator by reference, with the help of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">()</span></code>. See below: 412 </p> 413<pre class="programlisting"><span class="comment">// The data for which we wish to calculate statistical properties:</span> 414<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">data</span><span class="special">(</span> <span class="comment">/* stuff */</span> <span class="special">);</span> 415 416<span class="comment">// The accumulator set which will calculate the properties for us:</span> 417<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span> 418 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">4</span> <span class="special">);</span> 419 420<span class="comment">// Use std::for_each to accumulate the statistical properties:</span> 421<span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span> <span class="identifier">data</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">data</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">bind</span><span class="special"><</span><span class="keyword">void</span><span class="special">>(</span> <span class="identifier">ref</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="identifier">_1</span> <span class="special">)</span> <span class="special">);</span> 422</pre> 423<p> 424 Notice now that we don't care about the return value of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">()</span></code> anymore because <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">()</span></code> is modifying <code class="computeroutput"><span class="identifier">acc</span></code> 425 directly. 426 </p> 427<div class="note"><table border="0" summary="Note"> 428<tr> 429<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> 430<th align="left">Note</th> 431</tr> 432<tr><td align="left" valign="top"><p> 433 To use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">()</span></code> 434 and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">()</span></code>, 435 you must <code class="computeroutput"><span class="preprocessor">#include</span></code> 436 <code class="literal"><boost/bind.hpp></code> and <code class="literal"><boost/ref.hpp></code> 437 </p></td></tr> 438</table></div> 439</div> 440<div class="section"> 441<div class="titlepage"><div><div><h4 class="title"> 442<a name="accumulators.user_s_guide.the_accumulators_framework.extracting_results"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extracting_results" title="Extracting Results">Extracting 443 Results</a> 444</h4></div></div></div> 445<p> 446 Once we have declared an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 447 and pushed data into it, we need to be able to extract results from it. 448 For each feature we can add to an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>, 449 there is a corresponding extractor for fetching its result. Usually, the 450 extractor has the same name as the feature, but in a different namespace. 451 For example, if we accumulate the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span></code> 452 and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">max</span></code> features, we can extract the results 453 with the <code class="computeroutput"><span class="identifier">min</span></code> and <code class="computeroutput"><span class="identifier">max</span></code> extractors, as follows: 454 </p> 455<pre class="programlisting"><span class="comment">// Calculate the minimum and maximum for a sequence of integers.</span> 456<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">max</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 457<span class="identifier">acc</span><span class="special">(</span> <span class="number">2</span> <span class="special">);</span> 458<span class="identifier">acc</span><span class="special">(</span> <span class="special">-</span><span class="number">1</span> <span class="special">);</span> 459<span class="identifier">acc</span><span class="special">(</span> <span class="number">1</span> <span class="special">);</span> 460 461<span class="comment">// This displays "(-1, 2)"</span> 462<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="char">'('</span> <span class="special"><<</span> <span class="identifier">min</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">)</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">max</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">)</span> <span class="special"><<</span> <span class="string">")\n"</span><span class="special">;</span> 463</pre> 464<p> 465 The extractors are all declared in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">extract</span></code> 466 namespace, but they are brought into the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulators</span></code> 467 namespace with a <code class="computeroutput"><span class="keyword">using</span></code> declaration. 468 </p> 469<div class="tip"><table border="0" summary="Tip"> 470<tr> 471<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../doc/src/images/tip.png"></td> 472<th align="left">Tip</th> 473</tr> 474<tr><td align="left" valign="top"><p> 475 On the Windows platform, <code class="computeroutput"><span class="identifier">min</span></code> 476 and <code class="computeroutput"><span class="identifier">max</span></code> are preprocessor 477 macros defined in <code class="literal">WinDef.h</code>. To use the <code class="computeroutput"><span class="identifier">min</span></code> and <code class="computeroutput"><span class="identifier">max</span></code> 478 extractors, you should either compile with <code class="computeroutput"><span class="identifier">NOMINMAX</span></code> 479 defined, or you should invoke the extractors like: <code class="computeroutput"><span class="special">(</span><span class="identifier">min</span><span class="special">)(</span> <span class="identifier">acc</span> <span class="special">)</span></code> 480 and <code class="computeroutput"><span class="special">(</span><span class="identifier">max</span><span class="special">)(</span> <span class="identifier">acc</span> <span class="special">)</span></code>. The parentheses keep the macro from 481 being invoked. 482 </p></td></tr> 483</table></div> 484<p> 485 Another way to extract a result from an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 486 is with the <code class="computeroutput"><span class="identifier">extract_result</span><span class="special">()</span></code> function. This can be more convenient 487 if there isn't an extractor object handy for a certain feature. The line 488 above which displays results could equally be written as: 489 </p> 490<pre class="programlisting"><span class="comment">// This displays "(-1, 2)"</span> 491<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="char">'('</span> <span class="special"><<</span> <span class="identifier">extract_result</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span> <span class="special">>(</span> <span class="identifier">acc</span> <span class="special">)</span> 492 <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">extract_result</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">max</span> <span class="special">>(</span> <span class="identifier">acc</span> <span class="special">)</span> <span class="special"><<</span> <span class="string">")\n"</span><span class="special">;</span> 493</pre> 494<p> 495 Finally, we can define our own extractor using the <code class="computeroutput">extractor<></code> 496 class template. For instance, another way to avoid the <code class="computeroutput"><span class="identifier">min</span></code> 497 / <code class="computeroutput"><span class="identifier">max</span></code> macro business would 498 be to define extractors with names that don't conflict with the macros, 499 like this: 500 </p> 501<pre class="programlisting"><span class="identifier">extractor</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span> <span class="special">></span> <span class="identifier">min_</span><span class="special">;</span> 502<span class="identifier">extractor</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span> <span class="special">></span> <span class="identifier">max_</span><span class="special">;</span> 503 504<span class="comment">// This displays "(-1, 2)"</span> 505<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="char">'('</span> <span class="special"><<</span> <span class="identifier">min_</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">)</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">max_</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">)</span> <span class="special"><<</span> <span class="string">")\n"</span><span class="special">;</span> 506</pre> 507</div> 508<div class="section"> 509<div class="titlepage"><div><div><h4 class="title"> 510<a name="accumulators.user_s_guide.the_accumulators_framework.passing_optional_parameters"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.passing_optional_parameters" title="Passing Optional Parameters">Passing 511 Optional Parameters</a> 512</h4></div></div></div> 513<p> 514 Some accumulators need initialization parameters. In addition, perhaps 515 some auxiliary information needs to be passed into the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 516 along with each sample. Boost.Accumulators handles these cases with named 517 parameters from the <a href="../../../libs/parameter/index.html" target="_top">Boost.Parameter</a> 518 library. 519 </p> 520<p> 521 For example, consider the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> and <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 522 features. <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> keeps an ordered list 523 of the largest <code class="literal"><span class="emphasis"><em>N</em></span></code> samples, where 524 <code class="literal"><span class="emphasis"><em>N</em></span></code> can be specified at construction 525 time. Also, the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 526 feature, which depends on <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code>, keeps track of some 527 data that is covariate with the <code class="literal"><span class="emphasis"><em>N</em></span></code> 528 samples tracked by <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code>. The code below shows 529 how this all works, and is described in more detail below. 530 </p> 531<pre class="programlisting"><span class="comment">// Define a feature for tracking covariate data</span> 532<span class="keyword">typedef</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">,</span> <span class="identifier">left</span> <span class="special">></span> <span class="identifier">my_tail_variate_tag</span><span class="special">;</span> 533 534<span class="comment">// This will calculate the left tail and my_tail_variate_tag for N == 2</span> 535<span class="comment">// using the tag::tail<left>::cache_size named parameter</span> 536<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">my_tail_variate_tag</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span> 537 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">2</span> <span class="special">);</span> 538 539<span class="comment">// push in some samples and some covariates by using </span> 540<span class="comment">// the covariate1 named parameter</span> 541<span class="identifier">acc</span><span class="special">(</span> <span class="number">1.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">12</span> <span class="special">);</span> 542<span class="identifier">acc</span><span class="special">(</span> <span class="number">2.3</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="special">-</span><span class="number">23</span> <span class="special">);</span> 543<span class="identifier">acc</span><span class="special">(</span> <span class="number">3.4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">34</span> <span class="special">);</span> 544<span class="identifier">acc</span><span class="special">(</span> <span class="number">4.5</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="special">-</span><span class="number">45</span> <span class="special">);</span> 545 546<span class="comment">// Define an extractor for the my_tail_variate_tag feature</span> 547<span class="identifier">extractor</span><span class="special"><</span> <span class="identifier">my_tail_variate_tag</span> <span class="special">></span> <span class="identifier">my_tail_variate</span><span class="special">;</span> 548 549<span class="comment">// Write the tail statistic to std::cout. This will print "4.5, 3.4, "</span> 550<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">dout</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">", "</span> <span class="special">);</span> 551<span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span> <span class="identifier">tail</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">tail</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">dout</span> <span class="special">);</span> 552 553<span class="comment">// Write the tail_variate statistic to std::cout. This will print "-45, 34, "</span> 554<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream_iterator</span><span class="special"><</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">iout</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">,</span> <span class="string">", "</span> <span class="special">);</span> 555<span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span> <span class="identifier">my_tail_variate</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">my_tail_variate</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">iout</span> <span class="special">);</span> 556</pre> 557<p> 558 There are several things to note about the code above. First, notice that 559 we didn't have to request that the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> feature be calculated. 560 That is implicit because the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 561 feature depends on the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> feature. Next, notice 562 how the <code class="computeroutput"><span class="identifier">acc</span></code> object is initialized: 563 <code class="computeroutput"><span class="identifier">acc</span><span class="special">(</span> 564 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> 565 <span class="number">2</span> <span class="special">)</span></code>. 566 Here, <code class="computeroutput"><span class="identifier">cache_size</span></code> is a named 567 parameter. It is used to tell the <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> and <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 568 accumulators how many samples and covariates to store. Conceptually, every 569 construction parameter is made available to every accumulator in an accumulator 570 set. 571 </p> 572<p> 573 We also use a named parameter to pass covariate data into the accumulator 574 set along with the samples. As with the constructor parameters, all parameters 575 to the accumulate function are made available to all the accumulators in 576 the set. In this case, only the accumulator for the <code class="computeroutput"><span class="identifier">my_tail_variate</span></code> 577 feature would be interested in the value of the <code class="computeroutput"><span class="identifier">covariate1</span></code> 578 named parameter. 579 </p> 580<p> 581 We can make one final observation about the example above. Since <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail.html" title="Struct template tail">tail</a></code> 582 and <code class="computeroutput"><a class="link" href="../boost/accumulators/tag/tail_variate.html" title="Struct template tail_variate">tail_variate<></a></code> 583 are multi-valued features, the result we extract for them is represented 584 as an iterator range. That is why we can say <code class="computeroutput"><span class="identifier">tail</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">begin</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">tail</span><span class="special">(</span> <span class="identifier">acc</span> <span class="special">).</span><span class="identifier">end</span><span class="special">()</span></code>. 585 </p> 586<p> 587 Even the extractors can accept named parameters. In a bit, we'll see a 588 situation where that is useful. 589 </p> 590</div> 591<div class="section"> 592<div class="titlepage"><div><div><h4 class="title"> 593<a name="accumulators.user_s_guide.the_accumulators_framework.weighted_samples"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.weighted_samples" title="Weighted Samples">Weighted 594 Samples</a> 595</h4></div></div></div> 596<p> 597 Some accumulators, statistical accumulators in particular, deal with data 598 that are <span class="emphasis"><em>weighted</em></span>. Each sample pushed into the accumulator 599 has an associated weight, by which the sample is conceptually multiplied. 600 The Statistical Accumulators Library provides an assortment of these weighted 601 statistical accumulators. And many unweighted statistical accumulators 602 have weighted variants. For instance, the weighted variant of the <code class="computeroutput"><span class="identifier">sum</span></code> accumulator is called <code class="computeroutput"><span class="identifier">weighted_sum</span></code>, and is calculated by accumulating 603 all the samples multiplied by their weights. 604 </p> 605<p> 606 To declare an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 607 that accepts weighted samples, you must specify the type of the weight 608 parameter as the 3rd template parameter, as follows: 609 </p> 610<pre class="programlisting"><span class="comment">// 3rd template parameter 'int' means this is a weighted</span> 611<span class="comment">// accumulator set where the weights have type 'int'</span> 612<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span> <span class="special">>,</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 613</pre> 614<p> 615 When you specify a weight, all the accumulators in the set are replaced 616 with their weighted equivalents. For example, the above <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 617 declaration is equivalent to the following: 618 </p> 619<pre class="programlisting"><span class="comment">// Since we specified a weight, tag::sum becomes tag::weighted_sum</span> 620<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum</span> <span class="special">>,</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 621</pre> 622<p> 623 When passing samples to the accumulator set, you must also specify the 624 weight of each sample. You can do that with the <code class="computeroutput"><span class="identifier">weight</span></code> 625 named parameter, as follows: 626 </p> 627<pre class="programlisting"><span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> <span class="comment">// 1 * 2</span> 628<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> <span class="comment">// 2 * 4</span> 629<span class="identifier">acc</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">6</span><span class="special">);</span> <span class="comment">// + 3 * 6</span> 630 <span class="comment">// -------</span> 631 <span class="comment">// = 28</span> 632</pre> 633<p> 634 You can then extract the result with the <code class="computeroutput"><span class="identifier">sum</span><span class="special">()</span></code> extractor, as follows: 635 </p> 636<pre class="programlisting"><span class="comment">// This prints "28"</span> 637<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 638</pre> 639<div class="note"><table border="0" summary="Note"> 640<tr> 641<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> 642<th align="left">Note</th> 643</tr> 644<tr><td align="left" valign="top"><p> 645 When working with weighted statistical accumulators from the Statistical 646 Accumulators Library, be sure to include the appropriate header. For 647 instance, <code class="computeroutput"><span class="identifier">weighted_sum</span></code> 648 is defined in <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">statistics</span><span class="special">/</span><span class="identifier">weighted_sum</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. 649 </p></td></tr> 650</table></div> 651</div> 652<div class="section"> 653<div class="titlepage"><div><div><h4 class="title"> 654<a name="accumulators.user_s_guide.the_accumulators_framework.numeric_operators_sub_library"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.numeric_operators_sub_library" title="Numeric Operators Sub-Library">Numeric 655 Operators Sub-Library</a> 656</h4></div></div></div> 657<p> 658 This section describes the function objects in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span></code> 659 namespace, which is a sub-library that provides function objects and meta-functions 660 corresponding to the infix operators in C++. 661 </p> 662<p> 663 In the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span></code> namespace are additional operator 664 overloads for some useful operations not provided by the standard library, 665 such as multiplication of a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span><span class="special"><></span></code> with a scalar. 666 </p> 667<p> 668 In the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span></code> namespace are function object 669 equivalents of the infix operators. These function object types are heterogeneous, 670 and so are more general than the standard ones found in the <code class="literal"><functional></code> 671 header. They use the Boost.Typeof library to deduce the return types of 672 the infix expressions they evaluate. In addition, they look within the 673 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span></code> namespace to consider any additional 674 overloads that might be defined there. 675 </p> 676<p> 677 In the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span></code> namespace are global polymorphic 678 function objects corresponding to the function object types defined in 679 the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span></code> namespace. For example, <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">plus</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code> is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">plus</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">>()(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code>, and both are equivalent to <code class="computeroutput"><span class="keyword">using</span> <span class="keyword">namespace</span> 680 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span><span class="special">;</span> 681 <span class="identifier">a</span> <span class="special">+</span> 682 <span class="identifier">b</span><span class="special">;</span></code>. 683 </p> 684<p> 685 The Numeric Operators Sub-Library also gives several ways to sub-class 686 and a way to sub-class and specialize operations. One way uses tag dispatching 687 on the types of the operands. The other way is based on the compile-time 688 properties of the operands. 689 </p> 690</div> 691<div class="section"> 692<div class="titlepage"><div><div><h4 class="title"> 693<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework" title="Extending the Accumulators Framework">Extending 694 the Accumulators Framework</a> 695</h4></div></div></div> 696<div class="toc"><dl class="toc"> 697<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator">Defining 698 a New Accumulator</a></span></dt> 699<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_feature">Defining 700 a New Feature</a></span></dt> 701<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_extractor">Defining 702 a New Extractor</a></span></dt> 703<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.controlling_dependencies">Controlling 704 Dependencies</a></span></dt> 705<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.operators_ex">Specializing 706 Numeric Operators</a></span></dt> 707</dl></div> 708<p> 709 This section describes how to extend the Accumulators Framework by defining 710 new accumulators, features and extractors. Also covered are how to control 711 the dependency resolution of features within an accumulator set. 712 </p> 713<div class="section"> 714<div class="titlepage"><div><div><h5 class="title"> 715<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator" title="Defining a New Accumulator">Defining 716 a New Accumulator</a> 717</h5></div></div></div> 718<p> 719 All new accumulators must satisfy the <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts.accumulator_concept">Accumulator 720 Concept</a>. Below is a sample class that satisfies the accumulator 721 concept, which simply sums the values of all samples passed into it. 722 </p> 723<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">framework</span><span class="special">/</span><span class="identifier">accumulator_base</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 724<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">accumulators</span><span class="special">/</span><span class="identifier">framework</span><span class="special">/</span><span class="identifier">parameters</span><span class="special">/</span><span class="identifier">sample</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 725 726<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="comment">// Putting your accumulators in the</span> 727<span class="keyword">namespace</span> <span class="identifier">accumulators</span> <span class="special">{</span> <span class="comment">// impl namespace has some</span> 728<span class="keyword">namespace</span> <span class="identifier">impl</span> <span class="special">{</span> <span class="comment">// advantages. See below.</span> 729 730<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Sample</span><span class="special">></span> 731<span class="keyword">struct</span> <span class="identifier">sum_accumulator</span> <span class="comment">// All accumulators should inherit from</span> 732 <span class="special">:</span> <span class="identifier">accumulator_base</span> <span class="comment">// accumulator_base.</span> 733<span class="special">{</span> 734 <span class="keyword">typedef</span> <span class="identifier">Sample</span> <span class="identifier">result_type</span><span class="special">;</span> <span class="comment">// The type returned by result() below.</span> 735 736 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Args</span><span class="special">></span> <span class="comment">// The constructor takes an argument pack.</span> 737 <span class="identifier">sum_accumulator</span><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">args</span><span class="special">)</span> 738 <span class="special">:</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">args</span><span class="special">[</span><span class="identifier">sample</span> <span class="special">|</span> <span class="identifier">Sample</span><span class="special">()])</span> <span class="comment">// Maybe there is an initial value in the</span> 739 <span class="special">{</span> <span class="comment">// argument pack. ('sample' is defined in</span> 740 <span class="special">}</span> <span class="comment">// sample.hpp, included above.)</span> 741 742 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Args</span><span class="special">></span> <span class="comment">// The accumulate function is the function</span> 743 <span class="keyword">void</span> <span class="keyword">operator</span> <span class="special">()(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">args</span><span class="special">)</span> <span class="comment">// call operator, and it also accepts an</span> 744 <span class="special">{</span> <span class="comment">// argument pack.</span> 745 <span class="keyword">this</span><span class="special">-></span><span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">args</span><span class="special">[</span><span class="identifier">sample</span><span class="special">];</span> 746 <span class="special">}</span> 747 748 <span class="identifier">result_type</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">dont_care</span><span class="special">)</span> <span class="keyword">const</span> <span class="comment">// The result function will also be passed</span> 749 <span class="special">{</span> <span class="comment">// an argument pack, but we don't use it here,</span> 750 <span class="keyword">return</span> <span class="keyword">this</span><span class="special">-></span><span class="identifier">sum</span><span class="special">;</span> <span class="comment">// so we use "dont_care" as the argument type.</span> 751 <span class="special">}</span> 752<span class="keyword">private</span><span class="special">:</span> 753 <span class="identifier">Sample</span> <span class="identifier">sum</span><span class="special">;</span> 754<span class="special">};</span> 755 756<span class="special">}}}</span> 757</pre> 758<p> 759 Much of the above should be pretty self-explanatory, except for the use 760 of argument packs which may be confusing if you have never used the 761 <a href="../../../libs/parameter/index.html" target="_top">Boost.Parameter</a> 762 library before. An argument pack is a cluster of values, each of which 763 can be accessed with a key. So <code class="computeroutput"><span class="identifier">args</span><span class="special">[</span><span class="identifier">sample</span><span class="special">]</span></code> extracts from the pack the value associated 764 with the <code class="computeroutput"><span class="identifier">sample</span></code> key. 765 And the cryptic <code class="computeroutput"><span class="identifier">args</span><span class="special">[</span><span class="identifier">sample</span> <span class="special">|</span> <span class="identifier">Sample</span><span class="special">()]</span></code> evaluates to the value associated 766 with the <code class="computeroutput"><span class="identifier">sample</span></code> key if 767 it exists, or a default-constructed <code class="computeroutput"><span class="identifier">Sample</span></code> 768 if it doesn't. 769 </p> 770<p> 771 The example above demonstrates the most common attributes of an accumulator. 772 There are other optional member functions that have special meaning. 773 In particular: 774 </p> 775<div class="variablelist"> 776<p class="title"><b>Optional Accumulator Member Functions</b></p> 777<dl class="variablelist"> 778<dt><span class="term"><code class="literal">on_drop(Args)</code></span></dt> 779<dd><p> 780 Defines an action to be taken when this accumulator is dropped. 781 See the section on <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.droppable_accumulators">Droppable 782 Accumulators</a>. 783 </p></dd> 784</dl> 785</div> 786<h4> 787<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.h0"></a> 788 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.accessing_other_accumulators_in_the_set"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.accessing_other_accumulators_in_the_set">Accessing 789 Other Accumulators in the Set</a> 790 </h4> 791<p> 792 Some accumulators depend on other accumulators within the same accumulator 793 set. In those cases, it is necessary to be able to access those other 794 accumulators. To make this possible, the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 795 passes a reference to itself when invoking the member functions of its 796 contained accumulators. It can be accessed by using the special <code class="computeroutput"><span class="identifier">accumulator</span></code> key with the argument pack. 797 Consider how we might implement <code class="computeroutput"><span class="identifier">mean_accumulator</span></code>: 798 </p> 799<pre class="programlisting"><span class="comment">// Mean == (Sum / Count)</span> 800<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Sample</span><span class="special">></span> 801<span class="keyword">struct</span> <span class="identifier">mean_accumulator</span> <span class="special">:</span> <span class="identifier">accumulator_base</span> 802<span class="special">{</span> 803 <span class="keyword">typedef</span> <span class="identifier">Sample</span> <span class="identifier">result_type</span><span class="special">;</span> 804 <span class="identifier">mean_accumulator</span><span class="special">(</span><span class="identifier">dont_care</span><span class="special">)</span> <span class="special">{}</span> 805 806 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Args</span><span class="special">></span> 807 <span class="identifier">result_type</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">Args</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">args</span><span class="special">)</span> <span class="keyword">const</span> 808 <span class="special">{</span> 809 <span class="keyword">return</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">args</span><span class="special">[</span><span class="identifier">accumulator</span><span class="special">])</span> <span class="special">/</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">args</span><span class="special">[</span><span class="identifier">accumulator</span><span class="special">]);</span> 810 <span class="special">}</span> 811<span class="special">};</span> 812</pre> 813<p> 814 <code class="computeroutput"><span class="identifier">mean</span></code> depends on the 815 <code class="computeroutput"><span class="identifier">sum</span></code> and <code class="computeroutput"><span class="identifier">count</span></code> accumulators. (We'll see in the 816 next section how to specify these dependencies.) The result of the mean 817 accumulator is merely the result of the sum accumulator divided by the 818 result of the count accumulator. Consider how we write that: <code class="computeroutput"><span class="identifier">sum</span><span class="special">(</span><span class="identifier">args</span><span class="special">[</span><span class="identifier">accumulator</span><span class="special">])</span> 819 <span class="special">/</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">args</span><span class="special">[</span><span class="identifier">accumulator</span><span class="special">])</span></code>. The expression <code class="computeroutput"><span class="identifier">args</span><span class="special">[</span><span class="identifier">accumulator</span><span class="special">]</span></code> evaluates to a reference to the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> that contains this 820 <code class="computeroutput"><span class="identifier">mean_accumulator</span></code>. It 821 also contains the <code class="computeroutput"><span class="identifier">sum</span></code> 822 and <code class="computeroutput"><span class="identifier">count</span></code> accumulators, 823 and we can access their results with the extractors defined for those 824 features: <code class="computeroutput"><span class="identifier">sum</span></code> and <code class="computeroutput"><span class="identifier">count</span></code>. 825 </p> 826<div class="note"><table border="0" summary="Note"> 827<tr> 828<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> 829<th align="left">Note</th> 830</tr> 831<tr><td align="left" valign="top"><p> 832 Accumulators that inherit from <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_base.html" title="Struct accumulator_base">accumulator_base</a></code> get 833 an empty <code class="computeroutput"><span class="keyword">operator</span> <span class="special">()</span></code>, 834 so accumulators like <code class="computeroutput"><span class="identifier">mean_accumulator</span></code> 835 above need not define one. 836 </p></td></tr> 837</table></div> 838<p> 839 All the member functions that accept an argument pack have access to 840 the enclosing <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 841 via the <code class="computeroutput"><span class="identifier">accumulator</span></code> key, 842 including the constructor. The accumulators within the set are constructed 843 in an order determined by their interdependencies. As a result, it is 844 safe for an accumulator to access one on which it depends during construction. 845 </p> 846<h4> 847<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.h1"></a> 848 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.infix_notation_and_the_numeric_operators_sub_library"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.infix_notation_and_the_numeric_operators_sub_library">Infix 849 Notation and the Numeric Operators Sub-Library</a> 850 </h4> 851<p> 852 Although not necessary, it can be a good idea to put your accumulator 853 implementations in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">impl</span></code> 854 namespace. This namespace pulls in any operators defined in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span></code> namespace with a using directive. 855 The Numeric Operators Sub-Library defines some additional overloads that 856 will make your accumulators work with all sorts of data types. 857 </p> 858<p> 859 Consider <code class="computeroutput"><span class="identifier">mean_accumulator</span></code> 860 defined above. It divides the sum of the samples by the count. The type 861 of the count is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>. What if the sample type doesn't 862 define division by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>? 863 That's the case for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span><span class="special"><></span></code>. You might think that if the 864 sample type is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span><span class="special"><></span></code>, 865 the code would not work, but in fact it does. That's because Numeric 866 Operators Sub-Library defines an overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">/</span></code> for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span><span class="special"><></span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>. 867 This operator is defined in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span></code> 868 namespace and will be found within the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">impl</span></code> 869 namespace. That's why it's a good idea to put your accumulators there. 870 </p> 871<h4> 872<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.h2"></a> 873 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.droppable_accumulators"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_accumulator.droppable_accumulators">Droppable 874 Accumulators</a> 875 </h4> 876<p> 877 The term "droppable" refers to an accumulator that can be removed 878 from the <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 879 You can request that an accumulator be made droppable by using the <code class="computeroutput">droppable<></code> class template. 880 </p> 881<pre class="programlisting"><span class="comment">// calculate sum and count, make sum droppable:</span> 882<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">count</span><span class="special">,</span> <span class="identifier">droppable</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 883 884<span class="comment">// add some data</span> 885<span class="identifier">acc</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> 886<span class="identifier">acc</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> 887 888<span class="comment">// drop the sum (sum is 5 here)</span> 889<span class="identifier">acc</span><span class="special">.</span><span class="identifier">drop</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span><span class="special">>();</span> 890 891<span class="comment">// add more data</span> 892<span class="identifier">acc</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> 893 894<span class="comment">// This will display "3" and "5"</span> 895<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="char">' '</span> <span class="special"><<</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">);</span> 896</pre> 897<p> 898 Any accumulators that get added to an accumulator set in order to satisfy 899 dependencies on droppable accumulators are themselves droppable. Consider 900 the following accumulator: 901 </p> 902<pre class="programlisting"><span class="comment">// Sum is not droppable. Mean is droppable. Count, brought in to </span> 903<span class="comment">// satisfy mean's dependencies, is implicitly droppable, too.</span> 904<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span><span class="special">,</span> <span class="identifier">droppable</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 905</pre> 906<p> 907 <code class="computeroutput"><span class="identifier">mean</span></code> depends on <code class="computeroutput"><span class="identifier">sum</span></code> and <code class="computeroutput"><span class="identifier">count</span></code>. 908 Since <code class="computeroutput"><span class="identifier">mean</span></code> is droppable, 909 so too is <code class="computeroutput"><span class="identifier">count</span></code>. However, 910 we have explicitly requested that <code class="computeroutput"><span class="identifier">sum</span></code> 911 be not droppable, so it isn't. Had we left <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span></code> 912 out of the above declaration, the <code class="computeroutput"><span class="identifier">sum</span></code> 913 accumulator would have been implicitly droppable. 914 </p> 915<p> 916 A droppable accumulator is reference counted, and is only really dropped 917 after all the accumulators that depend on it have been dropped. This 918 can lead to some surprising behavior in some situations. 919 </p> 920<pre class="programlisting"><span class="comment">// calculate sum and mean, make mean droppable. </span> 921<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span><span class="special">,</span> <span class="identifier">droppable</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 922 923<span class="comment">// add some data</span> 924<span class="identifier">acc</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> 925<span class="identifier">acc</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> 926 927<span class="comment">// drop the mean. mean's reference count</span> 928<span class="comment">// drops to 0, so it's really dropped. So</span> 929<span class="comment">// too, count's reference count drops to 0</span> 930<span class="comment">// and is really dropped.</span> 931<span class="identifier">acc</span><span class="special">.</span><span class="identifier">drop</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">>();</span> 932 933<span class="comment">// add more data. Sum continues to accumulate!</span> 934<span class="identifier">acc</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> 935 936<span class="comment">// This will display "6 2 3"</span> 937<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="char">' '</span> 938 <span class="special"><<</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="char">' '</span> 939 <span class="special"><<</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">);</span> 940</pre> 941<p> 942 Note that at the point at which <code class="computeroutput"><span class="identifier">mean</span></code> 943 is dropped, <code class="computeroutput"><span class="identifier">sum</span></code> is 3, 944 <code class="computeroutput"><span class="identifier">count</span></code> is 2, and therefore 945 <code class="computeroutput"><span class="identifier">mean</span></code> is 1.5. But since 946 <code class="computeroutput"><span class="identifier">sum</span></code> continues to accumulate 947 even after <code class="computeroutput"><span class="identifier">mean</span></code> has been 948 dropped, the value of <code class="computeroutput"><span class="identifier">mean</span></code> 949 continues to change. If you want to remember the value of <code class="computeroutput"><span class="identifier">mean</span></code> at the point it is dropped, you 950 should save its value into a local variable. 951 </p> 952<p> 953 The following rules more precisely specify how droppable and non-droppable 954 accumulators behave within an accumulator set. 955 </p> 956<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 957<li class="listitem"> 958 There are two types of accumulators: droppable and non-droppable. 959 The default is non-droppable. 960 </li> 961<li class="listitem"> 962 For any feature <code class="computeroutput"><span class="identifier">X</span></code>, 963 both <code class="computeroutput"><span class="identifier">X</span></code> and <code class="computeroutput"><span class="identifier">droppable</span><span class="special"><</span><span class="identifier">X</span><span class="special">></span></code> 964 satisfy the <code class="computeroutput"><span class="identifier">X</span></code> dependency. 965 </li> 966<li class="listitem"> 967 If feature <code class="computeroutput"><span class="identifier">X</span></code> depends 968 on <code class="computeroutput"><span class="identifier">Y</span></code> and <code class="computeroutput"><span class="identifier">Z</span></code>, then <code class="computeroutput"><span class="identifier">droppable</span><span class="special"><</span><span class="identifier">X</span><span class="special">></span></code> depends on <code class="computeroutput"><span class="identifier">droppable</span><span class="special"><</span><span class="identifier">Y</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">droppable</span><span class="special"><</span><span class="identifier">Z</span><span class="special">></span></code>. 969 </li> 970<li class="listitem"> 971 All accumulators have <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">drop</span><span class="special">()</span></code> member functions. 972 </li> 973<li class="listitem"> 974 For non-droppable accumulators, <code class="computeroutput"><span class="identifier">drop</span><span class="special">()</span></code> is a no-op, and <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code> invokes <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code> on all accumulators corresponding 975 to the features upon which the current accumulator depends. 976 </li> 977<li class="listitem"> 978 Droppable accumulators have a reference count and define <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code> 979 and <code class="computeroutput"><span class="identifier">drop</span><span class="special">()</span></code> 980 to manipulate the reference count. 981 </li> 982<li class="listitem"> 983 For droppable accumulators, <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code> increments the accumulator's reference 984 count, and also <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code>'s the accumulators corresponding 985 to the features upon which the current accumulator depends. 986 </li> 987<li class="listitem"> 988 For droppable accumulators, <code class="computeroutput"><span class="identifier">drop</span><span class="special">()</span></code> decrements the accumulator's reference 989 count, and also <code class="computeroutput"><span class="identifier">drop</span><span class="special">()</span></code>'s the accumulators corresponding 990 to the features upon which the current accumulator depends. 991 </li> 992<li class="listitem"> 993 The accumulator_set constructor walks the list of <span class="bold"><strong>user-specified</strong></span> 994 features and <code class="computeroutput"><span class="identifier">add_ref</span><span class="special">()</span></code>'s the accumulator that corresponds 995 to each of them. (Note: that means that an accumulator that is not 996 user-specified but in the set merely to satisfy a dependency will 997 be dropped as soon as all its dependencies have been dropped. Ones 998 that have been user specified are not dropped until their dependencies 999 have been dropped <span class="bold"><strong>and</strong></span> the user has 1000 explicitly dropped the accumulator.) 1001 </li> 1002<li class="listitem"> 1003 Droppable accumulators check their reference count in their accumulate 1004 member function. If the reference count is 0, the function is a no-op. 1005 </li> 1006<li class="listitem"> 1007 Users are not allowed to drop a feature that is not user-specified 1008 and marked as droppable. 1009 </li> 1010</ul></div> 1011<p> 1012 And as an optimization: 1013 </p> 1014<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1015 If the user specifies the non-droppable feature <code class="computeroutput"><span class="identifier">X</span></code>, 1016 which depends on <code class="computeroutput"><span class="identifier">Y</span></code> 1017 and <code class="computeroutput"><span class="identifier">Z</span></code>, then the accumulators 1018 for <code class="computeroutput"><span class="identifier">Y</span></code> and <code class="computeroutput"><span class="identifier">Z</span></code> can be safely made non-droppable, 1019 as well as any accumulators on which they depend. 1020 </li></ul></div> 1021</div> 1022<div class="section"> 1023<div class="titlepage"><div><div><h5 class="title"> 1024<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_feature"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_feature" title="Defining a New Feature">Defining 1025 a New Feature</a> 1026</h5></div></div></div> 1027<p> 1028 Once we have implemented an accumulator, we must define a feature for 1029 it so that users can specify the feature when declaring an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. We typically put 1030 the features into a nested namespace, so that later we can define an 1031 extractor of the same name. All features must satisfy the <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts.feature_concept">Feature 1032 Concept</a>. Using <code class="computeroutput"><a class="link" href="../boost/accumulators/depends_on.html" title="Struct template depends_on">depends_on<></a></code> 1033 makes satisfying the concept simple. Below is an example of a feature 1034 definition. 1035 </p> 1036<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">accumulators</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">tag</span> <span class="special">{</span> 1037 1038<span class="keyword">struct</span> <span class="identifier">mean</span> <span class="comment">// Features should inherit from</span> 1039 <span class="special">:</span> <span class="identifier">depends_on</span><span class="special"><</span> <span class="identifier">count</span><span class="special">,</span> <span class="identifier">sum</span> <span class="special">></span> <span class="comment">// depends_on<> to specify dependencies</span> 1040<span class="special">{</span> 1041 <span class="comment">// Define a nested typedef called 'impl' that specifies which</span> 1042 <span class="comment">// accumulator implements this feature. </span> 1043 <span class="keyword">typedef</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">mean_accumulator</span><span class="special"><</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span> <span class="special">></span> <span class="identifier">impl</span><span class="special">;</span> 1044<span class="special">};</span> 1045 1046<span class="special">}}}</span> 1047</pre> 1048<p> 1049 The only two things we must do to define the <code class="computeroutput"><span class="identifier">mean</span></code> 1050 feature is to specify the dependencies with <code class="computeroutput"><a class="link" href="../boost/accumulators/depends_on.html" title="Struct template depends_on">depends_on<></a></code> 1051 and define the nested <code class="computeroutput"><span class="identifier">impl</span></code> 1052 typedef. Even features that have no dependencies should inherit from 1053 <code class="computeroutput"><a class="link" href="../boost/accumulators/depends_on.html" title="Struct template depends_on">depends_on<></a></code>. The nested <code class="computeroutput"><span class="identifier">impl</span></code> type must be an <a href="../../../libs/mpl/doc/refmanual/lambda-expression.html" target="_top">MPL 1054 Lambda Expression</a>. The result of <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span> <span class="identifier">impl</span><span class="special">,</span> <em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em> <span class="special">>::</span><span class="identifier">type</span></code> must be be the type of the accumulator 1055 that implements this feature. The use of <a href="../../../libs/mpl/index.html" target="_top">MPL</a> 1056 placeholders like <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span></code> 1057 make it especially easy to make a template such as <code class="computeroutput"><span class="identifier">mean_accumulator</span><span class="special"><></span></code> an <a href="../../../libs/mpl/doc/refmanual/lambda-expression.html" target="_top">MPL 1058 Lambda Expression</a>. Here, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span></code> 1059 will be replaced with the sample type. Had we used <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span></code>, 1060 it would have been replaced with the weight type. 1061 </p> 1062<p> 1063 What about accumulator types that are not templates? If you have a <code class="computeroutput"><span class="identifier">foo_accumulator</span></code> which is a plain struct 1064 and not a template, you could turn it into an <a href="../../../libs/mpl/doc/refmanual/lambda-expression.html" target="_top">MPL 1065 Lambda Expression</a> using <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">always</span><span class="special"><></span></code>, like this: 1066 </p> 1067<pre class="programlisting"><span class="comment">// An MPL lambda expression that always evaluates to</span> 1068<span class="comment">// foo_accumulator:</span> 1069<span class="keyword">typedef</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">always</span><span class="special"><</span> <span class="identifier">foo_accumulator</span> <span class="special">></span> <span class="identifier">impl</span><span class="special">;</span> 1070</pre> 1071<p> 1072 If you are ever unsure, or if you are not comfortable with MPL lambda 1073 expressions, you could always define <code class="computeroutput"><span class="identifier">impl</span></code> 1074 explicitly: 1075 </p> 1076<pre class="programlisting"><span class="comment">// Same as 'typedef mpl::always< foo_accumulator > impl;'</span> 1077<span class="keyword">struct</span> <span class="identifier">impl</span> 1078<span class="special">{</span> 1079 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">typename</span> <span class="identifier">Sample</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Weight</span> <span class="special">></span> 1080 <span class="keyword">struct</span> <span class="identifier">apply</span> 1081 <span class="special">{</span> 1082 <span class="keyword">typedef</span> <span class="identifier">foo_accumulator</span> <span class="identifier">type</span><span class="special">;</span> 1083 <span class="special">};</span> 1084<span class="special">};</span> 1085</pre> 1086<p> 1087 Here, <code class="computeroutput"><span class="identifier">impl</span></code> is a binary 1088 <a href="../../../libs/mpl/doc/refmanual/metafunction-class.html" target="_top">MPL 1089 Metafunction Class</a>, which is a kind of <a href="../../../libs/mpl/doc/refmanual/lambda-expression.html" target="_top">MPL 1090 Lambda Expression</a>. The nested <code class="computeroutput"><span class="identifier">apply</span><span class="special"><></span></code> template is part of the metafunction 1091 class protocol and tells MPL how to build the accumulator type given 1092 the sample and weight types. 1093 </p> 1094<p> 1095 All features must also provide a nested <code class="computeroutput"><span class="identifier">is_weight_accumulator</span></code> 1096 typedef. It must be either <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> 1097 or <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>. <code class="computeroutput"><a class="link" href="../boost/accumulators/depends_on.html" title="Struct template depends_on">depends_on<></a></code> 1098 provides a default of <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> 1099 for all features that inherit from it, but that can be overridden (or 1100 hidden, technically speaking) in the derived type. When the feature represents 1101 an accumulation of information about the weights instead of the samples, 1102 we can mark this feature as such with <code class="computeroutput"><span class="keyword">typedef</span> 1103 <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span> <span class="identifier">is_weight_accumulator</span><span class="special">;</span></code>. The weight accumulators are made external 1104 if the weight type is specified using the <code class="computeroutput">external<></code> 1105 template. 1106 </p> 1107</div> 1108<div class="section"> 1109<div class="titlepage"><div><div><h5 class="title"> 1110<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_extractor"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_extractor" title="Defining a New Extractor">Defining 1111 a New Extractor</a> 1112</h5></div></div></div> 1113<p> 1114 Now that we have an accumulator and a feature, the only thing lacking 1115 is a way to get results from the accumulator set. The Accumulators Framework 1116 provides the <code class="computeroutput">extractor<></code> 1117 class template to make it simple to define an extractor for your feature. 1118 Here's an extractor for the <code class="computeroutput"><span class="identifier">mean</span></code> 1119 feature we defined above: 1120 </p> 1121<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 1122<span class="keyword">namespace</span> <span class="identifier">accumulators</span> <span class="special">{</span> <span class="comment">// By convention, we put extractors</span> 1123<span class="keyword">namespace</span> <span class="identifier">extract</span> <span class="special">{</span> <span class="comment">// in the 'extract' namespace</span> 1124 1125<span class="identifier">extractor</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span> <span class="special">></span> <span class="keyword">const</span> <span class="identifier">mean</span> <span class="special">=</span> <span class="special">{};</span> <span class="comment">// Simply define our extractor with</span> 1126 <span class="comment">// our feature tag, like this.</span> 1127<span class="special">}</span> 1128<span class="keyword">using</span> <span class="identifier">extract</span><span class="special">::</span><span class="identifier">mean</span><span class="special">;</span> <span class="comment">// Pull the extractor into the</span> 1129 <span class="comment">// enclosing namespace.</span> 1130<span class="special">}}</span> 1131</pre> 1132<p> 1133 Once defined, the <code class="computeroutput"><span class="identifier">mean</span></code> 1134 extractor can be used to extract the result of the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span></code> 1135 feature from an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code>. 1136 </p> 1137<p> 1138 Parameterized features complicate this simple picture. Consider the 1139 <code class="computeroutput"><span class="identifier">moment</span></code> feature, for calculating 1140 the <code class="literal"><span class="emphasis"><em>N</em></span></code>-th moment, where <code class="literal"><span class="emphasis"><em>N</em></span></code> 1141 is specified as a template parameter: 1142 </p> 1143<pre class="programlisting"><span class="comment">// An accumulator set for calculating the N-th moment, for N == 2 ...</span> 1144<span class="identifier">accumulator_set</span><span class="special"><</span> <span class="keyword">double</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 1145 1146<span class="comment">// ... add some data ...</span> 1147 1148<span class="comment">// Display the 2nd moment ...</span> 1149<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"2nd moment is "</span> <span class="special"><<</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 1150</pre> 1151<p> 1152 In the expression <code class="computeroutput"><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)</span></code>, 1153 what is <code class="computeroutput"><span class="identifier">moment</span></code>? It cannot 1154 be an object -- the syntax of C++ will not allow it. Clearly, if we want 1155 to provide this syntax, we must make <code class="computeroutput"><span class="identifier">moment</span></code> 1156 a function template. Here's what the definition of the <code class="computeroutput"><span class="identifier">moment</span></code> extractor looks like: 1157 </p> 1158<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 1159<span class="keyword">namespace</span> <span class="identifier">accumulators</span> <span class="special">{</span> <span class="comment">// By convention, we put extractors</span> 1160<span class="keyword">namespace</span> <span class="identifier">extract</span> <span class="special">{</span> <span class="comment">// in the 'extract' namespace</span> 1161 1162<span class="keyword">template</span><span class="special"><</span><span class="keyword">int</span> <span class="identifier">N</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">AccumulatorSet</span><span class="special">></span> 1163<span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">AccumulatorSet</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">result_type</span> 1164<span class="identifier">moment</span><span class="special">(</span><span class="identifier">AccumulatorSet</span> <span class="keyword">const</span> <span class="special">&</span><span class="identifier">acc</span><span class="special">)</span> 1165<span class="special">{</span> 1166 <span class="keyword">return</span> <span class="identifier">extract_result</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">>(</span><span class="identifier">acc</span><span class="special">);</span> 1167<span class="special">}</span> 1168 1169<span class="special">}</span> 1170<span class="keyword">using</span> <span class="identifier">extract</span><span class="special">::</span><span class="identifier">moment</span><span class="special">;</span> <span class="comment">// Pull the extractor into the</span> 1171 <span class="comment">// enclosing namespace.</span> 1172<span class="special">}}</span> 1173</pre> 1174<p> 1175 The return type deserves some explanation. Every <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 1176 type is actually a unary <a href="../../../libs/mpl/doc/refmanual/metafunction-class.html" target="_top">MPL 1177 Metafunction Class</a>. When you <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><></span></code> an <code class="computeroutput"><a class="link" href="../boost/accumulators/accumulator_set.html" title="Struct template accumulator_set">accumulator_set<></a></code> 1178 and a feature, the result is the type of the accumulator within the set 1179 that implements that feature. And every accumulator provides a nested 1180 <code class="computeroutput"><span class="identifier">result_type</span></code> typedef that 1181 tells what its return type is. The extractor simply delegates its work 1182 to the <code class="computeroutput"><a class="link" href="reference.html#boost.accumulators.extract_result">extract_result()</a></code> 1183 function. 1184 </p> 1185</div> 1186<div class="section"> 1187<div class="titlepage"><div><div><h5 class="title"> 1188<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.controlling_dependencies"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.controlling_dependencies" title="Controlling Dependencies">Controlling 1189 Dependencies</a> 1190</h5></div></div></div> 1191<p> 1192 The feature-based dependency resolution of the Accumulators Framework 1193 is designed to allow multiple different implementation strategies for 1194 each feature. For instance, two different accumulators may calculate 1195 the same quantity with different rounding modes, or using different algorithms 1196 with different size/speed tradeoffs. Other accumulators that depend on 1197 that quantity shouldn't care how it's calculated. The Accumulators Framework 1198 handles this by allowing several different accumulators satisfy the same 1199 feature. 1200 </p> 1201<p> 1202 <span class="bold"><strong>Aliasing feature dependencies with <code class="literal">feature_of<></code></strong></span> 1203 </p> 1204<p> 1205 Imagine that you would like to implement the hypothetical <span class="emphasis"><em>fubar</em></span> 1206 statistic, and that you know two ways to calculate fubar on a bunch of 1207 samples: an accurate but slow calculation and an approximate but fast 1208 calculation. You might opt to make the accurate calculation the default, 1209 so you implement two accumulators and call them <code class="computeroutput"><span class="identifier">impl</span><span class="special">::</span><span class="identifier">fubar_impl</span></code> 1210 and <code class="computeroutput"><span class="identifier">impl</span><span class="special">::</span><span class="identifier">fast_fubar_impl</span></code>. You would also define 1211 the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fast_fubar</span></code> 1212 features as described <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.defining_a_new_feature" title="Defining a New Feature">above</a>. 1213 Now, you would like to inform the Accumulators Framework that these two 1214 features are the same from the point of view of dependency resolution. 1215 You can do that with <code class="computeroutput"><a class="link" href="../boost/accumulators/feature_of.html" title="Struct template feature_of">feature_of<></a></code>, 1216 as follows: 1217 </p> 1218<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">accumulators</span> 1219<span class="special">{</span> 1220 <span class="comment">// For the purposes of feature-based dependency resolution,</span> 1221 <span class="comment">// fast_fubar provides the same feature as fubar</span> 1222 <span class="keyword">template</span><span class="special"><></span> 1223 <span class="keyword">struct</span> <span class="identifier">feature_of</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fast_fubar</span><span class="special">></span> 1224 <span class="special">:</span> <span class="identifier">feature_of</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">></span> 1225 <span class="special">{</span> 1226 <span class="special">};</span> 1227<span class="special">}}</span> 1228</pre> 1229<p> 1230 The above code instructs the Accumulators Framework that, if another 1231 accumulator in the set depends on the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span></code> 1232 feature, the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fast_fubar</span></code> feature is an acceptable 1233 substitute. 1234 </p> 1235<p> 1236 <span class="bold"><strong>Registering feature variants with <code class="literal">as_feature<></code></strong></span> 1237 </p> 1238<p> 1239 You may have noticed that some feature variants in the Accumulators Framework 1240 can be specified with a nicer syntax. For instance, instead of <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">immediate_mean</span></code> 1241 you can specify them with <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span></code> respectively. These are merely aliases, 1242 but the syntax makes the relationship between the two clearer. You can 1243 create these feature aliases with the <code class="computeroutput"><a class="link" href="../boost/accumulators/as_feature.html" title="Struct template as_feature">as_feature<></a></code> 1244 trait. Given the fubar example above, you might decide to alias <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">accurate</span><span class="special">)</span></code> 1245 with <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">fast</span><span class="special">)</span></code> with <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fast_fubar</span></code>. 1246 You would do that as follows: 1247 </p> 1248<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">accumulators</span> 1249<span class="special">{</span> 1250 <span class="keyword">struct</span> <span class="identifier">fast</span> <span class="special">{};</span> <span class="comment">// OK to leave these tags empty</span> 1251 <span class="keyword">struct</span> <span class="identifier">accurate</span> <span class="special">{};</span> 1252 1253 <span class="keyword">template</span><span class="special"><></span> 1254 <span class="keyword">struct</span> <span class="identifier">as_feature</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">accurate</span><span class="special">)></span> 1255 <span class="special">{</span> 1256 <span class="keyword">typedef</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span> <span class="identifier">type</span><span class="special">;</span> 1257 <span class="special">};</span> 1258 1259 <span class="keyword">template</span><span class="special"><></span> 1260 <span class="keyword">struct</span> <span class="identifier">as_feature</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">fast</span><span class="special">)></span> 1261 <span class="special">{</span> 1262 <span class="keyword">typedef</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">fast_fubar</span> <span class="identifier">type</span><span class="special">;</span> 1263 <span class="special">};</span> 1264<span class="special">}}</span> 1265</pre> 1266<p> 1267 Once you have done this, users of your fubar accumulator can request 1268 the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">fast</span><span class="special">)</span></code> 1269 and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">fubar</span><span class="special">(</span><span class="identifier">accurate</span><span class="special">)</span></code> 1270 features when defining their <code class="computeroutput"><span class="identifier">accumulator_set</span></code>s 1271 and get the correct accumulator. 1272 </p> 1273</div> 1274<div class="section"> 1275<div class="titlepage"><div><div><h5 class="title"> 1276<a name="accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.operators_ex"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.extending_the_accumulators_framework.operators_ex" title="Specializing Numeric Operators">Specializing 1277 Numeric Operators</a> 1278</h5></div></div></div> 1279<p> 1280 This section describes how to adapt third-party numeric types to work 1281 with the Accumulator Framework. 1282 </p> 1283<p> 1284 Rather than relying on the built-in operators, the Accumulators Framework 1285 relies on functions and operator overloads defined in the <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.numeric_operators_sub_library" title="Numeric Operators Sub-Library">Numeric 1286 Operators Sub-Library</a> for many of its numeric operations. This 1287 is so that it is possible to assign non-standard meanings to arithmetic 1288 operations. For instance, when calculating an average by dividing two 1289 integers, the standard integer division behavior would be mathematically 1290 incorrect for most statistical quantities. So rather than use <code class="computeroutput"><span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code>, the Accumulators Framework uses 1291 <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span></code>, 1292 which does floating-point division even if both <code class="computeroutput"><span class="identifier">x</span></code> 1293 and <code class="computeroutput"><span class="identifier">y</span></code> are integers. 1294 </p> 1295<p> 1296 Another example where the Numeric Operators Sub-Library is useful is 1297 when a type does not define the operator overloads required to use it 1298 for some statistical calculations. For instance, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code> does not overload any arithmetic 1299 operators, yet it may be useful to use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code> as a sample or variate type. 1300 The Numeric Operators Sub-Library defines the necessary operator overloads 1301 in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">operators</span></code> namespace, which is brought 1302 into scope by the Accumulators Framework with a using directive. 1303 </p> 1304<p> 1305 <span class="bold"><strong>Numeric Function Objects and Tag Dispatching</strong></span> 1306 </p> 1307<p> 1308 How are the numeric function object defined by the Numeric Operators 1309 Sub-Library made to work with types such as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code>? The free functions in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span></code> namespace are implemented in 1310 terms of the function objects in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span></code> 1311 namespace, so to make <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special">()</span></code> do something sensible with a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><></span></code>, 1312 for instance, we'll need to partially specialize the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><></span></code> function object. 1313 </p> 1314<p> 1315 The functional objects make use of a technique known as <a href="http://www.boost.org/community/generic_programming.html#tag_dispatching" target="_top"><span class="emphasis"><em>tag 1316 dispatching</em></span></a> to select the proper implementation for 1317 the given operands. It works as follows: 1318 </p> 1319<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">numeric</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">functional</span> 1320<span class="special">{</span> 1321 <span class="comment">// Metafunction for looking up the tag associated with</span> 1322 <span class="comment">// a given numeric type T.</span> 1323 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> 1324 <span class="keyword">struct</span> <span class="identifier">tag</span> 1325 <span class="special">{</span> 1326 <span class="comment">// by default, all types have void as a tag type</span> 1327 <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span> 1328 <span class="special">};</span> 1329 1330 <span class="comment">// Forward declaration looks up the tag types of each operand</span> 1331 <span class="keyword">template</span><span class="special"><</span> 1332 <span class="keyword">typename</span> <span class="identifier">Left</span> 1333 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Right</span> 1334 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">LeftTag</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special"><</span><span class="identifier">Left</span><span class="special">>::</span><span class="identifier">type</span> 1335 <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RightTag</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">tag</span><span class="special"><</span><span class="identifier">Right</span><span class="special">>::</span><span class="identifier">type</span> 1336 <span class="special">></span> 1337 <span class="keyword">struct</span> <span class="identifier">fdiv</span><span class="special">;</span> 1338<span class="special">}}}</span> 1339</pre> 1340<p> 1341 If you have some user-defined type <code class="computeroutput"><span class="identifier">MyDouble</span></code> 1342 for which you would like to customize the behavior of <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special">()</span></code>, you would specialize <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><></span></code> 1343 by first defining a tag type, as shown below: 1344 </p> 1345<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">numeric</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">functional</span> 1346<span class="special">{</span> 1347 <span class="comment">// Tag type for MyDouble</span> 1348 <span class="keyword">struct</span> <span class="identifier">MyDoubleTag</span> <span class="special">{};</span> 1349 1350 <span class="comment">// Specialize tag<> for MyDouble.</span> 1351 <span class="comment">// This only needs to be done once.</span> 1352 <span class="keyword">template</span><span class="special"><></span> 1353 <span class="keyword">struct</span> <span class="identifier">tag</span><span class="special"><</span><span class="identifier">MyDouble</span><span class="special">></span> 1354 <span class="special">{</span> 1355 <span class="keyword">typedef</span> <span class="identifier">MyDoubleTag</span> <span class="identifier">type</span><span class="special">;</span> 1356 <span class="special">};</span> 1357 1358 <span class="comment">// Specify how to divide a MyDouble by an integral count</span> 1359 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Left</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Right</span><span class="special">></span> 1360 <span class="keyword">struct</span> <span class="identifier">fdiv</span><span class="special"><</span><span class="identifier">Left</span><span class="special">,</span> <span class="identifier">Right</span><span class="special">,</span> <span class="identifier">MyDoubleTag</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> 1361 <span class="special">{</span> 1362 <span class="comment">// Define the type of the result</span> 1363 <span class="keyword">typedef</span> <span class="special">...</span> <span class="identifier">result_type</span><span class="special">;</span> 1364 1365 <span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Left</span> <span class="special">&</span> <span class="identifier">left</span><span class="special">,</span> <span class="identifier">Right</span> <span class="special">&</span> <span class="identifier">right</span><span class="special">)</span> <span class="keyword">const</span> 1366 <span class="special">{</span> 1367 <span class="keyword">return</span> <span class="special">...;</span> 1368 <span class="special">}</span> 1369 <span class="special">};</span> 1370<span class="special">}}}</span> 1371</pre> 1372<p> 1373 Once you have done this, <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special">()</span></code> will use your specialization of <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><></span></code> 1374 when the first argument is a <code class="computeroutput"><span class="identifier">MyDouble</span></code> 1375 object. All of the function objects in the Numeric Operators Sub-Library 1376 can be customized in a similar fashion. 1377 </p> 1378</div> 1379</div> 1380<div class="section"> 1381<div class="titlepage"><div><div><h4 class="title"> 1382<a name="accumulators.user_s_guide.the_accumulators_framework.concepts"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts" title="Concepts">Concepts</a> 1383</h4></div></div></div> 1384<h3> 1385<a name="accumulators.user_s_guide.the_accumulators_framework.concepts.h0"></a> 1386 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.concepts.accumulator_concept"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts.accumulator_concept">Accumulator 1387 Concept</a> 1388 </h3> 1389<p> 1390 In the following table, <code class="computeroutput"><span class="identifier">Acc</span></code> 1391 is the type of an accumulator, <code class="computeroutput"><span class="identifier">acc</span></code> 1392 and <code class="computeroutput"><span class="identifier">acc2</span></code> are objects of 1393 type <code class="computeroutput"><span class="identifier">Acc</span></code>, and <code class="computeroutput"><span class="identifier">args</span></code> is the name of an argument pack 1394 from the <a href="../../../libs/parameter/index.html" target="_top">Boost.Parameter</a> 1395 library. 1396 </p> 1397<div class="table"> 1398<a name="accumulators.user_s_guide.the_accumulators_framework.concepts.t0"></a><p class="title"><b>Table 1.2. Accumulator Requirements</b></p> 1399<div class="table-contents"><table class="table" summary="Accumulator Requirements"> 1400<colgroup> 1401<col> 1402<col> 1403<col> 1404</colgroup> 1405<thead><tr> 1406<th> 1407 <p> 1408 <span class="bold"><strong>Expression</strong></span> 1409 </p> 1410 </th> 1411<th> 1412 <p> 1413 <span class="bold"><strong>Return type</strong></span> 1414 </p> 1415 </th> 1416<th> 1417 <p> 1418 <span class="bold"><strong>Assertion / Note / Pre- / Post-condition</strong></span> 1419 </p> 1420 </th> 1421</tr></thead> 1422<tbody> 1423<tr> 1424<td> 1425 <p> 1426 <code class="computeroutput"><span class="identifier">Acc</span><span class="special">::</span><span class="identifier">result_type</span></code> 1427 </p> 1428 </td> 1429<td> 1430 <p> 1431 <span class="emphasis"><em>implementation defined</em></span> 1432 </p> 1433 </td> 1434<td> 1435 <p> 1436 The type returned by <code class="computeroutput"><span class="identifier">Acc</span><span class="special">::</span><span class="identifier">result</span><span class="special">()</span></code>. 1437 </p> 1438 </td> 1439</tr> 1440<tr> 1441<td> 1442 <p> 1443 <code class="computeroutput"><span class="identifier">Acc</span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1444 </p> 1445 </td> 1446<td> 1447 <p> 1448 none 1449 </p> 1450 </td> 1451<td> 1452 <p> 1453 Construct from an argument pack. 1454 </p> 1455 </td> 1456</tr> 1457<tr> 1458<td> 1459 <p> 1460 <code class="computeroutput"><span class="identifier">Acc</span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">)</span></code> 1461 </p> 1462 </td> 1463<td> 1464 <p> 1465 none 1466 </p> 1467 </td> 1468<td> 1469 <p> 1470 Post: <code class="computeroutput"><span class="identifier">acc</span><span class="special">.</span><span class="identifier">result</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1471 is equivalent to <code class="computeroutput"><span class="identifier">acc2</span><span class="special">.</span><span class="identifier">result</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1472 </p> 1473 </td> 1474</tr> 1475<tr> 1476<td> 1477 <p> 1478 <code class="computeroutput"><span class="identifier">acc</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1479 </p> 1480 </td> 1481<td> 1482 <p> 1483 <span class="emphasis"><em>unspecified</em></span> 1484 </p> 1485 </td> 1486<td> 1487 </td> 1488</tr> 1489<tr> 1490<td> 1491 <p> 1492 <code class="computeroutput"><span class="identifier">acc</span><span class="special">.</span><span class="identifier">on_drop</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1493 </p> 1494 </td> 1495<td> 1496 <p> 1497 <span class="emphasis"><em>unspecified</em></span> 1498 </p> 1499 </td> 1500<td> 1501 </td> 1502</tr> 1503<tr> 1504<td> 1505 <p> 1506 <code class="computeroutput"><span class="identifier">acc</span><span class="special">.</span><span class="identifier">result</span><span class="special">(</span><span class="identifier">args</span><span class="special">)</span></code> 1507 </p> 1508 </td> 1509<td> 1510 <p> 1511 <code class="computeroutput"><span class="identifier">Acc</span><span class="special">::</span><span class="identifier">result_type</span></code> 1512 </p> 1513 </td> 1514<td> 1515 </td> 1516</tr> 1517</tbody> 1518</table></div> 1519</div> 1520<br class="table-break"><h3> 1521<a name="accumulators.user_s_guide.the_accumulators_framework.concepts.h1"></a> 1522 <span class="phrase"><a name="accumulators.user_s_guide.the_accumulators_framework.concepts.feature_concept"></a></span><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework.concepts.feature_concept">Feature 1523 Concept</a> 1524 </h3> 1525<p> 1526 In the following table, <code class="computeroutput"><span class="identifier">F</span></code> 1527 is the type of a feature and <code class="computeroutput"><span class="identifier">S</span></code> 1528 is some scalar type. 1529 </p> 1530<div class="table"> 1531<a name="accumulators.user_s_guide.the_accumulators_framework.concepts.t1"></a><p class="title"><b>Table 1.3. Feature Requirements</b></p> 1532<div class="table-contents"><table class="table" summary="Feature Requirements"> 1533<colgroup> 1534<col> 1535<col> 1536<col> 1537</colgroup> 1538<thead><tr> 1539<th> 1540 <p> 1541 <span class="bold"><strong>Expression</strong></span> 1542 </p> 1543 </th> 1544<th> 1545 <p> 1546 <span class="bold"><strong>Return type</strong></span> 1547 </p> 1548 </th> 1549<th> 1550 <p> 1551 <span class="bold"><strong>Assertion / Note / Pre- / Post-condition</strong></span> 1552 </p> 1553 </th> 1554</tr></thead> 1555<tbody> 1556<tr> 1557<td> 1558 <p> 1559 <code class="computeroutput"><span class="identifier">F</span><span class="special">::</span><span class="identifier">dependencies</span></code> 1560 </p> 1561 </td> 1562<td> 1563 <p> 1564 <span class="emphasis"><em>unspecified</em></span> 1565 </p> 1566 </td> 1567<td> 1568 <p> 1569 An MPL sequence of other features on which <code class="computeroutput"><span class="identifier">F</span></code> 1570 depends. 1571 </p> 1572 </td> 1573</tr> 1574<tr> 1575<td> 1576 <p> 1577 <code class="computeroutput"><span class="identifier">F</span><span class="special">::</span><span class="identifier">is_weight_accumulator</span></code> 1578 </p> 1579 </td> 1580<td> 1581 <p> 1582 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> or <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> 1583 </p> 1584 </td> 1585<td> 1586 <p> 1587 <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> if the accumulator for 1588 this feature should be made external when the weight type for 1589 the accumulator set is <code class="computeroutput"><span class="identifier">external</span><span class="special"><</span><span class="identifier">S</span><span class="special">></span></code>, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> 1590 otherwise. 1591 </p> 1592 </td> 1593</tr> 1594<tr> 1595<td> 1596 <p> 1597 <code class="computeroutput"><span class="identifier">F</span><span class="special">::</span><span class="identifier">impl</span></code> 1598 </p> 1599 </td> 1600<td> 1601 <p> 1602 <span class="emphasis"><em>unspecified</em></span> 1603 </p> 1604 </td> 1605<td> 1606 <p> 1607 An <a href="../../../libs/mpl/doc/refmanual/lambda-expression.html" target="_top">MPL 1608 Lambda Expression</a> that returns the type of the accumulator 1609 that implements this feature when passed a sample type and a 1610 weight type. 1611 </p> 1612 </td> 1613</tr> 1614</tbody> 1615</table></div> 1616</div> 1617<br class="table-break"> 1618</div> 1619</div> 1620<div class="section"> 1621<div class="titlepage"><div><div><h3 class="title"> 1622<a name="accumulators.user_s_guide.the_statistical_accumulators_library"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library" title="The Statistical Accumulators Library">The 1623 Statistical Accumulators Library</a> 1624</h3></div></div></div> 1625<div class="toc"><dl class="toc"> 1626<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count">count</a></span></dt> 1627<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.covariance">covariance</a></span></dt> 1628<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.density">density</a></span></dt> 1629<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.error_of_mean">error_of<mean></a></span></dt> 1630<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square">extended_p_square</a></span></dt> 1631<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square_quantile">extended_p_square_quantile 1632 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1633<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.kurtosis">kurtosis</a></span></dt> 1634<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.max">max</a></span></dt> 1635<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean">mean 1636 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1637<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.median">median 1638 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1639<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.min">min</a></span></dt> 1640<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.moment">moment</a></span></dt> 1641<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_cumulative_distribution">p_square_cumulative_distribution</a></span></dt> 1642<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_quantile">p_square_quantile 1643 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1644<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.peaks_over_threshold">peaks_over_threshold 1645 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1646<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile">pot_quantile 1647 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1648<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_tail_mean">pot_tail_mean</a></span></dt> 1649<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_count">rolling_count</a></span></dt> 1650<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_sum">rolling_sum</a></span></dt> 1651<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_mean">rolling_mean</a></span></dt> 1652<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_moment">rolling_moment</a></span></dt> 1653<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_variance">rolling_variance</a></span></dt> 1654<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.skewness">skewness</a></span></dt> 1655<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum">sum 1656 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1657<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail">tail</a></span></dt> 1658<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.coherent_tail_mean">coherent_tail_mean</a></span></dt> 1659<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean">non_coherent_tail_mean</a></span></dt> 1660<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_quantile">tail_quantile</a></span></dt> 1661<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate">tail_variate</a></span></dt> 1662<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate_means">tail_variate_means 1663 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1664<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.variance">variance 1665 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1666<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_covariance">weighted_covariance</a></span></dt> 1667<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_density">weighted_density</a></span></dt> 1668<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_extended_p_square">weighted_extended_p_square</a></span></dt> 1669<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_kurtosis">weighted_kurtosis</a></span></dt> 1670<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean">weighted_mean 1671 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1672<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_median">weighted_median 1673 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1674<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment">weighted_moment</a></span></dt> 1675<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_cumulative_distribution">weighted_p_square_cumulative_distribution</a></span></dt> 1676<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_quantile">weighted_p_square_quantile 1677 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1678<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_peaks_over_threshold">weighted_peaks_over_threshold 1679 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1680<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_skewness">weighted_skewness</a></span></dt> 1681<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_sum">weighted_sum 1682 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1683<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_weighted_tail_mean">non_coherent_weighted_tail_mean</a></span></dt> 1684<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_quantile">weighted_tail_quantile</a></span></dt> 1685<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_variate_means">weighted_tail_variate_means 1686 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1687<dt><span class="section"><a href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_variance">weighted_variance 1688 <span class="emphasis"><em>and variants</em></span></a></span></dt> 1689</dl></div> 1690<p> 1691 The Statistical Accumulators Library defines accumulators for incremental 1692 statistical computations. It is built on top of <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_accumulators_framework" title="The Accumulators Framework">The 1693 Accumulator Framework</a>. 1694 </p> 1695<div class="section"> 1696<div class="titlepage"><div><div><h4 class="title"> 1697<a name="accumulators.user_s_guide.the_statistical_accumulators_library.count"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count">count</a> 1698</h4></div></div></div> 1699<p> 1700 The <code class="computeroutput"><span class="identifier">count</span></code> feature is a 1701 simple counter that tracks the number of samples pushed into the accumulator 1702 set. 1703 </p> 1704<div class="variablelist"> 1705<p class="title"><b></b></p> 1706<dl class="variablelist"> 1707<dt><span class="term">Result Type</span></dt> 1708<dd> 1709<p> 1710</p> 1711<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 1712</pre> 1713<p> 1714 </p> 1715</dd> 1716<dt><span class="term">Depends On</span></dt> 1717<dd><p> 1718 <span class="emphasis"><em>none</em></span> 1719 </p></dd> 1720<dt><span class="term">Variants</span></dt> 1721<dd><p> 1722 <span class="emphasis"><em>none</em></span> 1723 </p></dd> 1724<dt><span class="term">Initialization Parameters</span></dt> 1725<dd><p> 1726 <span class="emphasis"><em>none</em></span> 1727 </p></dd> 1728<dt><span class="term">Accumulator Parameters</span></dt> 1729<dd><p> 1730 <span class="emphasis"><em>none</em></span> 1731 </p></dd> 1732<dt><span class="term">Extractor Parameters</span></dt> 1733<dd><p> 1734 <span class="emphasis"><em>none</em></span> 1735 </p></dd> 1736<dt><span class="term">Accumulator Complexity</span></dt> 1737<dd><p> 1738 O(1) 1739 </p></dd> 1740<dt><span class="term">Extractor Complexity</span></dt> 1741<dd><p> 1742 O(1) 1743 </p></dd> 1744</dl> 1745</div> 1746<p> 1747 <span class="bold"><strong>Header</strong></span> 1748 </p> 1749<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.count_hpp" title="Header <boost/accumulators/statistics/count.hpp>">boost/accumulators/statistics/count.hpp</a></code><span class="special">></span> 1750</pre> 1751<p> 1752 <span class="bold"><strong>Example</strong></span> 1753 </p> 1754<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">features</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">count</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 1755<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> 1756<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> 1757<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> 1758<span class="identifier">assert</span><span class="special">(</span><span class="number">3</span> <span class="special">==</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 1759</pre> 1760<p> 1761 <span class="bold"><strong>See also</strong></span> 1762 </p> 1763<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1764 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/count_impl.html" title="Struct count_impl">count_impl</a></code> 1765 </li></ul></div> 1766</div> 1767<div class="section"> 1768<div class="titlepage"><div><div><h4 class="title"> 1769<a name="accumulators.user_s_guide.the_statistical_accumulators_library.covariance"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.covariance" title="covariance">covariance</a> 1770</h4></div></div></div> 1771<p> 1772 The <code class="computeroutput"><span class="identifier">covariance</span></code> feature 1773 is an iterative Monte Carlo estimator for the covariance. It is specified 1774 as <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariance</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code>. 1775 </p> 1776<div class="variablelist"> 1777<p class="title"><b></b></p> 1778<dl class="variablelist"> 1779<dt><span class="term">Result Type</span></dt> 1780<dd> 1781<p> 1782</p> 1783<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">outer_product</span><span class="special"><</span> 1784 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 1785 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 1786<span class="special">>::</span><span class="identifier">result_type</span> 1787</pre> 1788<p> 1789 </p> 1790</dd> 1791<dt><span class="term">Depends On</span></dt> 1792<dd><p> 1793 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">mean</span></code> <br> <code class="computeroutput"><span class="identifier">mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 1794 </p></dd> 1795<dt><span class="term">Variants</span></dt> 1796<dd><p> 1797 <code class="computeroutput"><span class="identifier">abstract_covariance</span></code> 1798 </p></dd> 1799<dt><span class="term">Initialization Parameters</span></dt> 1800<dd><p> 1801 <span class="emphasis"><em>none</em></span> 1802 </p></dd> 1803<dt><span class="term">Accumulator Parameters</span></dt> 1804<dd><p> 1805 <em class="replaceable"><code>variate-tag</code></em> 1806 </p></dd> 1807<dt><span class="term">Extractor Parameters</span></dt> 1808<dd><p> 1809 <span class="emphasis"><em>none</em></span> 1810 </p></dd> 1811<dt><span class="term">Accumulator Complexity</span></dt> 1812<dd><p> 1813 TODO 1814 </p></dd> 1815<dt><span class="term">Extractor Complexity</span></dt> 1816<dd><p> 1817 O(1) 1818 </p></dd> 1819</dl> 1820</div> 1821<p> 1822 <span class="bold"><strong>Headers</strong></span> 1823 </p> 1824<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.covariance_hpp" title="Header <boost/accumulators/statistics/covariance.hpp>">boost/accumulators/statistics/covariance.hpp</a></code><span class="special">></span> 1825<span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.variates.covariate_hpp" title="Header <boost/accumulators/statistics/variates/covariate.hpp>">boost/accumulators/statistics/variates/covariate.hpp</a></code><span class="special">></span> 1826</pre> 1827<p> 1828 <span class="bold"><strong>Example</strong></span> 1829 </p> 1830<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariance</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 1831<span class="identifier">acc</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">2.</span><span class="special">);</span> 1832<span class="identifier">acc</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">4.</span><span class="special">);</span> 1833<span class="identifier">acc</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3.</span><span class="special">);</span> 1834<span class="identifier">acc</span><span class="special">(</span><span class="number">6.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 1835<span class="identifier">assert</span><span class="special">(</span><span class="identifier">covariance</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)</span> <span class="special">==</span> <span class="special">-</span><span class="number">1.75</span><span class="special">);</span> 1836</pre> 1837<p> 1838 <span class="bold"><strong>See also</strong></span> 1839 </p> 1840<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1841<li class="listitem"> 1842 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/covariance_impl.html" title="Struct template covariance_impl">covariance_impl</a></code> 1843 </li> 1844<li class="listitem"> 1845 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 1846 </li> 1847<li class="listitem"> 1848 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean" title="mean and variants"><code class="literal">mean</code></a> 1849 </li> 1850</ul></div> 1851</div> 1852<div class="section"> 1853<div class="titlepage"><div><div><h4 class="title"> 1854<a name="accumulators.user_s_guide.the_statistical_accumulators_library.density"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.density" title="density">density</a> 1855</h4></div></div></div> 1856<p> 1857 The <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">density</span></code> feature returns a histogram of 1858 the sample distribution. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/density_impl.html" title="Struct template density_impl">density_impl</a></code>. 1859 </p> 1860<div class="variablelist"> 1861<p class="title"><b></b></p> 1862<dl class="variablelist"> 1863<dt><span class="term">Result Type</span></dt> 1864<dd> 1865<p> 1866</p> 1867<pre class="programlisting"><span class="identifier">iterator_range</span><span class="special"><</span> 1868 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> 1869 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span> 1870 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 1871 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 1872 <span class="special">></span> 1873 <span class="special">>::</span><span class="identifier">iterator</span> 1874<span class="special">></span> 1875</pre> 1876<p> 1877 </p> 1878</dd> 1879<dt><span class="term">Depends On</span></dt> 1880<dd><p> 1881 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">min</span></code> <br> <code class="computeroutput"><span class="identifier">max</span></code> 1882 </p></dd> 1883<dt><span class="term">Variants</span></dt> 1884<dd><p> 1885 <span class="emphasis"><em>none</em></span> 1886 </p></dd> 1887<dt><span class="term">Initialization Parameters</span></dt> 1888<dd><p> 1889 <code class="computeroutput"><span class="identifier">density</span><span class="special">::</span><span class="identifier">cache_size</span></code> <br> <code class="computeroutput"><span class="identifier">density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 1890 </p></dd> 1891<dt><span class="term">Accumulator Parameters</span></dt> 1892<dd><p> 1893 <span class="emphasis"><em>none</em></span> 1894 </p></dd> 1895<dt><span class="term">Extractor Parameters</span></dt> 1896<dd><p> 1897 <span class="emphasis"><em>none</em></span> 1898 </p></dd> 1899<dt><span class="term">Accumulator Complexity</span></dt> 1900<dd><p> 1901 TODO 1902 </p></dd> 1903<dt><span class="term">Extractor Complexity</span></dt> 1904<dd><p> 1905 O(N), when N is <code class="computeroutput"><span class="identifier">density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 1906 </p></dd> 1907</dl> 1908</div> 1909<p> 1910 <span class="bold"><strong>Header</strong></span> 1911 </p> 1912<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.density_hpp" title="Header <boost/accumulators/statistics/density.hpp>">boost/accumulators/statistics/density.hpp</a></code><span class="special">></span> 1913</pre> 1914<p> 1915 <span class="bold"><strong>Note</strong></span> 1916 </p> 1917<p> 1918 Results from the <code class="computeroutput"><span class="identifier">density</span></code> 1919 accumulator can only be extracted after the number of samples meets or 1920 exceeds the cache size. 1921 </p> 1922<p> 1923 <span class="bold"><strong>See also</strong></span> 1924 </p> 1925<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1926<li class="listitem"> 1927 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/density_impl.html" title="Struct template density_impl">density_impl</a></code> 1928 </li> 1929<li class="listitem"> 1930 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 1931 </li> 1932<li class="listitem"> 1933 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.min" title="min"><code class="literal">min</code></a> 1934 </li> 1935<li class="listitem"> 1936 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.max" title="max"><code class="literal">max</code></a> 1937 </li> 1938</ul></div> 1939</div> 1940<div class="section"> 1941<div class="titlepage"><div><div><h4 class="title"> 1942<a name="accumulators.user_s_guide.the_statistical_accumulators_library.error_of_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.error_of_mean" title="error_of<mean>">error_of<mean></a> 1943</h4></div></div></div> 1944<p> 1945 The <code class="computeroutput"><span class="identifier">error_of</span><span class="special"><</span><span class="identifier">mean</span><span class="special">></span></code> 1946 feature calculates the error of the mean feature. It is equal to <code class="computeroutput"><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">variance</span> <span class="special">/</span> 1947 <span class="special">(</span><span class="identifier">count</span> 1948 <span class="special">-</span> <span class="number">1</span><span class="special">))</span></code>. 1949 </p> 1950<div class="variablelist"> 1951<p class="title"><b></b></p> 1952<dl class="variablelist"> 1953<dt><span class="term">Result Type</span></dt> 1954<dd> 1955<p> 1956</p> 1957<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 1958</pre> 1959<p> 1960 </p> 1961</dd> 1962<dt><span class="term">Depends On</span></dt> 1963<dd><p> 1964 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">variance</span></code> 1965 </p></dd> 1966<dt><span class="term">Variants</span></dt> 1967<dd><p> 1968 <code class="computeroutput"><span class="identifier">error_of</span><span class="special"><</span><span class="identifier">immediate_mean</span><span class="special">></span></code> 1969 </p></dd> 1970<dt><span class="term">Initialization Parameters</span></dt> 1971<dd><p> 1972 <span class="emphasis"><em>none</em></span> 1973 </p></dd> 1974<dt><span class="term">Accumulator Parameters</span></dt> 1975<dd><p> 1976 <span class="emphasis"><em>none</em></span> 1977 </p></dd> 1978<dt><span class="term">Extractor Parameters</span></dt> 1979<dd><p> 1980 <span class="emphasis"><em>none</em></span> 1981 </p></dd> 1982<dt><span class="term">Accumulator Complexity</span></dt> 1983<dd><p> 1984 TODO 1985 </p></dd> 1986<dt><span class="term">Extractor Complexity</span></dt> 1987<dd><p> 1988 O(1) 1989 </p></dd> 1990</dl> 1991</div> 1992<p> 1993 <span class="bold"><strong>Header</strong></span> 1994 </p> 1995<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.error_of_hpp" title="Header <boost/accumulators/statistics/error_of.hpp>">boost/accumulators/statistics/error_of.hpp</a></code><span class="special">></span> 1996<span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.error_of_mean_hpp" title="Header <boost/accumulators/statistics/error_of_mean.hpp>">boost/accumulators/statistics/error_of_mean.hpp</a></code><span class="special">></span> 1997</pre> 1998<p> 1999 <span class="bold"><strong>Example</strong></span> 2000 </p> 2001<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">error_of</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2002<span class="identifier">acc</span><span class="special">(</span><span class="number">1.1</span><span class="special">);</span> 2003<span class="identifier">acc</span><span class="special">(</span><span class="number">1.2</span><span class="special">);</span> 2004<span class="identifier">acc</span><span class="special">(</span><span class="number">1.3</span><span class="special">);</span> 2005<span class="identifier">assert</span><span class="special">(</span><span class="number">0.057735</span> <span class="special">==</span> <span class="identifier">error_of</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">));</span> 2006</pre> 2007<p> 2008 <span class="bold"><strong>See also</strong></span> 2009 </p> 2010<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2011<li class="listitem"> 2012 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/error_of_mean_impl.html" title="Struct template error_of_mean_impl">error_of_mean_impl</a></code> 2013 </li> 2014<li class="listitem"> 2015 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2016 </li> 2017<li class="listitem"> 2018 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.variance" title="variance and variants"><code class="literal">variance</code></a> 2019 </li> 2020</ul></div> 2021</div> 2022<div class="section"> 2023<div class="titlepage"><div><div><h4 class="title"> 2024<a name="accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square" title="extended_p_square">extended_p_square</a> 2025</h4></div></div></div> 2026<p> 2027 Multiple quantile estimation with the extended <code class="literal">P^2</code> algorithm. 2028 For further details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/extended_p_square_impl.html" title="Struct template extended_p_square_impl">extended_p_square_impl</a></code>. 2029 </p> 2030<div class="variablelist"> 2031<p class="title"><b></b></p> 2032<dl class="variablelist"> 2033<dt><span class="term">Result Type</span></dt> 2034<dd> 2035<p> 2036</p> 2037<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 2038 <em class="replaceable"><code>implementation-defined</code></em> 2039<span class="special">></span> 2040</pre> 2041<p> 2042 </p> 2043</dd> 2044<dt><span class="term">Depends On</span></dt> 2045<dd><p> 2046 <code class="computeroutput"><span class="identifier">count</span></code> 2047 </p></dd> 2048<dt><span class="term">Variants</span></dt> 2049<dd><p> 2050 <span class="emphasis"><em>none</em></span> 2051 </p></dd> 2052<dt><span class="term">Initialization Parameters</span></dt> 2053<dd><p> 2054 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span></code> 2055 </p></dd> 2056<dt><span class="term">Accumulator Parameters</span></dt> 2057<dd><p> 2058 <span class="emphasis"><em>none</em></span> 2059 </p></dd> 2060<dt><span class="term">Extractor Parameters</span></dt> 2061<dd><p> 2062 <span class="emphasis"><em>none</em></span> 2063 </p></dd> 2064<dt><span class="term">Accumulator Complexity</span></dt> 2065<dd><p> 2066 TODO 2067 </p></dd> 2068<dt><span class="term">Extractor Complexity</span></dt> 2069<dd><p> 2070 O(1) 2071 </p></dd> 2072</dl> 2073</div> 2074<p> 2075 <span class="bold"><strong>Header</strong></span> 2076 </p> 2077<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.extended_p_square_hpp" title="Header <boost/accumulators/statistics/extended_p_square.hpp>">boost/accumulators/statistics/extended_p_square.hpp</a></code><span class="special">></span> 2078</pre> 2079<p> 2080 <span class="bold"><strong>Example</strong></span> 2081 </p> 2082<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">probs</span> <span class="special">=</span> <span class="special">{</span><span class="number">0.001</span><span class="special">,</span><span class="number">0.01</span><span class="special">,</span><span class="number">0.1</span><span class="special">,</span><span class="number">0.25</span><span class="special">,</span><span class="number">0.5</span><span class="special">,</span><span class="number">0.75</span><span class="special">,</span><span class="number">0.9</span><span class="special">,</span><span class="number">0.99</span><span class="special">,</span><span class="number">0.999</span><span class="special">};</span> 2083<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square</span><span class="special">></span> <span class="special">></span> 2084 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span> <span class="special">=</span> <span class="identifier">probs</span><span class="special">);</span> 2085 2086<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> <span class="comment">// a random number generator</span> 2087<span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">10000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2088 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">rng</span><span class="special">());</span> 2089 2090<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">extended_p_square</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)[</span><span class="number">0</span><span class="special">],</span> <span class="identifier">probs</span><span class="special">[</span><span class="number">0</span><span class="special">],</span> <span class="number">25</span><span class="special">);</span> 2091<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">extended_p_square</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)[</span><span class="number">1</span><span class="special">],</span> <span class="identifier">probs</span><span class="special">[</span><span class="number">1</span><span class="special">],</span> <span class="number">10</span><span class="special">);</span> 2092<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">extended_p_square</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)[</span><span class="number">2</span><span class="special">],</span> <span class="identifier">probs</span><span class="special">[</span><span class="number">2</span><span class="special">],</span> <span class="number">5</span><span class="special">);</span> 2093 2094<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">3</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">probs</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2095<span class="special">{</span> 2096 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">extended_p_square</span><span class="special">(</span><span class="identifier">acc</span><span class="special">)[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">probs</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="number">2</span><span class="special">);</span> 2097<span class="special">}</span> 2098</pre> 2099<p> 2100 <span class="bold"><strong>See also</strong></span> 2101 </p> 2102<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2103<li class="listitem"> 2104 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/extended_p_square_impl.html" title="Struct template extended_p_square_impl">extended_p_square_impl</a></code> 2105 </li> 2106<li class="listitem"> 2107 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2108 </li> 2109</ul></div> 2110</div> 2111<div class="section"> 2112<div class="titlepage"><div><div><h4 class="title"> 2113<a name="accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square_quantile" title="extended_p_square_quantile and variants">extended_p_square_quantile 2114 <span class="emphasis"><em>and variants</em></span></a> 2115</h4></div></div></div> 2116<p> 2117 Quantile estimation using the extended <code class="literal">P^2</code> algorithm 2118 for weighted and unweighted samples. By default, the calculation is linear 2119 and unweighted, but quadratic and weighted variants are also provided. 2120 For further implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/exte_1_3_2_6_3_59_1_1_22_6.html" title="Struct template extended_p_square_quantile_impl">extended_p_square_quantile_impl</a></code>. 2121 </p> 2122<p> 2123 All the variants share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">quantile</span></code> 2124 feature and can be extracted using the <code class="computeroutput"><span class="identifier">quantile</span><span class="special">()</span></code> extractor. 2125 </p> 2126<div class="variablelist"> 2127<p class="title"><b></b></p> 2128<dl class="variablelist"> 2129<dt><span class="term">Result Type</span></dt> 2130<dd> 2131<p> 2132</p> 2133<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2134</pre> 2135<p> 2136 </p> 2137</dd> 2138<dt><span class="term">Depends On</span></dt> 2139<dd><p> 2140 weighted variants depend on <code class="computeroutput"><span class="identifier">weighted_extended_p_square</span></code> 2141 <br> unweighted variants depend on <code class="computeroutput"><span class="identifier">extended_p_square</span></code> 2142 </p></dd> 2143<dt><span class="term">Variants</span></dt> 2144<dd><p> 2145 <code class="computeroutput"><span class="identifier">extended_p_square_quantile_quadratic</span></code> 2146 <br> <code class="computeroutput"><span class="identifier">weighted_extended_p_square_quantile</span></code> 2147 <br> <code class="computeroutput"><span class="identifier">weighted_extended_p_square_quantile_quadratic</span></code> 2148 </p></dd> 2149<dt><span class="term">Initialization Parameters</span></dt> 2150<dd><p> 2151 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span></code> 2152 </p></dd> 2153<dt><span class="term">Accumulator Parameters</span></dt> 2154<dd><p> 2155 <code class="computeroutput"><span class="identifier">weight</span></code> for the weighted 2156 variants 2157 </p></dd> 2158<dt><span class="term">Extractor Parameters</span></dt> 2159<dd><p> 2160 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 2161 </p></dd> 2162<dt><span class="term">Accumulator Complexity</span></dt> 2163<dd><p> 2164 TODO 2165 </p></dd> 2166<dt><span class="term">Extractor Complexity</span></dt> 2167<dd><p> 2168 O(N) where N is the count of probabilities. 2169 </p></dd> 2170</dl> 2171</div> 2172<p> 2173 <span class="bold"><strong>Header</strong></span> 2174 </p> 2175<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.extended_p_square_quantile_hpp" title="Header <boost/accumulators/statistics/extended_p_square_quantile.hpp>">boost/accumulators/statistics/extended_p_square_quantile.hpp</a></code><span class="special">></span> 2176</pre> 2177<p> 2178 <span class="bold"><strong>Example</strong></span> 2179 </p> 2180<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square_quantile</span><span class="special">></span> <span class="special">></span> 2181 <span class="identifier">accumulator_t</span><span class="special">;</span> 2182<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square_quantile</span><span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> 2183 <span class="identifier">accumulator_t_weighted</span><span class="special">;</span> 2184<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">extended_p_square_quantile</span><span class="special">(</span><span class="identifier">quadratic</span><span class="special">)></span> <span class="special">></span> 2185 <span class="identifier">accumulator_t_quadratic</span><span class="special">;</span> 2186<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square_quantile</span><span class="special">(</span><span class="identifier">quadratic</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> 2187 <span class="identifier">accumulator_t_weighted_quadratic</span><span class="special">;</span> 2188 2189<span class="comment">// tolerance</span> 2190<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 2191 2192<span class="comment">// a random number generator</span> 2193<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 2194 2195<span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">probs</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.990</span><span class="special">,</span> <span class="number">0.991</span><span class="special">,</span> <span class="number">0.992</span><span class="special">,</span> <span class="number">0.993</span><span class="special">,</span> <span class="number">0.994</span><span class="special">,</span> 2196 <span class="number">0.995</span><span class="special">,</span> <span class="number">0.996</span><span class="special">,</span> <span class="number">0.997</span><span class="special">,</span> <span class="number">0.998</span><span class="special">,</span> <span class="number">0.999</span> <span class="special">};</span> 2197<span class="identifier">accumulator_t</span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">extended_p_square_probabilities</span> <span class="special">=</span> <span class="identifier">probs</span><span class="special">);</span> 2198<span class="identifier">accumulator_t_weighted</span> <span class="identifier">acc_weighted</span><span class="special">(</span><span class="identifier">extended_p_square_probabilities</span> <span class="special">=</span> <span class="identifier">probs</span><span class="special">);</span> 2199<span class="identifier">accumulator_t_quadratic</span> <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">extended_p_square_probabilities</span> <span class="special">=</span> <span class="identifier">probs</span><span class="special">);</span> 2200<span class="identifier">accumulator_t_weighted_quadratic</span> <span class="identifier">acc_weighted2</span><span class="special">(</span><span class="identifier">extended_p_square_probabilities</span> <span class="special">=</span> <span class="identifier">probs</span><span class="special">);</span> 2201 2202<span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">10000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2203<span class="special">{</span> 2204 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 2205 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 2206 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 2207 <span class="identifier">acc_weighted</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 2208 <span class="identifier">acc_weighted2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 2209<span class="special">}</span> 2210 2211<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">probs</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2212<span class="special">{</span> 2213 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> 2214 <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span><span class="special">)</span> 2215 <span class="special">,</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span> 2216 <span class="special">,</span> <span class="identifier">epsilon</span> 2217 <span class="special">);</span> 2218 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> 2219 <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span><span class="special">)</span> 2220 <span class="special">,</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span> 2221 <span class="special">,</span> <span class="identifier">epsilon</span> 2222 <span class="special">);</span> 2223 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> 2224 <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc_weighted</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span><span class="special">)</span> 2225 <span class="special">,</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span> 2226 <span class="special">,</span> <span class="identifier">epsilon</span> 2227 <span class="special">);</span> 2228 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> 2229 <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc_weighted2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span><span class="special">)</span> 2230 <span class="special">,</span> <span class="number">0.99025</span> <span class="special">+</span> <span class="identifier">i</span><span class="special">*</span><span class="number">0.001</span> 2231 <span class="special">,</span> <span class="identifier">epsilon</span> 2232 <span class="special">);</span> 2233<span class="special">}</span> 2234</pre> 2235<p> 2236 <span class="bold"><strong>See also</strong></span> 2237 </p> 2238<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2239<li class="listitem"> 2240 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/exte_1_3_2_6_3_59_1_1_22_6.html" title="Struct template extended_p_square_quantile_impl">extended_p_square_quantile_impl</a></code> 2241 </li> 2242<li class="listitem"> 2243 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square" title="extended_p_square"><code class="literal">extended_p_square</code></a> 2244 </li> 2245<li class="listitem"> 2246 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_extended_p_square" title="weighted_extended_p_square"><code class="literal">weighted_extended_p_square</code></a> 2247 </li> 2248</ul></div> 2249</div> 2250<div class="section"> 2251<div class="titlepage"><div><div><h4 class="title"> 2252<a name="accumulators.user_s_guide.the_statistical_accumulators_library.kurtosis"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.kurtosis" title="kurtosis">kurtosis</a> 2253</h4></div></div></div> 2254<p> 2255 The kurtosis of a sample distribution is defined as the ratio of the 4th 2256 central moment and the square of the 2nd central moment (the variance) 2257 of the samples, minus 3. The term <code class="literal">-3</code> is added in order 2258 to ensure that the normal distribution has zero kurtosis. For more implementation 2259 details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/kurtosis_impl.html" title="Struct template kurtosis_impl">kurtosis_impl</a></code> 2260 </p> 2261<div class="variablelist"> 2262<p class="title"><b></b></p> 2263<dl class="variablelist"> 2264<dt><span class="term">Result Type</span></dt> 2265<dd> 2266<p> 2267</p> 2268<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>sample-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 2269</pre> 2270<p> 2271 </p> 2272</dd> 2273<dt><span class="term">Depends On</span></dt> 2274<dd><p> 2275 <code class="computeroutput"><span class="identifier">mean</span></code> <br> <code class="computeroutput"><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 2276 <br> <code class="computeroutput"><span class="identifier">moment</span><span class="special"><</span><span class="number">3</span><span class="special">></span></code> 2277 <br> <code class="computeroutput"><span class="identifier">moment</span><span class="special"><</span><span class="number">4</span><span class="special">></span></code> 2278 </p></dd> 2279<dt><span class="term">Variants</span></dt> 2280<dd><p> 2281 <span class="emphasis"><em>none</em></span> 2282 </p></dd> 2283<dt><span class="term">Initialization Parameters</span></dt> 2284<dd><p> 2285 <span class="emphasis"><em>none</em></span> 2286 </p></dd> 2287<dt><span class="term">Accumulator Parameters</span></dt> 2288<dd><p> 2289 <span class="emphasis"><em>none</em></span> 2290 </p></dd> 2291<dt><span class="term">Extractor Parameters</span></dt> 2292<dd><p> 2293 <span class="emphasis"><em>none</em></span> 2294 </p></dd> 2295<dt><span class="term">Accumulator Complexity</span></dt> 2296<dd><p> 2297 O(1) 2298 </p></dd> 2299<dt><span class="term">Extractor Complexity</span></dt> 2300<dd><p> 2301 O(1) 2302 </p></dd> 2303</dl> 2304</div> 2305<p> 2306 <span class="bold"><strong>Header</strong></span> 2307 </p> 2308<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.kurtosis_hpp" title="Header <boost/accumulators/statistics/kurtosis.hpp>">boost/accumulators/statistics/kurtosis.hpp</a></code><span class="special">></span> 2309</pre> 2310<p> 2311 <span class="bold"><strong>Example</strong></span> 2312 </p> 2313<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">kurtosis</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2314 2315<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 2316<span class="identifier">acc</span><span class="special">(</span><span class="number">7</span><span class="special">);</span> 2317<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 2318<span class="identifier">acc</span><span class="special">(</span><span class="number">9</span><span class="special">);</span> 2319<span class="identifier">acc</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 2320 2321<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">5</span> <span class="special">);</span> 2322<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">159.</span><span class="special">/</span><span class="number">5.</span> <span class="special">);</span> 2323<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">3</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1171.</span><span class="special">/</span><span class="number">5.</span> <span class="special">);</span> 2324<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">4</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1863</span> <span class="special">);</span> 2325<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">kurtosis</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">-</span><span class="number">1.39965397924</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 2326</pre> 2327<p> 2328 <span class="bold"><strong>See also</strong></span> 2329 </p> 2330<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2331<li class="listitem"> 2332 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/kurtosis_impl.html" title="Struct template kurtosis_impl">kurtosis_impl</a></code> 2333 </li> 2334<li class="listitem"> 2335 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean" title="mean and variants"><code class="literal">mean</code></a> 2336 </li> 2337<li class="listitem"> 2338 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.moment" title="moment"><code class="literal">moment</code></a> 2339 </li> 2340</ul></div> 2341</div> 2342<div class="section"> 2343<div class="titlepage"><div><div><h4 class="title"> 2344<a name="accumulators.user_s_guide.the_statistical_accumulators_library.max"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.max" title="max">max</a> 2345</h4></div></div></div> 2346<p> 2347 Calculates the maximum value of all the samples. 2348 </p> 2349<div class="variablelist"> 2350<p class="title"><b></b></p> 2351<dl class="variablelist"> 2352<dt><span class="term">Result Type</span></dt> 2353<dd> 2354<p> 2355</p> 2356<pre class="programlisting"><em class="replaceable"><code>sample-type</code></em> 2357</pre> 2358<p> 2359 </p> 2360</dd> 2361<dt><span class="term">Depends On</span></dt> 2362<dd><p> 2363 <span class="emphasis"><em>none</em></span> 2364 </p></dd> 2365<dt><span class="term">Variants</span></dt> 2366<dd><p> 2367 <span class="emphasis"><em>none</em></span> 2368 </p></dd> 2369<dt><span class="term">Initialization Parameters</span></dt> 2370<dd><p> 2371 <span class="emphasis"><em>none</em></span> 2372 </p></dd> 2373<dt><span class="term">Accumulator Parameters</span></dt> 2374<dd><p> 2375 <span class="emphasis"><em>none</em></span> 2376 </p></dd> 2377<dt><span class="term">Extractor Parameters</span></dt> 2378<dd><p> 2379 <span class="emphasis"><em>none</em></span> 2380 </p></dd> 2381<dt><span class="term">Accumulator Complexity</span></dt> 2382<dd><p> 2383 O(1) 2384 </p></dd> 2385<dt><span class="term">Extractor Complexity</span></dt> 2386<dd><p> 2387 O(1) 2388 </p></dd> 2389</dl> 2390</div> 2391<p> 2392 <span class="bold"><strong>Header</strong></span> 2393 </p> 2394<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.max_hpp" title="Header <boost/accumulators/statistics/max.hpp>">boost/accumulators/statistics/max.hpp</a></code><span class="special">></span> 2395</pre> 2396<p> 2397 <span class="bold"><strong>Example</strong></span> 2398 </p> 2399<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">max</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2400 2401<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 2402<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="special">(</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2403 2404<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> 2405<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="special">(</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2406 2407<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 2408<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="special">(</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2409</pre> 2410<p> 2411 <span class="bold"><strong>See also</strong></span> 2412 </p> 2413<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 2414 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/max_impl.html" title="Struct template max_impl">max_impl</a></code> 2415 </li></ul></div> 2416</div> 2417<div class="section"> 2418<div class="titlepage"><div><div><h4 class="title"> 2419<a name="accumulators.user_s_guide.the_statistical_accumulators_library.mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean" title="mean and variants">mean 2420 <span class="emphasis"><em>and variants</em></span></a> 2421</h4></div></div></div> 2422<p> 2423 Calculates the mean of samples, weights or variates. The calculation is 2424 either lazy (in the result extractor), or immediate (in the accumulator). 2425 The lazy implementation is the default. For more implementation details, 2426 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/mean_impl.html" title="Struct template mean_impl">mean_impl</a></code> 2427 or. <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immediate_mean_impl.html" title="Struct template immediate_mean_impl">immediate_mean_impl</a></code> 2428 </p> 2429<div class="variablelist"> 2430<p class="title"><b></b></p> 2431<dl class="variablelist"> 2432<dt><span class="term">Result Type</span></dt> 2433<dd><p> 2434 For samples, <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span></code> <br> For weights, 2435 <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>weight-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span></code> 2436 <br> For variates, <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span></code> 2437 </p></dd> 2438<dt><span class="term">Depends On</span></dt> 2439<dd><p> 2440 <code class="computeroutput"><span class="identifier">count</span></code> <br> The 2441 lazy mean of samples depends on <code class="computeroutput"><span class="identifier">sum</span></code> 2442 <br> The lazy mean of weights depends on <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 2443 <br> The lazy mean of variates depends on <code class="computeroutput"><span class="identifier">sum_of_variates</span><span class="special"><></span></code> 2444 </p></dd> 2445<dt><span class="term">Variants</span></dt> 2446<dd><p> 2447 <code class="computeroutput"><span class="identifier">mean_of_weights</span></code> 2448 <br> <code class="computeroutput"><span class="identifier">mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> <br> <code class="computeroutput"><span class="identifier">immediate_mean</span></code> 2449 <br> <code class="computeroutput"><span class="identifier">immediate_mean_of_weights</span></code> 2450 <br> <code class="computeroutput"><span class="identifier">immediate_mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 2451 </p></dd> 2452<dt><span class="term">Initialization Parameters</span></dt> 2453<dd><p> 2454 <span class="emphasis"><em>none</em></span> 2455 </p></dd> 2456<dt><span class="term">Accumulator Parameters</span></dt> 2457<dd><p> 2458 <span class="emphasis"><em>none</em></span> 2459 </p></dd> 2460<dt><span class="term">Extractor Parameters</span></dt> 2461<dd><p> 2462 <span class="emphasis"><em>none</em></span> 2463 </p></dd> 2464<dt><span class="term">Accumulator Complexity</span></dt> 2465<dd><p> 2466 O(1) 2467 </p></dd> 2468<dt><span class="term">Extractor Complexity</span></dt> 2469<dd><p> 2470 O(1) 2471 </p></dd> 2472</dl> 2473</div> 2474<p> 2475 <span class="bold"><strong>Header</strong></span> 2476 </p> 2477<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.mean_hpp" title="Header <boost/accumulators/statistics/mean.hpp>">boost/accumulators/statistics/mean.hpp</a></code><span class="special">></span> 2478</pre> 2479<p> 2480 <span class="bold"><strong>Example</strong></span> 2481 </p> 2482<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span> 2483 <span class="keyword">int</span> 2484 <span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 2485 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span> 2486 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean_of_weights</span> 2487 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> 2488 <span class="special">></span> 2489 <span class="special">,</span> <span class="keyword">int</span> 2490<span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2491 2492<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 2493<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2494<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2495<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2496<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2497<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2498 2499<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 2500<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">0.33333333333333333</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2501<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2502<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2503<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2504<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.5</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2505 2506<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">8</span><span class="special">);</span> 2507<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.33333333333333333</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2508<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2509<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">20</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 2510<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2511<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2512 2513<span class="identifier">accumulator_set</span><span class="special"><</span> 2514 <span class="keyword">int</span> 2515 <span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 2516 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span> 2517 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span> 2518 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">immediate</span><span class="special">)</span> 2519 <span class="special">></span> 2520 <span class="special">,</span> <span class="keyword">int</span> 2521<span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 2522 2523<span class="identifier">acc2</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 2524<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2525<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 2526<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2527<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2528 2529<span class="identifier">acc2</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 2530<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">0.33333333333333333</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2531<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 2532<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2533<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.5</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2534 2535<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">8</span><span class="special">);</span> 2536<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.33333333333333333</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2537<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 2538<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="identifier">mean_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2539<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">)),</span> <span class="number">1e-5</span><span class="special">);</span> 2540</pre> 2541<p> 2542 <span class="bold"><strong>See also</strong></span> 2543 </p> 2544<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2545<li class="listitem"> 2546 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/mean_impl.html" title="Struct template mean_impl">mean_impl</a></code> 2547 </li> 2548<li class="listitem"> 2549 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immediate_mean_impl.html" title="Struct template immediate_mean_impl">immediate_mean_impl</a></code> 2550 </li> 2551<li class="listitem"> 2552 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2553 </li> 2554<li class="listitem"> 2555 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 2556 </li> 2557</ul></div> 2558</div> 2559<div class="section"> 2560<div class="titlepage"><div><div><h4 class="title"> 2561<a name="accumulators.user_s_guide.the_statistical_accumulators_library.median"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.median" title="median and variants">median 2562 <span class="emphasis"><em>and variants</em></span></a> 2563</h4></div></div></div> 2564<p> 2565 Median estimation based on the <code class="literal">P^2</code> quantile estimator, 2566 the density estimator, or the <code class="literal">P^2</code> cumulative distribution 2567 estimator. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/median_impl.html" title="Struct template median_impl">median_impl</a></code>, 2568 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/with_density_median_impl.html" title="Struct template with_density_median_impl">with_density_median_impl</a></code>, 2569 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wit_1_3_2_6_3_59_1_1_22_56.html" title="Struct template with_p_square_cumulative_distribution_median_impl">with_p_square_cumulative_distribution_median_impl</a></code>. 2570 </p> 2571<p> 2572 The three median accumulators all satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">median</span></code> 2573 feature, and can all be extracted with the <code class="computeroutput"><span class="identifier">median</span><span class="special">()</span></code> extractor. 2574 </p> 2575<div class="variablelist"> 2576<p class="title"><b></b></p> 2577<dl class="variablelist"> 2578<dt><span class="term">Result Type</span></dt> 2579<dd> 2580<p> 2581</p> 2582<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2583</pre> 2584<p> 2585 </p> 2586</dd> 2587<dt><span class="term">Depends On</span></dt> 2588<dd><p> 2589 <code class="computeroutput"><span class="identifier">median</span></code> depends on 2590 <code class="computeroutput"><span class="identifier">p_square_quantile_for_median</span></code> 2591 <br> <code class="computeroutput"><span class="identifier">with_density_median</span></code> 2592 depends on <code class="computeroutput"><span class="identifier">count</span></code> 2593 and <code class="computeroutput"><span class="identifier">density</span></code> <br> 2594 <code class="computeroutput"><span class="identifier">with_p_square_cumulative_distribution_median</span></code> 2595 depends on <code class="computeroutput"><span class="identifier">p_square_cumulative_distribution</span></code> 2596 </p></dd> 2597<dt><span class="term">Variants</span></dt> 2598<dd><p> 2599 <code class="computeroutput"><span class="identifier">with_density_median</span></code> 2600 <br> <code class="computeroutput"><span class="identifier">with_p_square_cumulative_distribution_median</span></code> 2601 </p></dd> 2602<dt><span class="term">Initialization Parameters</span></dt> 2603<dd><p> 2604 <code class="computeroutput"><span class="identifier">with_density_median</span></code> 2605 requires <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">density</span><span class="special">::</span><span class="identifier">cache_size</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 2606 <br> <code class="computeroutput"><span class="identifier">with_p_square_cumulative_distribution_median</span></code> 2607 requires <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span></code> 2608 </p></dd> 2609<dt><span class="term">Accumulator Parameters</span></dt> 2610<dd><p> 2611 <span class="emphasis"><em>none</em></span> 2612 </p></dd> 2613<dt><span class="term">Extractor Parameters</span></dt> 2614<dd><p> 2615 <span class="emphasis"><em>none</em></span> 2616 </p></dd> 2617<dt><span class="term">Accumulator Complexity</span></dt> 2618<dd><p> 2619 TODO 2620 </p></dd> 2621<dt><span class="term">Extractor Complexity</span></dt> 2622<dd><p> 2623 TODO 2624 </p></dd> 2625</dl> 2626</div> 2627<p> 2628 <span class="bold"><strong>Header</strong></span> 2629 </p> 2630<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.median_hpp" title="Header <boost/accumulators/statistics/median.hpp>">boost/accumulators/statistics/median.hpp</a></code><span class="special">></span> 2631</pre> 2632<p> 2633 <span class="bold"><strong>Example</strong></span> 2634 </p> 2635<pre class="programlisting"><span class="comment">// two random number generators</span> 2636<span class="keyword">double</span> <span class="identifier">mu</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> 2637<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 2638<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma</span><span class="special">(</span><span class="identifier">mu</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 2639<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> 2640 <span class="identifier">normal</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma</span><span class="special">);</span> 2641 2642<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">median</span><span class="special">(</span><span class="identifier">with_p_square_quantile</span><span class="special">)</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2643<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">median</span><span class="special">(</span><span class="identifier">with_density</span><span class="special">)</span> <span class="special">></span> <span class="special">></span> 2644 <span class="identifier">acc_dens</span><span class="special">(</span> <span class="identifier">density_cache_size</span> <span class="special">=</span> <span class="number">10000</span><span class="special">,</span> <span class="identifier">density_num_bins</span> <span class="special">=</span> <span class="number">1000</span> <span class="special">);</span> 2645<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">median</span><span class="special">(</span><span class="identifier">with_p_square_cumulative_distribution</span><span class="special">)</span> <span class="special">></span> <span class="special">></span> 2646 <span class="identifier">acc_cdist</span><span class="special">(</span> <span class="identifier">p_square_cumulative_distribution_num_cells</span> <span class="special">=</span> <span class="number">100</span> <span class="special">);</span> 2647 2648<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2649<span class="special">{</span> 2650 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">();</span> 2651 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 2652 <span class="identifier">acc_dens</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 2653 <span class="identifier">acc_cdist</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 2654<span class="special">}</span> 2655 2656<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">median</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1.</span><span class="special">);</span> 2657<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">median</span><span class="special">(</span><span class="identifier">acc_dens</span><span class="special">),</span> <span class="number">1.</span><span class="special">);</span> 2658<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">median</span><span class="special">(</span><span class="identifier">acc_cdist</span><span class="special">),</span> <span class="number">3.</span><span class="special">);</span> 2659</pre> 2660<p> 2661 <span class="bold"><strong>See also</strong></span> 2662 </p> 2663<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2664<li class="listitem"> 2665 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/median_impl.html" title="Struct template median_impl">median_impl</a></code> 2666 </li> 2667<li class="listitem"> 2668 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/with_density_median_impl.html" title="Struct template with_density_median_impl">with_density_median_impl</a></code> 2669 </li> 2670<li class="listitem"> 2671 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wit_1_3_2_6_3_59_1_1_22_56.html" title="Struct template with_p_square_cumulative_distribution_median_impl">with_p_square_cumulative_distribution_median_impl</a></code> 2672 </li> 2673<li class="listitem"> 2674 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2675 </li> 2676<li class="listitem"> 2677 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_quantile" title="p_square_quantile and variants"><code class="literal">p_square_quantile</code></a> 2678 </li> 2679<li class="listitem"> 2680 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_cumulative_distribution" title="p_square_cumulative_distribution"><code class="literal">p_square_cumulative_distribution</code></a> 2681 </li> 2682</ul></div> 2683</div> 2684<div class="section"> 2685<div class="titlepage"><div><div><h4 class="title"> 2686<a name="accumulators.user_s_guide.the_statistical_accumulators_library.min"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.min" title="min">min</a> 2687</h4></div></div></div> 2688<p> 2689 Calculates the minimum value of all the samples. 2690 </p> 2691<div class="variablelist"> 2692<p class="title"><b></b></p> 2693<dl class="variablelist"> 2694<dt><span class="term">Result Type</span></dt> 2695<dd> 2696<p> 2697</p> 2698<pre class="programlisting"><em class="replaceable"><code>sample-type</code></em> 2699</pre> 2700<p> 2701 </p> 2702</dd> 2703<dt><span class="term">Depends On</span></dt> 2704<dd><p> 2705 <span class="emphasis"><em>none</em></span> 2706 </p></dd> 2707<dt><span class="term">Variants</span></dt> 2708<dd><p> 2709 <span class="emphasis"><em>none</em></span> 2710 </p></dd> 2711<dt><span class="term">Initialization Parameters</span></dt> 2712<dd><p> 2713 <span class="emphasis"><em>none</em></span> 2714 </p></dd> 2715<dt><span class="term">Accumulator Parameters</span></dt> 2716<dd><p> 2717 <span class="emphasis"><em>none</em></span> 2718 </p></dd> 2719<dt><span class="term">Extractor Parameters</span></dt> 2720<dd><p> 2721 <span class="emphasis"><em>none</em></span> 2722 </p></dd> 2723<dt><span class="term">Accumulator Complexity</span></dt> 2724<dd><p> 2725 O(1) 2726 </p></dd> 2727<dt><span class="term">Extractor Complexity</span></dt> 2728<dd><p> 2729 O(1) 2730 </p></dd> 2731</dl> 2732</div> 2733<p> 2734 <span class="bold"><strong>Header</strong></span> 2735 </p> 2736<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.min_hpp" title="Header <boost/accumulators/statistics/min.hpp>">boost/accumulators/statistics/min.hpp</a></code><span class="special">></span> 2737</pre> 2738<p> 2739 <span class="bold"><strong>Example</strong></span> 2740 </p> 2741<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">min</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 2742 2743<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 2744<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="special">(</span><span class="identifier">min</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2745 2746<span class="identifier">acc</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> 2747<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="special">(</span><span class="identifier">min</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2748 2749<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 2750<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="special">(</span><span class="identifier">min</span><span class="special">)(</span><span class="identifier">acc</span><span class="special">));</span> 2751</pre> 2752<p> 2753 <span class="bold"><strong>See also</strong></span> 2754 </p> 2755<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 2756 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/min_impl.html" title="Struct template min_impl">min_impl</a></code> 2757 </li></ul></div> 2758</div> 2759<div class="section"> 2760<div class="titlepage"><div><div><h4 class="title"> 2761<a name="accumulators.user_s_guide.the_statistical_accumulators_library.moment"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.moment" title="moment">moment</a> 2762</h4></div></div></div> 2763<p> 2764 Calculates the N-th moment of the samples, which is defined as the sum 2765 of the N-th power of the samples over the count of samples. 2766 </p> 2767<div class="variablelist"> 2768<p class="title"><b></b></p> 2769<dl class="variablelist"> 2770<dt><span class="term">Result Type</span></dt> 2771<dd> 2772<p> 2773</p> 2774<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2775</pre> 2776<p> 2777 </p> 2778</dd> 2779<dt><span class="term">Depends On</span></dt> 2780<dd><p> 2781 <code class="computeroutput"><span class="identifier">count</span></code> 2782 </p></dd> 2783<dt><span class="term">Variants</span></dt> 2784<dd><p> 2785 <span class="emphasis"><em>none</em></span> 2786 </p></dd> 2787<dt><span class="term">Initialization Parameters</span></dt> 2788<dd><p> 2789 <span class="emphasis"><em>none</em></span> 2790 </p></dd> 2791<dt><span class="term">Accumulator Parameters</span></dt> 2792<dd><p> 2793 <span class="emphasis"><em>none</em></span> 2794 </p></dd> 2795<dt><span class="term">Extractor Parameters</span></dt> 2796<dd><p> 2797 <span class="emphasis"><em>none</em></span> 2798 </p></dd> 2799<dt><span class="term">Accumulator Complexity</span></dt> 2800<dd><p> 2801 O(1) 2802 </p></dd> 2803<dt><span class="term">Extractor Complexity</span></dt> 2804<dd><p> 2805 O(1) 2806 </p></dd> 2807</dl> 2808</div> 2809<p> 2810 <span class="bold"><strong>Header</strong></span> 2811 </p> 2812<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.moment_hpp" title="Header <boost/accumulators/statistics/moment.hpp>">boost/accumulators/statistics/moment.hpp</a></code><span class="special">></span> 2813</pre> 2814<p> 2815 <span class="bold"><strong>Example</strong></span> 2816 </p> 2817<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc1</span><span class="special">;</span> 2818 2819<span class="identifier">acc1</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> <span class="comment">// 4</span> 2820<span class="identifier">acc1</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> <span class="comment">// 16</span> 2821<span class="identifier">acc1</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> <span class="comment">// + 25</span> 2822 <span class="comment">// = 45 / 3 = 15</span> 2823 2824<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">15.</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2825 2826<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">5</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 2827 2828<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> <span class="comment">// 32</span> 2829<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> <span class="comment">// 243</span> 2830<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> <span class="comment">// 1024</span> 2831<span class="identifier">acc2</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> <span class="comment">// + 3125</span> 2832 <span class="comment">// = 4424 / 4 = 1106</span> 2833 2834<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1106.</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">5</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 2835</pre> 2836<p> 2837 <span class="bold"><strong>See also</strong></span> 2838 </p> 2839<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2840<li class="listitem"> 2841 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/moment_impl.html" title="Struct template moment_impl">moment_impl</a></code> 2842 </li> 2843<li class="listitem"> 2844 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2845 </li> 2846</ul></div> 2847</div> 2848<div class="section"> 2849<div class="titlepage"><div><div><h4 class="title"> 2850<a name="accumulators.user_s_guide.the_statistical_accumulators_library.p_square_cumulative_distribution"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_cumulative_distribution" title="p_square_cumulative_distribution">p_square_cumulative_distribution</a> 2851</h4></div></div></div> 2852<p> 2853 Histogram calculation of the cumulative distribution with the <code class="literal">P^2</code> 2854 algorithm. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/p_s_1_3_2_6_3_59_1_1_22_19.html" title="Struct template p_square_cumulative_distribution_impl">p_square_cumulative_distribution_impl</a></code> 2855 </p> 2856<div class="variablelist"> 2857<p class="title"><b></b></p> 2858<dl class="variablelist"> 2859<dt><span class="term">Result Type</span></dt> 2860<dd> 2861<p> 2862</p> 2863<pre class="programlisting"><span class="identifier">iterator_range</span><span class="special"><</span> 2864 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> 2865 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span> 2866 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2867 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2868 <span class="special">></span> 2869 <span class="special">>::</span><span class="identifier">iterator</span> 2870<span class="special">></span> 2871</pre> 2872<p> 2873 </p> 2874</dd> 2875<dt><span class="term">Depends On</span></dt> 2876<dd><p> 2877 <code class="computeroutput"><span class="identifier">count</span></code> 2878 </p></dd> 2879<dt><span class="term">Variants</span></dt> 2880<dd><p> 2881 <span class="emphasis"><em>none</em></span> 2882 </p></dd> 2883<dt><span class="term">Initialization Parameters</span></dt> 2884<dd><p> 2885 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span></code> 2886 </p></dd> 2887<dt><span class="term">Accumulator Parameters</span></dt> 2888<dd><p> 2889 <span class="emphasis"><em>none</em></span> 2890 </p></dd> 2891<dt><span class="term">Extractor Parameters</span></dt> 2892<dd><p> 2893 <span class="emphasis"><em>none</em></span> 2894 </p></dd> 2895<dt><span class="term">Accumulator Complexity</span></dt> 2896<dd><p> 2897 TODO 2898 </p></dd> 2899<dt><span class="term">Extractor Complexity</span></dt> 2900<dd><p> 2901 O(N) where N is <code class="computeroutput"><span class="identifier">num_cells</span></code> 2902 </p></dd> 2903</dl> 2904</div> 2905<p> 2906 <span class="bold"><strong>Header</strong></span> 2907 </p> 2908<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.p_square_cumul_dist_hpp" title="Header <boost/accumulators/statistics/p_square_cumul_dist.hpp>">boost/accumulators/statistics/p_square_cumul_dist.hpp</a></code><span class="special">></span> 2909</pre> 2910<p> 2911 <span class="bold"><strong>Example</strong></span> 2912 </p> 2913<pre class="programlisting"><span class="comment">// tolerance in %</span> 2914<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> 2915 2916<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">p_square_cumulative_distribution</span><span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t</span><span class="special">;</span> 2917 2918<span class="identifier">accumulator_t</span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span> <span class="special">=</span> <span class="number">100</span><span class="special">);</span> 2919 2920<span class="comment">// two random number generators</span> 2921<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 2922<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 2923<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma</span><span class="special">);</span> 2924 2925<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2926<span class="special">{</span> 2927 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">normal</span><span class="special">());</span> 2928<span class="special">}</span> 2929 2930<span class="keyword">typedef</span> <span class="identifier">iterator_range</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">></span> <span class="special">>::</span><span class="identifier">iterator</span> <span class="special">></span> <span class="identifier">histogram_type</span><span class="special">;</span> 2931<span class="identifier">histogram_type</span> <span class="identifier">histogram</span> <span class="special">=</span> <span class="identifier">p_square_cumulative_distribution</span><span class="special">(</span><span class="identifier">acc</span><span class="special">);</span> 2932 2933<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">histogram</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 2934<span class="special">{</span> 2935 <span class="comment">// problem with small results: epsilon is relative (in percent), not absolute!</span> 2936 <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">histogram</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span> <span class="special">></span> <span class="number">0.001</span> <span class="special">)</span> 2937 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="number">1.0</span> <span class="special">+</span> <span class="identifier">erf</span><span class="special">(</span> <span class="identifier">histogram</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">first</span> <span class="special">/</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="number">2.0</span><span class="special">)</span> <span class="special">)),</span> <span class="identifier">histogram</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 2938<span class="special">}</span> 2939</pre> 2940<p> 2941 <span class="bold"><strong>See also</strong></span> 2942 </p> 2943<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2944<li class="listitem"> 2945 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/p_s_1_3_2_6_3_59_1_1_22_19.html" title="Struct template p_square_cumulative_distribution_impl">p_square_cumulative_distribution_impl</a></code> 2946 </li> 2947<li class="listitem"> 2948 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 2949 </li> 2950</ul></div> 2951</div> 2952<div class="section"> 2953<div class="titlepage"><div><div><h4 class="title"> 2954<a name="accumulators.user_s_guide.the_statistical_accumulators_library.p_square_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.p_square_quantile" title="p_square_quantile and variants">p_square_quantile 2955 <span class="emphasis"><em>and variants</em></span></a> 2956</h4></div></div></div> 2957<p> 2958 Single quantile estimation with the <code class="literal">P^2</code> algorithm. For 2959 more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/p_square_quantile_impl.html" title="Struct template p_square_quantile_impl">p_square_quantile_impl</a></code> 2960 </p> 2961<div class="variablelist"> 2962<p class="title"><b></b></p> 2963<dl class="variablelist"> 2964<dt><span class="term">Result Type</span></dt> 2965<dd> 2966<p> 2967</p> 2968<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 2969</pre> 2970<p> 2971 </p> 2972</dd> 2973<dt><span class="term">Depends On</span></dt> 2974<dd><p> 2975 <code class="computeroutput"><span class="identifier">count</span></code> 2976 </p></dd> 2977<dt><span class="term">Variants</span></dt> 2978<dd><p> 2979 <code class="computeroutput"><span class="identifier">p_square_quantile_for_median</span></code> 2980 </p></dd> 2981<dt><span class="term">Initialization Parameters</span></dt> 2982<dd><p> 2983 <code class="computeroutput"><span class="identifier">quantile_probability</span></code>, 2984 which defaults to <code class="computeroutput"><span class="number">0.5</span></code>. 2985 (Note: for <code class="computeroutput"><span class="identifier">p_square_quantile_for_median</span></code>, 2986 the <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 2987 parameter is ignored and is always <code class="computeroutput"><span class="number">0.5</span></code>.) 2988 </p></dd> 2989<dt><span class="term">Accumulator Parameters</span></dt> 2990<dd><p> 2991 <span class="emphasis"><em>none</em></span> 2992 </p></dd> 2993<dt><span class="term">Extractor Parameters</span></dt> 2994<dd><p> 2995 <span class="emphasis"><em>none</em></span> 2996 </p></dd> 2997<dt><span class="term">Accumulator Complexity</span></dt> 2998<dd><p> 2999 TODO 3000 </p></dd> 3001<dt><span class="term">Extractor Complexity</span></dt> 3002<dd><p> 3003 O(1) 3004 </p></dd> 3005</dl> 3006</div> 3007<p> 3008 <span class="bold"><strong>Header</strong></span> 3009 </p> 3010<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.p_square_quantile_hpp" title="Header <boost/accumulators/statistics/p_square_quantile.hpp>">boost/accumulators/statistics/p_square_quantile.hpp</a></code><span class="special">></span> 3011</pre> 3012<p> 3013 <span class="bold"><strong>Example</strong></span> 3014 </p> 3015<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">p_square_quantile</span><span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t</span><span class="special">;</span> 3016 3017<span class="comment">// tolerance in %</span> 3018<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 3019 3020<span class="comment">// a random number generator</span> 3021<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 3022 3023<span class="identifier">accumulator_t</span> <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">);</span> 3024<span class="identifier">accumulator_t</span> <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.01</span> <span class="special">);</span> 3025<span class="identifier">accumulator_t</span> <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span> <span class="special">);</span> 3026<span class="identifier">accumulator_t</span> <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.25</span> <span class="special">);</span> 3027<span class="identifier">accumulator_t</span> <span class="identifier">acc4</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.5</span> <span class="special">);</span> 3028<span class="identifier">accumulator_t</span> <span class="identifier">acc5</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.75</span> <span class="special">);</span> 3029<span class="identifier">accumulator_t</span> <span class="identifier">acc6</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span> <span class="special">);</span> 3030<span class="identifier">accumulator_t</span> <span class="identifier">acc7</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99</span> <span class="special">);</span> 3031<span class="identifier">accumulator_t</span> <span class="identifier">acc8</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">);</span> 3032 3033<span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 3034<span class="special">{</span> 3035 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 3036 <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3037 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3038 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3039 <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3040 <span class="identifier">acc4</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3041 <span class="identifier">acc5</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3042 <span class="identifier">acc6</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3043 <span class="identifier">acc7</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3044 <span class="identifier">acc8</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3045<span class="special">}</span> 3046 3047<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">),</span> <span class="number">0.001</span><span class="special">,</span> <span class="number">15</span><span class="special">*</span><span class="identifier">epsilon</span> <span class="special">);</span> 3048<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">0.01</span> <span class="special">,</span> <span class="number">5</span><span class="special">*</span><span class="identifier">epsilon</span> <span class="special">);</span> 3049<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">0.1</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3050<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">),</span> <span class="number">0.25</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3051<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">),</span> <span class="number">0.5</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3052<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc5</span><span class="special">),</span> <span class="number">0.75</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3053<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc6</span><span class="special">),</span> <span class="number">0.9</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3054<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc7</span><span class="special">),</span> <span class="number">0.99</span> <span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3055<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">p_square_quantile</span><span class="special">(</span><span class="identifier">acc8</span><span class="special">),</span> <span class="number">0.999</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3056</pre> 3057<p> 3058 <span class="bold"><strong>See also</strong></span> 3059 </p> 3060<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3061<li class="listitem"> 3062 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/p_square_quantile_impl.html" title="Struct template p_square_quantile_impl">p_square_quantile_impl</a></code> 3063 </li> 3064<li class="listitem"> 3065 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 3066 </li> 3067</ul></div> 3068</div> 3069<div class="section"> 3070<div class="titlepage"><div><div><h4 class="title"> 3071<a name="accumulators.user_s_guide.the_statistical_accumulators_library.peaks_over_threshold"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.peaks_over_threshold" title="peaks_over_threshold and variants">peaks_over_threshold 3072 <span class="emphasis"><em>and variants</em></span></a> 3073</h4></div></div></div> 3074<p> 3075 Peaks Over Threshold method for quantile and tail mean estimation. For 3076 implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/peaks_over_threshold_impl.html" title="Struct template peaks_over_threshold_impl">peaks_over_threshold_impl</a></code> 3077 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pea_1_3_2_6_3_59_1_1_22_21.html" title="Struct template peaks_over_threshold_prob_impl">peaks_over_threshold_prob_impl</a></code>. 3078 </p> 3079<p> 3080 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special"><></span></code> 3081 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_peaks_over_threshold</span></code> feature, 3082 and can be extracted with the <code class="computeroutput"><span class="identifier">peaks_over_threshold</span><span class="special">()</span></code> extractor. The result is a 3-tuple representing 3083 the fit parameters <code class="computeroutput"><span class="identifier">u_bar</span></code>, 3084 <code class="computeroutput"><span class="identifier">beta_bar</span></code> and <code class="computeroutput"><span class="identifier">xi_hat</span></code>. 3085 </p> 3086<div class="variablelist"> 3087<p class="title"><b></b></p> 3088<dl class="variablelist"> 3089<dt><span class="term">Result Type</span></dt> 3090<dd> 3091<p> 3092</p> 3093<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special"><</span> 3094 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> <span class="comment">// u_bar</span> 3095 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> <span class="comment">// beta_bar</span> 3096 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> <span class="comment">// xi_hat</span> 3097<span class="special">></span> 3098</pre> 3099<p> 3100 </p> 3101</dd> 3102<dt><span class="term">Depends On</span></dt> 3103<dd><p> 3104 <code class="computeroutput"><span class="identifier">count</span></code> <br> In addition, 3105 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special"><></span></code> 3106 depends on <code class="computeroutput"><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3107 </p></dd> 3108<dt><span class="term">Variants</span></dt> 3109<dd><p> 3110 <code class="computeroutput"><span class="identifier">peaks_over_threshold_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3111 </p></dd> 3112<dt><span class="term">Initialization Parameters</span></dt> 3113<dd><p> 3114 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 3115 </p></dd> 3116<dt><span class="term">Accumulator Parameters</span></dt> 3117<dd><p> 3118 <span class="emphasis"><em>none</em></span> 3119 </p></dd> 3120<dt><span class="term">Extractor Parameters</span></dt> 3121<dd><p> 3122 <span class="emphasis"><em>none</em></span> 3123 </p></dd> 3124<dt><span class="term">Accumulator Complexity</span></dt> 3125<dd><p> 3126 TODO 3127 </p></dd> 3128<dt><span class="term">Extractor Complexity</span></dt> 3129<dd><p> 3130 TODO 3131 </p></dd> 3132</dl> 3133</div> 3134<p> 3135 <span class="bold"><strong>Header</strong></span> 3136 </p> 3137<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.peaks_over_threshold_hpp" title="Header <boost/accumulators/statistics/peaks_over_threshold.hpp>">boost/accumulators/statistics/peaks_over_threshold.hpp</a></code><span class="special">></span> 3138</pre> 3139<p> 3140 <span class="bold"><strong>Example</strong></span> 3141 </p> 3142<p> 3143 See example for <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile" title="pot_quantile and variants"><code class="literal">pot_quantile</code></a>. 3144 </p> 3145<p> 3146 <span class="bold"><strong>See also</strong></span> 3147 </p> 3148<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3149<li class="listitem"> 3150 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/peaks_over_threshold_impl.html" title="Struct template peaks_over_threshold_impl">peaks_over_threshold_impl</a></code> 3151 </li> 3152<li class="listitem"> 3153 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pea_1_3_2_6_3_59_1_1_22_21.html" title="Struct template peaks_over_threshold_prob_impl">peaks_over_threshold_prob_impl</a></code> 3154 </li> 3155<li class="listitem"> 3156 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 3157 </li> 3158<li class="listitem"> 3159 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 3160 </li> 3161<li class="listitem"> 3162 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile" title="pot_quantile and variants"><code class="literal">pot_quantile</code></a> 3163 </li> 3164<li class="listitem"> 3165 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_tail_mean" title="pot_tail_mean"><code class="literal">pot_tail_mean</code></a> 3166 </li> 3167</ul></div> 3168</div> 3169<div class="section"> 3170<div class="titlepage"><div><div><h4 class="title"> 3171<a name="accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile" title="pot_quantile and variants">pot_quantile 3172 <span class="emphasis"><em>and variants</em></span></a> 3173</h4></div></div></div> 3174<p> 3175 Quantile estimation based on Peaks over Threshold method (for both left 3176 and right tails). For implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pot_quantile_impl.html" title="Struct template pot_quantile_impl">pot_quantile_impl</a></code>. 3177 </p> 3178<p> 3179 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3180 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">quantile</span></code> feature and can be extracted 3181 using the <code class="computeroutput"><span class="identifier">quantile</span><span class="special">()</span></code> 3182 extractor. 3183 </p> 3184<div class="variablelist"> 3185<p class="title"><b></b></p> 3186<dl class="variablelist"> 3187<dt><span class="term">Result Type</span></dt> 3188<dd> 3189<p> 3190</p> 3191<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 3192</pre> 3193<p> 3194 </p> 3195</dd> 3196<dt><span class="term">Depends On</span></dt> 3197<dd><p> 3198 <code class="computeroutput"><span class="identifier">pot_quantile</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> depends on <code class="computeroutput"><span class="identifier">peaks_over_threshold</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3199 <br> <code class="computeroutput"><span class="identifier">pot_quantile_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3200 depends on <code class="computeroutput"><span class="identifier">peaks_over_threshold_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3201 </p></dd> 3202<dt><span class="term">Variants</span></dt> 3203<dd><p> 3204 <code class="computeroutput"><span class="identifier">pot_quantile_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3205 </p></dd> 3206<dt><span class="term">Initialization Parameters</span></dt> 3207<dd><p> 3208 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 3209 </p></dd> 3210<dt><span class="term">Accumulator Parameters</span></dt> 3211<dd><p> 3212 <span class="emphasis"><em>none</em></span> 3213 </p></dd> 3214<dt><span class="term">Extractor Parameters</span></dt> 3215<dd><p> 3216 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 3217 </p></dd> 3218<dt><span class="term">Accumulator Complexity</span></dt> 3219<dd><p> 3220 TODO 3221 </p></dd> 3222<dt><span class="term">Extractor Complexity</span></dt> 3223<dd><p> 3224 TODO 3225 </p></dd> 3226</dl> 3227</div> 3228<p> 3229 <span class="bold"><strong>Header</strong></span> 3230 </p> 3231<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.pot_quantile_hpp" title="Header <boost/accumulators/statistics/pot_quantile.hpp>">boost/accumulators/statistics/pot_quantile.hpp</a></code><span class="special">></span> 3232</pre> 3233<p> 3234 <span class="bold"><strong>Example</strong></span> 3235 </p> 3236<pre class="programlisting"><span class="comment">// tolerance in %</span> 3237<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> 3238 3239<span class="keyword">double</span> <span class="identifier">alpha</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">;</span> 3240<span class="keyword">double</span> <span class="identifier">threshold_probability</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">;</span> 3241<span class="keyword">double</span> <span class="identifier">threshold</span> <span class="special">=</span> <span class="number">3.</span><span class="special">;</span> 3242 3243<span class="comment">// two random number generators</span> 3244<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 3245<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 3246<span class="identifier">boost</span><span class="special">::</span><span class="identifier">exponential_distribution</span><span class="special"><></span> <span class="identifier">lambda</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3247<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma</span><span class="special">);</span> 3248<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">exponential_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">exponential</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">lambda</span><span class="special">);</span> 3249 3250<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">>(</span><span class="identifier">with_threshold_value</span><span class="special">)></span> <span class="special">></span> <span class="identifier">acc1</span><span class="special">(</span> 3251 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span> <span class="special">=</span> <span class="identifier">threshold</span> 3252<span class="special">);</span> 3253<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">>(</span><span class="identifier">with_threshold_probability</span><span class="special">)></span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">(</span> 3254 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">2000</span> 3255 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span> <span class="special">=</span> <span class="identifier">threshold_probability</span> 3256<span class="special">);</span> 3257 3258<span class="identifier">threshold_probability</span> <span class="special">=</span> <span class="number">0.995</span><span class="special">;</span> 3259<span class="identifier">threshold</span> <span class="special">=</span> <span class="number">5.</span><span class="special">;</span> 3260 3261<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">>(</span><span class="identifier">with_threshold_value</span><span class="special">)></span> <span class="special">></span> <span class="identifier">acc3</span><span class="special">(</span> 3262 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span> <span class="special">=</span> <span class="identifier">threshold</span> 3263<span class="special">);</span> 3264<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">>(</span><span class="identifier">with_threshold_probability</span><span class="special">)></span> <span class="special">></span> <span class="identifier">acc4</span><span class="special">(</span> 3265 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">2000</span> 3266 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span> <span class="special">=</span> <span class="identifier">threshold_probability</span> 3267<span class="special">);</span> 3268 3269<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 3270<span class="special">{</span> 3271 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">();</span> 3272 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3273 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3274<span class="special">}</span> 3275 3276<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 3277<span class="special">{</span> 3278 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">exponential</span><span class="special">();</span> 3279 <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3280 <span class="identifier">acc4</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 3281<span class="special">}</span> 3282 3283<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="identifier">alpha</span><span class="special">),</span> <span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3284<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="identifier">alpha</span><span class="special">),</span> <span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3285 3286<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="identifier">alpha</span><span class="special">),</span> <span class="number">6.908</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3287<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="identifier">alpha</span><span class="special">),</span> <span class="number">6.908</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 3288</pre> 3289<p> 3290 <span class="bold"><strong>See also</strong></span> 3291 </p> 3292<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3293<li class="listitem"> 3294 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pot_quantile_impl.html" title="Struct template pot_quantile_impl">pot_quantile_impl</a></code> 3295 </li> 3296<li class="listitem"> 3297 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.peaks_over_threshold" title="peaks_over_threshold and variants"><code class="literal">peaks_over_threshold</code></a> 3298 </li> 3299</ul></div> 3300</div> 3301<div class="section"> 3302<div class="titlepage"><div><div><h4 class="title"> 3303<a name="accumulators.user_s_guide.the_statistical_accumulators_library.pot_tail_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_tail_mean" title="pot_tail_mean">pot_tail_mean</a> 3304</h4></div></div></div> 3305<p> 3306 Estimation of the (coherent) tail mean based on the peaks over threshold 3307 method (for both left and right tails). For implementation details, see 3308 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pot_tail_mean_impl.html" title="Struct template pot_tail_mean_impl">pot_tail_mean_impl</a></code>. 3309 </p> 3310<p> 3311 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_tail_mean</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">pot_tail_mean_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3312 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_mean</span></code> feature and can be extracted 3313 using the <code class="computeroutput"><span class="identifier">tail_mean</span><span class="special">()</span></code> 3314 extractor. 3315 </p> 3316<div class="variablelist"> 3317<p class="title"><b></b></p> 3318<dl class="variablelist"> 3319<dt><span class="term">Result Type</span></dt> 3320<dd> 3321<p> 3322</p> 3323<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 3324</pre> 3325<p> 3326 </p> 3327</dd> 3328<dt><span class="term">Depends On</span></dt> 3329<dd><p> 3330 <code class="computeroutput"><span class="identifier">pot_tail_mean</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> depends on <code class="computeroutput"><span class="identifier">peaks_over_threshold</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3331 and <code class="computeroutput"><span class="identifier">pot_quantile</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3332 <br> <code class="computeroutput"><span class="identifier">pot_tail_mean_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3333 depends on <code class="computeroutput"><span class="identifier">peaks_over_threshold_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3334 and <code class="computeroutput"><span class="identifier">pot_quantile_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3335 </p></dd> 3336<dt><span class="term">Variants</span></dt> 3337<dd><p> 3338 <code class="computeroutput"><span class="identifier">pot_tail_mean_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 3339 </p></dd> 3340<dt><span class="term">Initialization Parameters</span></dt> 3341<dd><p> 3342 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 3343 </p></dd> 3344<dt><span class="term">Accumulator Parameters</span></dt> 3345<dd><p> 3346 <span class="emphasis"><em>none</em></span> 3347 </p></dd> 3348<dt><span class="term">Extractor Parameters</span></dt> 3349<dd><p> 3350 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 3351 </p></dd> 3352<dt><span class="term">Accumulator Complexity</span></dt> 3353<dd><p> 3354 TODO 3355 </p></dd> 3356<dt><span class="term">Extractor Complexity</span></dt> 3357<dd><p> 3358 TODO 3359 </p></dd> 3360</dl> 3361</div> 3362<p> 3363 <span class="bold"><strong>Header</strong></span> 3364 </p> 3365<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.pot_tail_mean_hpp" title="Header <boost/accumulators/statistics/pot_tail_mean.hpp>">boost/accumulators/statistics/pot_tail_mean.hpp</a></code><span class="special">></span> 3366</pre> 3367<p> 3368 <span class="bold"><strong>Example</strong></span> 3369 </p> 3370<pre class="programlisting"><span class="comment">// TODO</span> 3371</pre> 3372<p> 3373 <span class="bold"><strong>See also</strong></span> 3374 </p> 3375<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3376<li class="listitem"> 3377 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/pot_tail_mean_impl.html" title="Struct template pot_tail_mean_impl">pot_tail_mean_impl</a></code> 3378 </li> 3379<li class="listitem"> 3380 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.peaks_over_threshold" title="peaks_over_threshold and variants"><code class="literal">peaks_over_threshold</code></a> 3381 </li> 3382<li class="listitem"> 3383 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile" title="pot_quantile and variants"><code class="literal">pot_quantile</code></a> 3384 </li> 3385</ul></div> 3386</div> 3387<div class="section"> 3388<div class="titlepage"><div><div><h4 class="title"> 3389<a name="accumulators.user_s_guide.the_statistical_accumulators_library.rolling_count"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_count" title="rolling_count">rolling_count</a> 3390</h4></div></div></div> 3391<p> 3392 The rolling count is the current number of elements in the rolling window. 3393 </p> 3394<div class="variablelist"> 3395<p class="title"><b></b></p> 3396<dl class="variablelist"> 3397<dt><span class="term">Result Type</span></dt> 3398<dd> 3399<p> 3400</p> 3401<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></pre> 3402<p> 3403 </p> 3404</dd> 3405<dt><span class="term">Depends On</span></dt> 3406<dd><p> 3407 <code class="computeroutput"><span class="identifier">rolling_window_plus1</span></code> 3408 </p></dd> 3409<dt><span class="term">Variants</span></dt> 3410<dd><p> 3411 <span class="emphasis"><em>none</em></span> 3412 </p></dd> 3413<dt><span class="term">Initialization Parameters</span></dt> 3414<dd><p> 3415 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span></code> 3416 </p></dd> 3417<dt><span class="term">Accumulator Parameters</span></dt> 3418<dd><p> 3419 <span class="emphasis"><em>none</em></span> 3420 </p></dd> 3421<dt><span class="term">Extractor Parameters</span></dt> 3422<dd><p> 3423 <span class="emphasis"><em>none</em></span> 3424 </p></dd> 3425<dt><span class="term">Accumulator Complexity</span></dt> 3426<dd><p> 3427 O(1) 3428 </p></dd> 3429<dt><span class="term">Extractor Complexity</span></dt> 3430<dd><p> 3431 O(1) 3432 </p></dd> 3433</dl> 3434</div> 3435<p> 3436 <span class="bold"><strong>Header</strong></span> 3437 </p> 3438<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.rolling_count_hpp" title="Header <boost/accumulators/statistics/rolling_count.hpp>">boost/accumulators/statistics/rolling_count.hpp</a></code><span class="special">></span> 3439</pre> 3440<p> 3441 <span class="bold"><strong>Example</strong></span> 3442 </p> 3443<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_count</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 3444 3445<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3446 3447<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3448<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3449 3450<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3451<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3452 3453<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3454<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3455 3456<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3457<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3458 3459<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3460<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3u</span><span class="special">,</span> <span class="identifier">rolling_count</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3461</pre> 3462<p> 3463 <span class="bold"><strong>See also</strong></span> 3464 </p> 3465<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 3466 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/rolling_count_impl.html" title="Struct template rolling_count_impl">rolling_count_impl</a></code> 3467 </li></ul></div> 3468</div> 3469<div class="section"> 3470<div class="titlepage"><div><div><h4 class="title"> 3471<a name="accumulators.user_s_guide.the_statistical_accumulators_library.rolling_sum"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_sum" title="rolling_sum">rolling_sum</a> 3472</h4></div></div></div> 3473<p> 3474 The rolling sum is the sum of the last <span class="emphasis"><em>N</em></span> samples. 3475 </p> 3476<div class="variablelist"> 3477<p class="title"><b></b></p> 3478<dl class="variablelist"> 3479<dt><span class="term">Result Type</span></dt> 3480<dd> 3481<p> 3482</p> 3483<pre class="programlisting"><em class="replaceable"><code>sample-type</code></em></pre> 3484<p> 3485 </p> 3486</dd> 3487<dt><span class="term">Depends On</span></dt> 3488<dd><p> 3489 <code class="computeroutput"><span class="identifier">rolling_window_plus1</span></code> 3490 </p></dd> 3491<dt><span class="term">Variants</span></dt> 3492<dd><p> 3493 <span class="emphasis"><em>none</em></span> 3494 </p></dd> 3495<dt><span class="term">Initialization Parameters</span></dt> 3496<dd><p> 3497 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span></code> 3498 </p></dd> 3499<dt><span class="term">Accumulator Parameters</span></dt> 3500<dd><p> 3501 <span class="emphasis"><em>none</em></span> 3502 </p></dd> 3503<dt><span class="term">Extractor Parameters</span></dt> 3504<dd><p> 3505 <span class="emphasis"><em>none</em></span> 3506 </p></dd> 3507<dt><span class="term">Accumulator Complexity</span></dt> 3508<dd><p> 3509 O(1) 3510 </p></dd> 3511<dt><span class="term">Extractor Complexity</span></dt> 3512<dd><p> 3513 O(1) 3514 </p></dd> 3515</dl> 3516</div> 3517<p> 3518 <span class="bold"><strong>Header</strong></span> 3519 </p> 3520<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.rolling_sum_hpp" title="Header <boost/accumulators/statistics/rolling_sum.hpp>">boost/accumulators/statistics/rolling_sum.hpp</a></code><span class="special">></span> 3521</pre> 3522<p> 3523 <span class="bold"><strong>Example</strong></span> 3524 </p> 3525<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_sum</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 3526 3527<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3528 3529<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3530<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3531 3532<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 3533<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3534 3535<span class="identifier">acc</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 3536<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3537 3538<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 3539<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3540 3541<span class="identifier">acc</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> 3542<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">12</span><span class="special">,</span> <span class="identifier">rolling_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 3543</pre> 3544<p> 3545 <span class="bold"><strong>See also</strong></span> 3546 </p> 3547<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 3548 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/rolling_sum_impl.html" title="Struct template rolling_sum_impl">rolling_sum_impl</a></code> 3549 </li></ul></div> 3550</div> 3551<div class="section"> 3552<div class="titlepage"><div><div><h4 class="title"> 3553<a name="accumulators.user_s_guide.the_statistical_accumulators_library.rolling_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_mean" title="rolling_mean">rolling_mean</a> 3554</h4></div></div></div> 3555<p> 3556 The rolling mean is the mean over the last <span class="emphasis"><em>N</em></span> samples. 3557 It is computed by dividing the rolling sum by the rolling count. 3558 </p> 3559<p> 3560 Lazy or iterative calculation of the mean over the last <span class="emphasis"><em>N</em></span> 3561 samples. The lazy calculation is associated with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_rolling_mean</span></code> 3562 feature, and the iterative calculation (which is the default) with the 3563 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">immediate_rolling_mean</span></code> feature. Both 3564 can be extracted using the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_mean</span><span class="special">()</span></code> extractor. For more implementation details, 3565 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_rolling_mean_impl.html" title="Struct template lazy_rolling_mean_impl">lazy_rolling_mean_impl</a></code> 3566 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immed_1_3_2_6_3_23_1_1_6_1.html" title="Struct template immediate_rolling_mean_impl">immediate_rolling_mean_impl</a></code> 3567 </p> 3568<div class="variablelist"> 3569<p class="title"><b></b></p> 3570<dl class="variablelist"> 3571<dt><span class="term">Result Type</span></dt> 3572<dd> 3573<p> 3574</p> 3575<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 3576</pre> 3577<p> 3578 </p> 3579</dd> 3580<dt><span class="term">Depends On</span></dt> 3581<dd><p> 3582 <code class="computeroutput"><span class="identifier">lazy_rolling_mean</span></code> 3583 depends on <code class="computeroutput"><span class="identifier">rolling_sum</span></code> 3584 and <code class="computeroutput"><span class="identifier">rolling_count</span></code> 3585 <br> <code class="computeroutput"><span class="identifier">immediate_rolling_mean</span></code> 3586 depends on <code class="computeroutput"><span class="identifier">rolling_count</span></code> 3587 </p></dd> 3588<dt><span class="term">Variants</span></dt> 3589<dd><p> 3590 <code class="computeroutput"><span class="identifier">lazy_rolling_mean</span></code> 3591 (a.k.a. <code class="computeroutput"><span class="identifier">rolling_mean</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">))</span></code> <br> <code class="computeroutput"><span class="identifier">immediate_rolling_mean</span></code> 3592 (a.k.a. <code class="computeroutput"><span class="identifier">rolling_mean</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span></code>) 3593 </p></dd> 3594<dt><span class="term">Initialization Parameters</span></dt> 3595<dd><p> 3596 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span></code> 3597 </p></dd> 3598<dt><span class="term">Accumulator Parameters</span></dt> 3599<dd><p> 3600 <span class="emphasis"><em>none</em></span> 3601 </p></dd> 3602<dt><span class="term">Extractor Parameters</span></dt> 3603<dd><p> 3604 <span class="emphasis"><em>none</em></span> 3605 </p></dd> 3606<dt><span class="term">Accumulator Complexity</span></dt> 3607<dd><p> 3608 O(1) 3609 </p></dd> 3610<dt><span class="term">Extractor Complexity</span></dt> 3611<dd><p> 3612 O(1) 3613 </p></dd> 3614</dl> 3615</div> 3616<p> 3617 <span class="bold"><strong>Header</strong></span> 3618 </p> 3619<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.rolling_mean_hpp" title="Header <boost/accumulators/statistics/rolling_mean.hpp>">boost/accumulators/statistics/rolling_mean.hpp</a></code><span class="special">></span> 3620</pre> 3621<p> 3622 <span class="bold"><strong>Example</strong></span> 3623 </p> 3624<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_mean</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span> <span class="special">=</span> <span class="number">5</span><span class="special">);</span> 3625 3626<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 3627<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 3628<span class="identifier">acc</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 3629 3630<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">2.0</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 3631 3632<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 3633<span class="identifier">acc</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> 3634<span class="identifier">acc</span><span class="special">(</span><span class="number">6</span><span class="special">);</span> 3635<span class="identifier">acc</span><span class="special">(</span><span class="number">7</span><span class="special">);</span> 3636 3637<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">5.0</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 3638</pre> 3639<p> 3640 <span class="bold"><strong>See also</strong></span> 3641 </p> 3642<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3643<li class="listitem"> 3644 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_rolling_mean_impl.html" title="Struct template lazy_rolling_mean_impl">lazy_rolling_mean_impl</a></code> 3645 </li> 3646<li class="listitem"> 3647 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immed_1_3_2_6_3_23_1_1_6_1.html" title="Struct template immediate_rolling_mean_impl">immediate_rolling_mean_impl</a></code> 3648 </li> 3649<li class="listitem"> 3650 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_count" title="rolling_count"><code class="literal">rolling_count</code></a> 3651 </li> 3652<li class="listitem"> 3653 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_sum" title="rolling_sum"><code class="literal">rolling_sum</code></a> 3654 </li> 3655</ul></div> 3656</div> 3657<div class="section"> 3658<div class="titlepage"><div><div><h4 class="title"> 3659<a name="accumulators.user_s_guide.the_statistical_accumulators_library.rolling_moment"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_moment" title="rolling_moment">rolling_moment</a> 3660</h4></div></div></div> 3661<p> 3662 rolling_moment<M> calculates the <span class="emphasis"><em>M</em></span>-th moment 3663 of the samples, which is defined as the sum of the <span class="emphasis"><em>M</em></span>-th 3664 power of the samples over the count of samples, over the last <span class="emphasis"><em>N</em></span> 3665 samples. 3666 </p> 3667<div class="variablelist"> 3668<p class="title"><b></b></p> 3669<dl class="variablelist"> 3670<dt><span class="term">Result Type</span></dt> 3671<dd> 3672<p> 3673</p> 3674<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 3675</pre> 3676<p> 3677 </p> 3678</dd> 3679<dt><span class="term">Depends On</span></dt> 3680<dd><p> 3681 <span class="emphasis"><em>none</em></span> 3682 </p></dd> 3683<dt><span class="term">Variants</span></dt> 3684<dd><p> 3685 <span class="emphasis"><em>none</em></span> 3686 </p></dd> 3687<dt><span class="term">Initialization Parameters</span></dt> 3688<dd><p> 3689 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span></code> 3690 </p></dd> 3691<dt><span class="term">Accumulator Parameters</span></dt> 3692<dd><p> 3693 <span class="emphasis"><em>none</em></span> 3694 </p></dd> 3695<dt><span class="term">Extractor Parameters</span></dt> 3696<dd><p> 3697 <span class="emphasis"><em>none</em></span> 3698 </p></dd> 3699<dt><span class="term">Accumulator Complexity</span></dt> 3700<dd><p> 3701 O(1) 3702 </p></dd> 3703<dt><span class="term">Extractor Complexity</span></dt> 3704<dd><p> 3705 O(1) 3706 </p></dd> 3707</dl> 3708</div> 3709<p> 3710 <span class="bold"><strong>Header</strong></span> 3711 </p> 3712<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.rolling_moment_hpp" title="Header <boost/accumulators/statistics/rolling_moment.hpp>">boost/accumulators/statistics/rolling_moment.hpp</a></code><span class="special">></span> 3713</pre> 3714<p> 3715 <span class="bold"><strong>Example</strong></span> 3716 </p> 3717<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 3718 3719<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 3720<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 3721 3722<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">(</span><span class="number">4.0</span> <span class="special">+</span> <span class="number">16.0</span><span class="special">)/</span><span class="number">2</span><span class="special">,</span> <span class="number">1e-5</span> <span class="special">);</span> 3723 3724<span class="identifier">acc</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> 3725<span class="identifier">acc</span><span class="special">(</span><span class="number">6</span><span class="special">);</span> 3726 3727<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">(</span><span class="number">16.0</span> <span class="special">+</span> <span class="number">25.0</span> <span class="special">+</span> <span class="number">36.0</span><span class="special">)/</span><span class="number">3</span><span class="special">,</span> <span class="number">1e-5</span> <span class="special">);</span> 3728</pre> 3729<p> 3730 <span class="bold"><strong>See also</strong></span> 3731 </p> 3732<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 3733 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/rolling_moment_impl.html" title="Struct template rolling_moment_impl">rolling_moment_impl</a></code> 3734 </li></ul></div> 3735</div> 3736<div class="section"> 3737<div class="titlepage"><div><div><h4 class="title"> 3738<a name="accumulators.user_s_guide.the_statistical_accumulators_library.rolling_variance"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_variance" title="rolling_variance">rolling_variance</a> 3739</h4></div></div></div> 3740<p> 3741 Lazy or iterative calculation of the variance over the last <span class="emphasis"><em>N</em></span> 3742 samples. The lazy calculation is associated with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_rolling_variance</span></code> 3743 feature, and the iterative calculation with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">immediate_rolling_variance</span></code> 3744 feature. Both can be extracted using the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_variance</span><span class="special">()</span></code> extractor. For more implementation details, 3745 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_rolling_variance_impl.html" title="Struct template lazy_rolling_variance_impl">lazy_rolling_variance_impl</a></code> 3746 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immed_1_3_2_6_3_26_1_1_6_1.html" title="Struct template immediate_rolling_variance_impl">immediate_rolling_variance_impl</a></code> 3747 </p> 3748<div class="variablelist"> 3749<p class="title"><b></b></p> 3750<dl class="variablelist"> 3751<dt><span class="term">Result Type</span></dt> 3752<dd> 3753<p> 3754</p> 3755<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 3756</pre> 3757<p> 3758 </p> 3759</dd> 3760<dt><span class="term">Depends On</span></dt> 3761<dd><p> 3762 <code class="computeroutput"><span class="identifier">lazy_rolling_variance</span></code> 3763 depends on <code class="computeroutput"><span class="identifier">rolling_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code>, <code class="computeroutput"><span class="identifier">rolling_count</span></code> 3764 and <code class="computeroutput"><span class="identifier">rolling_mean</span></code> 3765 <br> <code class="computeroutput"><span class="identifier">immediate_rolling_variance</span></code> 3766 depends on <code class="computeroutput"><span class="identifier">rolling_count</span></code> 3767 and <code class="computeroutput"><span class="identifier">immediate_rolling_mean</span></code> 3768 </p></dd> 3769<dt><span class="term">Variants</span></dt> 3770<dd><p> 3771 <code class="computeroutput"><span class="identifier">lazy_rolling_variance</span></code> 3772 (a.k.a. <code class="computeroutput"><span class="identifier">rolling_variance</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">))</span></code> <br> <code class="computeroutput"><span class="identifier">immediate_rolling_variance</span></code> 3773 (a.k.a. <code class="computeroutput"><span class="identifier">rolling_variance</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span></code>) 3774 </p></dd> 3775<dt><span class="term">Initialization Parameters</span></dt> 3776<dd><p> 3777 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span></code> 3778 </p></dd> 3779<dt><span class="term">Accumulator Parameters</span></dt> 3780<dd><p> 3781 <span class="emphasis"><em>none</em></span> 3782 </p></dd> 3783<dt><span class="term">Extractor Parameters</span></dt> 3784<dd><p> 3785 <span class="emphasis"><em>none</em></span> 3786 </p></dd> 3787<dt><span class="term">Accumulator Complexity</span></dt> 3788<dd><p> 3789 O(1) 3790 </p></dd> 3791<dt><span class="term">Extractor Complexity</span></dt> 3792<dd><p> 3793 O(1) 3794 </p></dd> 3795</dl> 3796</div> 3797<p> 3798 <span class="bold"><strong>Header</strong></span> 3799 </p> 3800<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.rolling_variance_hpp" title="Header <boost/accumulators/statistics/rolling_variance.hpp>">boost/accumulators/statistics/rolling_variance.hpp</a></code><span class="special">></span> 3801</pre> 3802<p> 3803 <span class="bold"><strong>Example</strong></span> 3804 </p> 3805<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_variance</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">rolling_window</span><span class="special">::</span><span class="identifier">window_size</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 3806 3807<span class="identifier">acc</span><span class="special">(</span><span class="number">1.2</span><span class="special">);</span> 3808 3809<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_variance</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">0.0</span><span class="special">,</span> <span class="number">1e-10</span> <span class="special">);</span> <span class="comment">// variance is not defined for a single sample</span> 3810 3811<span class="identifier">acc</span><span class="special">(</span><span class="number">2.3</span><span class="special">);</span> 3812<span class="identifier">acc</span><span class="special">(</span><span class="number">3.4</span><span class="special">);</span> 3813 3814<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_variance</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1.21</span><span class="special">,</span> <span class="number">1e-10</span> <span class="special">);</span> <span class="comment">// variance over samples 1-3</span> 3815 3816<span class="identifier">acc</span><span class="special">(</span><span class="number">4.5</span><span class="special">);</span> 3817<span class="identifier">acc</span><span class="special">(</span><span class="number">0.4</span><span class="special">);</span> 3818<span class="identifier">acc</span><span class="special">(</span><span class="number">2.2</span><span class="special">);</span> 3819<span class="identifier">acc</span><span class="special">(</span><span class="number">7.1</span><span class="special">);</span> 3820 3821<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">rolling_variance</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">8.41666666666667</span><span class="special">,</span> <span class="number">1e-10</span> <span class="special">);</span> <span class="comment">// variance over samples 4-7</span> 3822</pre> 3823<p> 3824 <span class="bold"><strong>See also</strong></span> 3825 </p> 3826<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3827<li class="listitem"> 3828 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_rolling_variance_impl.html" title="Struct template lazy_rolling_variance_impl">lazy_rolling_variance_impl</a></code> 3829 </li> 3830<li class="listitem"> 3831 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/immed_1_3_2_6_3_26_1_1_6_1.html" title="Struct template immediate_rolling_variance_impl">immediate_rolling_variance_impl</a></code> 3832 </li> 3833<li class="listitem"> 3834 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_count" title="rolling_count"><code class="literal">rolling_count</code></a> 3835 </li> 3836<li class="listitem"> 3837 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_mean" title="rolling_mean"><code class="literal">rolling_mean</code></a> 3838 </li> 3839<li class="listitem"> 3840 <a class="link" href="../"><code class="literal">immediate_rolling_mean</code></a> 3841 </li> 3842<li class="listitem"> 3843 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.rolling_moment" title="rolling_moment"><code class="literal">rolling_moment</code></a> 3844 </li> 3845</ul></div> 3846</div> 3847<div class="section"> 3848<div class="titlepage"><div><div><h4 class="title"> 3849<a name="accumulators.user_s_guide.the_statistical_accumulators_library.skewness"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.skewness" title="skewness">skewness</a> 3850</h4></div></div></div> 3851<p> 3852 The skewness of a sample distribution is defined as the ratio of the 3rd 3853 central moment and the <code class="literal">3/2</code>-th power of the 2nd central 3854 moment (the variance) of the samples 3. For implementation details, see 3855 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/skewness_impl.html" title="Struct template skewness_impl">skewness_impl</a></code>. 3856 </p> 3857<div class="variablelist"> 3858<p class="title"><b></b></p> 3859<dl class="variablelist"> 3860<dt><span class="term">Result Type</span></dt> 3861<dd> 3862<p> 3863</p> 3864<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>sample-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 3865</pre> 3866<p> 3867 </p> 3868</dd> 3869<dt><span class="term">Depends On</span></dt> 3870<dd><p> 3871 <code class="computeroutput"><span class="identifier">mean</span></code> <br> <code class="computeroutput"><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 3872 <br> <code class="computeroutput"><span class="identifier">moment</span><span class="special"><</span><span class="number">3</span><span class="special">></span></code> 3873 </p></dd> 3874<dt><span class="term">Variants</span></dt> 3875<dd><p> 3876 <span class="emphasis"><em>none</em></span> 3877 </p></dd> 3878<dt><span class="term">Initialization Parameters</span></dt> 3879<dd><p> 3880 <span class="emphasis"><em>none</em></span> 3881 </p></dd> 3882<dt><span class="term">Accumulator Parameters</span></dt> 3883<dd><p> 3884 <span class="emphasis"><em>none</em></span> 3885 </p></dd> 3886<dt><span class="term">Extractor Parameters</span></dt> 3887<dd><p> 3888 <span class="emphasis"><em>none</em></span> 3889 </p></dd> 3890<dt><span class="term">Accumulator Complexity</span></dt> 3891<dd><p> 3892 O(1) 3893 </p></dd> 3894<dt><span class="term">Extractor Complexity</span></dt> 3895<dd><p> 3896 O(1) 3897 </p></dd> 3898</dl> 3899</div> 3900<p> 3901 <span class="bold"><strong>Header</strong></span> 3902 </p> 3903<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.skewness_hpp" title="Header <boost/accumulators/statistics/skewness.hpp>">boost/accumulators/statistics/skewness.hpp</a></code><span class="special">></span> 3904</pre> 3905<p> 3906 <span class="bold"><strong>Example</strong></span> 3907 </p> 3908<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">skewness</span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 3909 3910<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 3911<span class="identifier">acc2</span><span class="special">(</span><span class="number">7</span><span class="special">);</span> 3912<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 3913<span class="identifier">acc2</span><span class="special">(</span><span class="number">9</span><span class="special">);</span> 3914<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 3915 3916<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">5</span> <span class="special">);</span> 3917<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">159.</span><span class="special">/</span><span class="number">5.</span> <span class="special">);</span> 3918<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">3</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1171.</span><span class="special">/</span><span class="number">5.</span> <span class="special">);</span> 3919<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">skewness</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">0.406040288214</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 3920</pre> 3921<p> 3922 <span class="bold"><strong>See also</strong></span> 3923 </p> 3924<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3925<li class="listitem"> 3926 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/skewness_impl.html" title="Struct template skewness_impl">skewness_impl</a></code> 3927 </li> 3928<li class="listitem"> 3929 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean" title="mean and variants"><code class="literal">mean</code></a> 3930 </li> 3931<li class="listitem"> 3932 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.moment" title="moment"><code class="literal">moment</code></a> 3933 </li> 3934</ul></div> 3935</div> 3936<div class="section"> 3937<div class="titlepage"><div><div><h4 class="title"> 3938<a name="accumulators.user_s_guide.the_statistical_accumulators_library.sum"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants">sum 3939 <span class="emphasis"><em>and variants</em></span></a> 3940</h4></div></div></div> 3941<p> 3942 For summing the samples, weights or variates. The default implementation 3943 uses the standard sum operation, but variants using the Kahan summation 3944 algorithm are also provided. 3945 </p> 3946<div class="variablelist"> 3947<p class="title"><b></b></p> 3948<dl class="variablelist"> 3949<dt><span class="term">Result Type</span></dt> 3950<dd><p> 3951 <code class="computeroutput"><em class="replaceable"><code>sample-type</code></em></code> for summing samples <br> <code class="computeroutput"><em class="replaceable"><code>weight-type</code></em></code> for summing 3952 weights <br> <code class="computeroutput"><em class="replaceable"><code>variate-type</code></em></code> for summing variates 3953 </p></dd> 3954<dt><span class="term">Depends On</span></dt> 3955<dd><p> 3956 <span class="emphasis"><em>none</em></span> 3957 </p></dd> 3958<dt><span class="term">Variants</span></dt> 3959<dd><p> 3960 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_weights</span></code> 3961 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 3962 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_kahan</span></code> (a.k.a. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span><span class="special">(</span><span class="identifier">kahan</span><span class="special">)</span></code>) 3963 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_weights_kahan</span></code> (a.k.a. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">kahan</span><span class="special">)</span></code>) 3964 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_variates_kahan</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 3965 <br> 3966 </p></dd> 3967<dt><span class="term">Initialization Parameters</span></dt> 3968<dd><p> 3969 <span class="emphasis"><em>none</em></span> 3970 </p></dd> 3971<dt><span class="term">Accumulator Parameters</span></dt> 3972<dd><p> 3973 <code class="computeroutput"><span class="identifier">weight</span></code> for summing 3974 weights <br> <code class="computeroutput"><em class="replaceable"><code>variate-tag</code></em></code> for summing variates 3975 </p></dd> 3976<dt><span class="term">Extractor Parameters</span></dt> 3977<dd><p> 3978 <span class="emphasis"><em>none</em></span> 3979 </p></dd> 3980<dt><span class="term">Accumulator Complexity</span></dt> 3981<dd><p> 3982 O(1). Note that the Kahan sum performs four floating-point sum operations 3983 per accumulated value, whereas the naive sum performs only one. 3984 </p></dd> 3985<dt><span class="term">Extractor Complexity</span></dt> 3986<dd><p> 3987 O(1) 3988 </p></dd> 3989</dl> 3990</div> 3991<p> 3992 <span class="bold"><strong>Header</strong></span> 3993 </p> 3994<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.sum_hpp" title="Header <boost/accumulators/statistics/sum.hpp>">boost/accumulators/statistics/sum.hpp</a></code><span class="special">></span> 3995<span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.sum_kahan_hpp" title="Header <boost/accumulators/statistics/sum_kahan.hpp>">boost/accumulators/statistics/sum_kahan.hpp</a></code><span class="special">></span> 3996</pre> 3997<p> 3998 <span class="bold"><strong>Example</strong></span> 3999 </p> 4000<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span> 4001 <span class="keyword">int</span> 4002 <span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 4003 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum</span> 4004 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_weights</span> 4005 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> 4006 <span class="special">></span> 4007 <span class="special">,</span> <span class="keyword">int</span> 4008<span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 4009 4010<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 4011<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">// weighted sample = 1 * 2</span> 4012<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4013<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4014 4015<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">6</span><span class="special">);</span> 4016<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">10</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">// weighted sample = 2 * 4</span> 4017<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4018<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4019 4020<span class="identifier">acc</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">6</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">9</span><span class="special">);</span> 4021<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">28</span><span class="special">,</span> <span class="identifier">sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">// weighted sample = 3 * 6</span> 4022<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">12</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4023<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">18</span><span class="special">,</span> <span class="identifier">sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4024 4025<span class="comment">// demonstrate Kahan summation</span> 4026<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">float</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">sum_kahan</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 4027<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0.0f</span><span class="special">,</span> <span class="identifier">sum_kahan</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4028<span class="keyword">for</span> <span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">1e6</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span> 4029 <span class="identifier">acc</span><span class="special">(</span><span class="number">1e-6f</span><span class="special">);</span> 4030<span class="special">}</span> 4031<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1.0f</span><span class="special">,</span> <span class="identifier">sum_kahan</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 4032</pre> 4033<p> 4034 <span class="bold"><strong>See also</strong></span> 4035 </p> 4036<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4037<li class="listitem"> 4038 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/sum_impl.html" title="Struct template sum_impl">sum_impl</a></code> 4039 </li> 4040<li class="listitem"> 4041 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/sum_kahan_impl.html" title="Struct template sum_kahan_impl">sum_kahan_impl</a></code> 4042 </li> 4043</ul></div> 4044</div> 4045<div class="section"> 4046<div class="titlepage"><div><div><h4 class="title"> 4047<a name="accumulators.user_s_guide.the_statistical_accumulators_library.tail"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail">tail</a> 4048</h4></div></div></div> 4049<p> 4050 Tracks the largest or smallest <code class="literal">N</code> values. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code> 4051 tracks the largest <code class="literal">N</code>, and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code> tracks the smallest. The parameter 4052 <code class="literal">N</code> is specified with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> initialization parameter. 4053 For implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_impl.html" title="Struct template tail_impl">tail_impl</a></code>. 4054 </p> 4055<p> 4056 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code> 4057 and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code> 4058 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_tail</span></code> feature and can be extracted 4059 with the <code class="computeroutput"><span class="identifier">tail</span><span class="special">()</span></code> 4060 extractor. 4061 </p> 4062<div class="variablelist"> 4063<p class="title"><b></b></p> 4064<dl class="variablelist"> 4065<dt><span class="term">Result Type</span></dt> 4066<dd> 4067<p> 4068</p> 4069<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 4070 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special"><</span> 4071 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">permutation_iterator</span><span class="special"><</span> 4072 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">>::</span><span class="identifier">const_iterator</span> <span class="comment">// samples</span> 4073 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">iterator</span> <span class="comment">// indices</span> 4074 <span class="special">></span> 4075 <span class="special">></span> 4076<span class="special">></span> 4077</pre> 4078<p> 4079 </p> 4080</dd> 4081<dt><span class="term">Depends On</span></dt> 4082<dd><p> 4083 <span class="emphasis"><em>none</em></span> 4084 </p></dd> 4085<dt><span class="term">Variants</span></dt> 4086<dd><p> 4087 <code class="computeroutput"><span class="identifier">abstract_tail</span></code> 4088 </p></dd> 4089<dt><span class="term">Initialization Parameters</span></dt> 4090<dd><p> 4091 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4092 </p></dd> 4093<dt><span class="term">Accumulator Parameters</span></dt> 4094<dd><p> 4095 <span class="emphasis"><em>none</em></span> 4096 </p></dd> 4097<dt><span class="term">Extractor Parameters</span></dt> 4098<dd><p> 4099 <span class="emphasis"><em>none</em></span> 4100 </p></dd> 4101<dt><span class="term">Accumulator Complexity</span></dt> 4102<dd><p> 4103 O(log N), where N is the cache size 4104 </p></dd> 4105<dt><span class="term">Extractor Complexity</span></dt> 4106<dd><p> 4107 O(N log N), where N is the cache size 4108 </p></dd> 4109</dl> 4110</div> 4111<p> 4112 <span class="bold"><strong>Header</strong></span> 4113 </p> 4114<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_hpp" title="Header <boost/accumulators/statistics/tail.hpp>">boost/accumulators/statistics/tail.hpp</a></code><span class="special">></span> 4115</pre> 4116<p> 4117 <span class="bold"><strong>Example</strong></span> 4118 </p> 4119<p> 4120 See the Example for <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate" title="tail_variate"><code class="literal">tail_variate</code></a>. 4121 </p> 4122<p> 4123 <span class="bold"><strong>See also</strong></span> 4124 </p> 4125<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4126<li class="listitem"> 4127 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_impl.html" title="Struct template tail_impl">tail_impl</a></code> 4128 </li> 4129<li class="listitem"> 4130 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate" title="tail_variate"><code class="literal">tail_variate</code></a> 4131 </li> 4132</ul></div> 4133</div> 4134<div class="section"> 4135<div class="titlepage"><div><div><h4 class="title"> 4136<a name="accumulators.user_s_guide.the_statistical_accumulators_library.coherent_tail_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.coherent_tail_mean" title="coherent_tail_mean">coherent_tail_mean</a> 4137</h4></div></div></div> 4138<p> 4139 Estimation of the coherent tail mean based on order statistics (for both 4140 left and right tails). The left coherent tail mean feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">coherent_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code>, 4141 and the right coherent tail mean feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">coherent_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code>. They both share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_mean</span></code> feature and can be extracted 4142 with the <code class="computeroutput"><span class="identifier">tail_mean</span><span class="special">()</span></code> 4143 extractor. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/coherent_tail_mean_impl.html" title="Struct template coherent_tail_mean_impl">coherent_tail_mean_impl</a></code> 4144 </p> 4145<div class="variablelist"> 4146<p class="title"><b></b></p> 4147<dl class="variablelist"> 4148<dt><span class="term">Result Type</span></dt> 4149<dd> 4150<p> 4151</p> 4152<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4153</pre> 4154<p> 4155 </p> 4156</dd> 4157<dt><span class="term">Depends On</span></dt> 4158<dd><p> 4159 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">quantile</span></code> <br> <code class="computeroutput"><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4160 </p></dd> 4161<dt><span class="term">Variants</span></dt> 4162<dd><p> 4163 <span class="emphasis"><em>none</em></span> 4164 </p></dd> 4165<dt><span class="term">Initialization Parameters</span></dt> 4166<dd><p> 4167 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4168 </p></dd> 4169<dt><span class="term">Accumulator Parameters</span></dt> 4170<dd><p> 4171 <span class="emphasis"><em>none</em></span> 4172 </p></dd> 4173<dt><span class="term">Extractor Parameters</span></dt> 4174<dd><p> 4175 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 4176 </p></dd> 4177<dt><span class="term">Accumulator Complexity</span></dt> 4178<dd><p> 4179 O(log N), where N is the cache size 4180 </p></dd> 4181<dt><span class="term">Extractor Complexity</span></dt> 4182<dd><p> 4183 O(N log N), where N is the cache size 4184 </p></dd> 4185</dl> 4186</div> 4187<p> 4188 <span class="bold"><strong>Header</strong></span> 4189 </p> 4190<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_mean_hpp" title="Header <boost/accumulators/statistics/tail_mean.hpp>">boost/accumulators/statistics/tail_mean.hpp</a></code><span class="special">></span> 4191</pre> 4192<p> 4193 <span class="bold"><strong>Example</strong></span> 4194 </p> 4195<p> 4196 See the example for <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean" title="non_coherent_tail_mean"><code class="literal">non_coherent_tail_mean</code></a>. 4197 </p> 4198<p> 4199 <span class="bold"><strong>See also</strong></span> 4200 </p> 4201<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4202<li class="listitem"> 4203 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/coherent_tail_mean_impl.html" title="Struct template coherent_tail_mean_impl">coherent_tail_mean_impl</a></code> 4204 </li> 4205<li class="listitem"> 4206 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 4207 </li> 4208<li class="listitem"> 4209 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.extended_p_square_quantile" title="extended_p_square_quantile and variants"><code class="literal">extended_p_square_quantile</code></a> 4210 </li> 4211<li class="listitem"> 4212 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.pot_quantile" title="pot_quantile and variants"><code class="literal">pot_quantile</code></a> 4213 </li> 4214<li class="listitem"> 4215 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_quantile" title="tail_quantile"><code class="literal">tail_quantile</code></a> 4216 </li> 4217<li class="listitem"> 4218 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean" title="non_coherent_tail_mean"><code class="literal">non_coherent_tail_mean</code></a> 4219 </li> 4220</ul></div> 4221</div> 4222<div class="section"> 4223<div class="titlepage"><div><div><h4 class="title"> 4224<a name="accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean" title="non_coherent_tail_mean">non_coherent_tail_mean</a> 4225</h4></div></div></div> 4226<p> 4227 Estimation of the (non-coherent) tail mean based on order statistics (for 4228 both left and right tails). The left non-coherent tail mean feature is 4229 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code>, 4230 and the right non-choherent tail mean feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code>. They both share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_non_coherent_tail_mean</span></code> feature 4231 and can be extracted with the <code class="computeroutput"><span class="identifier">non_coherent_tail_mean</span><span class="special">()</span></code> extractor. For more implementation details, 4232 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/non_1_3_2_6_3_59_1_1_22_17.html" title="Struct template non_coherent_tail_mean_impl">non_coherent_tail_mean_impl</a></code> 4233 </p> 4234<div class="variablelist"> 4235<p class="title"><b></b></p> 4236<dl class="variablelist"> 4237<dt><span class="term">Result Type</span></dt> 4238<dd> 4239<p> 4240</p> 4241<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4242</pre> 4243<p> 4244 </p> 4245</dd> 4246<dt><span class="term">Depends On</span></dt> 4247<dd><p> 4248 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4249 </p></dd> 4250<dt><span class="term">Variants</span></dt> 4251<dd><p> 4252 <code class="computeroutput"><span class="identifier">abstract_non_coherent_tail_mean</span></code> 4253 </p></dd> 4254<dt><span class="term">Initialization Parameters</span></dt> 4255<dd><p> 4256 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4257 </p></dd> 4258<dt><span class="term">Accumulator Parameters</span></dt> 4259<dd><p> 4260 <span class="emphasis"><em>none</em></span> 4261 </p></dd> 4262<dt><span class="term">Extractor Parameters</span></dt> 4263<dd><p> 4264 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 4265 </p></dd> 4266<dt><span class="term">Accumulator Complexity</span></dt> 4267<dd><p> 4268 O(log N), where N is the cache size 4269 </p></dd> 4270<dt><span class="term">Extractor Complexity</span></dt> 4271<dd><p> 4272 O(N log N), where N is the cache size 4273 </p></dd> 4274</dl> 4275</div> 4276<p> 4277 <span class="bold"><strong>Header</strong></span> 4278 </p> 4279<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_mean_hpp" title="Header <boost/accumulators/statistics/tail_mean.hpp>">boost/accumulators/statistics/tail_mean.hpp</a></code><span class="special">></span> 4280</pre> 4281<p> 4282 <span class="bold"><strong>Example</strong></span> 4283 </p> 4284<pre class="programlisting"><span class="comment">// tolerance in %</span> 4285<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 4286 4287<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">100000</span><span class="special">;</span> <span class="comment">// number of MC steps</span> 4288<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">10000</span><span class="special">;</span> <span class="comment">// cache size</span> 4289 4290<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_right1</span><span class="special">;</span> 4291<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_left1</span><span class="special">;</span> 4292<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">coherent_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_right2</span><span class="special">;</span> 4293<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">coherent_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_left2</span><span class="special">;</span> 4294 4295<span class="identifier">accumulator_t_right1</span> <span class="identifier">acc0</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4296<span class="identifier">accumulator_t_left1</span> <span class="identifier">acc1</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4297<span class="identifier">accumulator_t_right2</span> <span class="identifier">acc2</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4298<span class="identifier">accumulator_t_left2</span> <span class="identifier">acc3</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4299 4300<span class="comment">// a random number generator</span> 4301<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 4302 4303<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 4304<span class="special">{</span> 4305 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 4306 <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 4307 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 4308 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 4309 <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">sample</span><span class="special">);</span> 4310<span class="special">}</span> 4311 4312<span class="comment">// check uniform distribution</span> 4313<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.95</span><span class="special">),</span> <span class="number">0.975</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4314<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">0.9875</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4315<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">),</span> <span class="number">0.995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4316<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">0.9995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4317<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.05</span><span class="special">),</span> <span class="number">0.025</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4318<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="number">0.0125</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4319<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.01</span><span class="special">),</span> <span class="number">0.005</span><span class="special">,</span> <span class="number">5</span> <span class="special">);</span> 4320<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="number">0.0005</span><span class="special">,</span> <span class="number">10</span> <span class="special">);</span> 4321<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.95</span><span class="special">),</span> <span class="number">0.975</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4322<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">0.9875</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4323<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">),</span> <span class="number">0.995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4324<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">0.9995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4325<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.05</span><span class="special">),</span> <span class="number">0.025</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4326<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="number">0.0125</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4327<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.01</span><span class="special">),</span> <span class="number">0.005</span><span class="special">,</span> <span class="number">5</span> <span class="special">);</span> 4328<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">tail_mean</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="number">0.0005</span><span class="special">,</span> <span class="number">10</span> <span class="special">);</span> 4329</pre> 4330<p> 4331 <span class="bold"><strong>See also</strong></span> 4332 </p> 4333<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4334<li class="listitem"> 4335 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/non_1_3_2_6_3_59_1_1_22_17.html" title="Struct template non_coherent_tail_mean_impl">non_coherent_tail_mean_impl</a></code> 4336 </li> 4337<li class="listitem"> 4338 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 4339 </li> 4340<li class="listitem"> 4341 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 4342 </li> 4343</ul></div> 4344</div> 4345<div class="section"> 4346<div class="titlepage"><div><div><h4 class="title"> 4347<a name="accumulators.user_s_guide.the_statistical_accumulators_library.tail_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_quantile" title="tail_quantile">tail_quantile</a> 4348</h4></div></div></div> 4349<p> 4350 Tail quantile estimation based on order statistics (for both left and right 4351 tails). The left tail quantile feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code>, and the right tail quantile feature 4352 is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code>. 4353 They both share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">quantile</span></code> 4354 feature and can be extracted with the <code class="computeroutput"><span class="identifier">quantile</span><span class="special">()</span></code> extractor. For more implementation details, 4355 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_quantile_impl.html" title="Struct template tail_quantile_impl">tail_quantile_impl</a></code> 4356 </p> 4357<div class="variablelist"> 4358<p class="title"><b></b></p> 4359<dl class="variablelist"> 4360<dt><span class="term">Result Type</span></dt> 4361<dd> 4362<p> 4363</p> 4364<pre class="programlisting"><em class="replaceable"><code>sample-type</code></em> 4365</pre> 4366<p> 4367 </p> 4368</dd> 4369<dt><span class="term">Depends On</span></dt> 4370<dd><p> 4371 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4372 </p></dd> 4373<dt><span class="term">Variants</span></dt> 4374<dd><p> 4375 <span class="emphasis"><em>none</em></span> 4376 </p></dd> 4377<dt><span class="term">Initialization Parameters</span></dt> 4378<dd><p> 4379 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4380 </p></dd> 4381<dt><span class="term">Accumulator Parameters</span></dt> 4382<dd><p> 4383 <span class="emphasis"><em>none</em></span> 4384 </p></dd> 4385<dt><span class="term">Extractor Parameters</span></dt> 4386<dd><p> 4387 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 4388 </p></dd> 4389<dt><span class="term">Accumulator Complexity</span></dt> 4390<dd><p> 4391 O(log N), where N is the cache size 4392 </p></dd> 4393<dt><span class="term">Extractor Complexity</span></dt> 4394<dd><p> 4395 O(N log N), where N is the cache size 4396 </p></dd> 4397</dl> 4398</div> 4399<p> 4400 <span class="bold"><strong>Header</strong></span> 4401 </p> 4402<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_quantile_hpp" title="Header <boost/accumulators/statistics/tail_quantile.hpp>">boost/accumulators/statistics/tail_quantile.hpp</a></code><span class="special">></span> 4403</pre> 4404<p> 4405 <span class="bold"><strong>Example</strong></span> 4406 </p> 4407<pre class="programlisting"><span class="comment">// tolerance in %</span> 4408<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 4409 4410<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">100000</span><span class="special">;</span> <span class="comment">// number of MC steps</span> 4411<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">10000</span><span class="special">;</span> <span class="comment">// cache size</span> 4412 4413<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_right</span><span class="special">;</span> 4414<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">accumulator_t_left</span><span class="special">;</span> 4415 4416<span class="identifier">accumulator_t_right</span> <span class="identifier">acc0</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4417<span class="identifier">accumulator_t_right</span> <span class="identifier">acc1</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4418<span class="identifier">accumulator_t_left</span> <span class="identifier">acc2</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4419<span class="identifier">accumulator_t_left</span> <span class="identifier">acc3</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4420 4421<span class="comment">// two random number generators</span> 4422<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 4423<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 4424<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma</span><span class="special">);</span> 4425 4426<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 4427<span class="special">{</span> 4428 <span class="keyword">double</span> <span class="identifier">sample1</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 4429 <span class="keyword">double</span> <span class="identifier">sample2</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">();</span> 4430 <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">sample1</span><span class="special">);</span> 4431 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample2</span><span class="special">);</span> 4432 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample1</span><span class="special">);</span> 4433 <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">sample2</span><span class="special">);</span> 4434<span class="special">}</span> 4435 4436<span class="comment">// check uniform distribution</span> 4437<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.95</span> <span class="special">),</span> <span class="number">0.95</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4438<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">0.975</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4439<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99</span> <span class="special">),</span> <span class="number">0.99</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4440<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">0.999</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4441<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.05</span> <span class="special">),</span> <span class="number">0.05</span><span class="special">,</span> <span class="number">2</span> <span class="special">);</span> 4442<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="number">0.025</span><span class="special">,</span> <span class="number">2</span> <span class="special">);</span> 4443<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.01</span> <span class="special">),</span> <span class="number">0.01</span><span class="special">,</span> <span class="number">3</span> <span class="special">);</span> 4444<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="number">0.001</span><span class="special">,</span> <span class="number">20</span> <span class="special">);</span> 4445 4446<span class="comment">// check standard normal distribution</span> 4447<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4448<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4449<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="special">-</span><span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4450<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="special">-</span><span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 4451</pre> 4452<p> 4453 <span class="bold"><strong>See also</strong></span> 4454 </p> 4455<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4456<li class="listitem"> 4457 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_quantile_impl.html" title="Struct template tail_quantile_impl">tail_quantile_impl</a></code> 4458 </li> 4459<li class="listitem"> 4460 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 4461 </li> 4462<li class="listitem"> 4463 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 4464 </li> 4465</ul></div> 4466</div> 4467<div class="section"> 4468<div class="titlepage"><div><div><h4 class="title"> 4469<a name="accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate" title="tail_variate">tail_variate</a> 4470</h4></div></div></div> 4471<p> 4472 Tracks the covariates of largest or smallest <code class="literal">N</code> samples. 4473 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> <span class="identifier">right</span><span class="special">></span></code> tracks the covariate associated with 4474 <em class="replaceable"><code>variate-tag</code></em> for the largest <code class="literal">N</code>, and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> 4475 <span class="identifier">left</span><span class="special">></span></code> 4476 for the smallest. The parameter <code class="literal">N</code> is specified with 4477 the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4478 initialization parameter. For implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_variate_impl.html" title="Struct template tail_variate_impl">tail_variate_impl</a></code>. 4479 </p> 4480<p> 4481 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> <span class="identifier">right</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> 4482 <span class="identifier">left</span><span class="special">></span></code> 4483 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_tail_variate</span></code> feature and can 4484 be extracted with the <code class="computeroutput"><span class="identifier">tail_variate</span><span class="special">()</span></code> extractor. 4485 </p> 4486<div class="variablelist"> 4487<p class="title"><b></b></p> 4488<dl class="variablelist"> 4489<dt><span class="term">Result Type</span></dt> 4490<dd> 4491<p> 4492</p> 4493<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 4494 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">reverse_iterator</span><span class="special"><</span> 4495 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">permutation_iterator</span><span class="special"><</span> 4496 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">>::</span><span class="identifier">const_iterator</span> <span class="comment">// variates</span> 4497 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">iterator</span> <span class="comment">// indices</span> 4498 <span class="special">></span> 4499 <span class="special">></span> 4500<span class="special">></span> 4501</pre> 4502<p> 4503 </p> 4504</dd> 4505<dt><span class="term">Depends On</span></dt> 4506<dd><p> 4507 <code class="computeroutput"><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4508 </p></dd> 4509<dt><span class="term">Variants</span></dt> 4510<dd><p> 4511 <code class="computeroutput"><span class="identifier">abstract_tail_variate</span></code> 4512 </p></dd> 4513<dt><span class="term">Initialization Parameters</span></dt> 4514<dd><p> 4515 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4516 </p></dd> 4517<dt><span class="term">Accumulator Parameters</span></dt> 4518<dd><p> 4519 <span class="emphasis"><em>none</em></span> 4520 </p></dd> 4521<dt><span class="term">Extractor Parameters</span></dt> 4522<dd><p> 4523 <span class="emphasis"><em>none</em></span> 4524 </p></dd> 4525<dt><span class="term">Accumulator Complexity</span></dt> 4526<dd><p> 4527 O(log N), where N is the cache size 4528 </p></dd> 4529<dt><span class="term">Extractor Complexity</span></dt> 4530<dd><p> 4531 O(N log N), where N is the cache size 4532 </p></dd> 4533</dl> 4534</div> 4535<p> 4536 <span class="bold"><strong>Header</strong></span> 4537 </p> 4538<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_variate_hpp" title="Header <boost/accumulators/statistics/tail_variate.hpp>">boost/accumulators/statistics/tail_variate.hpp</a></code><span class="special">></span> 4539</pre> 4540<p> 4541 <span class="bold"><strong>Example</strong></span> 4542 </p> 4543<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">,</span> <span class="identifier">right</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">acc</span><span class="special">(</span> 4544 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">>::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">4</span> 4545<span class="special">);</span> 4546 4547<span class="identifier">acc</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 4548<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">8</span><span class="special">});</span> 4549<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">3</span><span class="special">});</span> 4550 4551<span class="identifier">acc</span><span class="special">(</span><span class="number">16</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 4552<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">16</span><span class="special">,</span> <span class="number">8</span><span class="special">});</span> 4553<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">});</span> 4554 4555<span class="identifier">acc</span><span class="special">(</span><span class="number">12</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 4556<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">16</span><span class="special">,</span> <span class="number">12</span><span class="special">,</span> <span class="number">8</span><span class="special">});</span> 4557<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">3</span><span class="special">});</span> 4558 4559<span class="identifier">acc</span><span class="special">(</span><span class="number">24</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">5</span><span class="special">);</span> 4560<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">24</span><span class="special">,</span> <span class="number">16</span><span class="special">,</span> <span class="number">12</span><span class="special">,</span> <span class="number">8</span><span class="special">});</span> 4561<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">5</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">3</span><span class="special">});</span> 4562 4563<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">9</span><span class="special">);</span> 4564<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">24</span><span class="special">,</span> <span class="number">16</span><span class="special">,</span> <span class="number">12</span><span class="special">,</span> <span class="number">8</span><span class="special">});</span> 4565<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">5</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">3</span><span class="special">});</span> 4566 4567<span class="identifier">acc</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">7</span><span class="special">);</span> 4568<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">24</span><span class="special">,</span> <span class="number">16</span><span class="special">,</span> <span class="number">12</span><span class="special">,</span> <span class="number">9</span><span class="special">});</span> 4569<span class="identifier">CHECK_RANGE_EQUAL</span><span class="special">(</span><span class="identifier">tail_variate</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">{</span><span class="number">5</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="number">7</span><span class="special">});</span> 4570</pre> 4571<p> 4572 <span class="bold"><strong>See also</strong></span> 4573 </p> 4574<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4575<li class="listitem"> 4576 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_variate_impl.html" title="Struct template tail_variate_impl">tail_variate_impl</a></code> 4577 </li> 4578<li class="listitem"> 4579 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 4580 </li> 4581</ul></div> 4582</div> 4583<div class="section"> 4584<div class="titlepage"><div><div><h4 class="title"> 4585<a name="accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate_means"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate_means" title="tail_variate_means and variants">tail_variate_means 4586 <span class="emphasis"><em>and variants</em></span></a> 4587</h4></div></div></div> 4588<p> 4589 Estimation of the absolute and relative tail variate means (for both left 4590 and right tails). The absolute tail variate means has the feature <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">absolute_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 4591 and the relative tail variate mean has the feature <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">relative_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> 4592 <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code>. All absolute tail variate 4593 mean features share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_absolute_tail_variate_means</span></code> 4594 feature and can be extracted with the <code class="computeroutput"><span class="identifier">tail_variate_means</span><span class="special">()</span></code> extractor. All the relative tail variate 4595 mean features share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_relative_tail_variate_means</span></code> 4596 feature and can be extracted with the <code class="computeroutput"><span class="identifier">relative_tail_variate_means</span><span class="special">()</span></code> extractor. 4597 </p> 4598<p> 4599 For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_variate_means_impl.html" title="Struct template tail_variate_means_impl">tail_variate_means_impl</a></code> 4600 </p> 4601<div class="variablelist"> 4602<p class="title"><b></b></p> 4603<dl class="variablelist"> 4604<dt><span class="term">Result Type</span></dt> 4605<dd> 4606<p> 4607</p> 4608<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 4609 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> 4610 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4611 <span class="special">>::</span><span class="identifier">iterator</span> 4612<span class="special">></span> 4613</pre> 4614<p> 4615 </p> 4616</dd> 4617<dt><span class="term">Depends On</span></dt> 4618<dd><p> 4619 <code class="computeroutput"><span class="identifier">non_coherent_tail_mean</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4620 <br> <code class="computeroutput"><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> <em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 4621 </p></dd> 4622<dt><span class="term">Variants</span></dt> 4623<dd><p> 4624 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">absolute_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">relative_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 4625 </p></dd> 4626<dt><span class="term">Initialization Parameters</span></dt> 4627<dd><p> 4628 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 4629 </p></dd> 4630<dt><span class="term">Accumulator Parameters</span></dt> 4631<dd><p> 4632 <span class="emphasis"><em>none</em></span> 4633 </p></dd> 4634<dt><span class="term">Extractor Parameters</span></dt> 4635<dd><p> 4636 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 4637 </p></dd> 4638<dt><span class="term">Accumulator Complexity</span></dt> 4639<dd><p> 4640 O(log N), where N is the cache size 4641 </p></dd> 4642<dt><span class="term">Extractor Complexity</span></dt> 4643<dd><p> 4644 O(N log N), where N is the cache size 4645 </p></dd> 4646</dl> 4647</div> 4648<p> 4649 <span class="bold"><strong>Header</strong></span> 4650 </p> 4651<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.tail_variate_means_hpp" title="Header <boost/accumulators/statistics/tail_variate_means.hpp>">boost/accumulators/statistics/tail_variate_means.hpp</a></code><span class="special">></span> 4652</pre> 4653<p> 4654 <span class="bold"><strong>Example</strong></span> 4655 </p> 4656<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">5</span><span class="special">;</span> <span class="comment">// cache size</span> 4657 4658<span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">variate_type</span><span class="special">;</span> 4659<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">variate_type</span><span class="special">></span> <span class="identifier">variate_set_type</span><span class="special">;</span> 4660 4661<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 4662 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate_means</span><span class="special"><</span><span class="identifier">right</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">relative</span><span class="special">)>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">></span> 4663<span class="identifier">accumulator_t1</span><span class="special">;</span> 4664 4665<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 4666 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate_means</span><span class="special"><</span><span class="identifier">right</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">absolute</span><span class="special">)>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">></span> 4667<span class="identifier">accumulator_t2</span><span class="special">;</span> 4668 4669<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 4670 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate_means</span><span class="special"><</span><span class="identifier">left</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">relative</span><span class="special">)>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> 4671<span class="identifier">accumulator_t3</span><span class="special">;</span> 4672 4673<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 4674 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail_variate_means</span><span class="special"><</span><span class="identifier">left</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">absolute</span><span class="special">)>,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">></span> 4675<span class="identifier">accumulator_t4</span><span class="special">;</span> 4676 4677<span class="identifier">accumulator_t1</span> <span class="identifier">acc1</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4678<span class="identifier">accumulator_t2</span> <span class="identifier">acc2</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4679<span class="identifier">accumulator_t3</span> <span class="identifier">acc3</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4680<span class="identifier">accumulator_t4</span> <span class="identifier">acc4</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 4681 4682<span class="identifier">variate_set_type</span> <span class="identifier">cov1</span><span class="special">,</span> <span class="identifier">cov2</span><span class="special">,</span> <span class="identifier">cov3</span><span class="special">,</span> <span class="identifier">cov4</span><span class="special">,</span> <span class="identifier">cov5</span><span class="special">;</span> 4683<span class="keyword">double</span> <span class="identifier">c1</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">10.</span><span class="special">,</span> <span class="number">20.</span><span class="special">,</span> <span class="number">30.</span><span class="special">,</span> <span class="number">40.</span> <span class="special">};</span> <span class="comment">// 100</span> 4684<span class="keyword">double</span> <span class="identifier">c2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">26.</span><span class="special">,</span> <span class="number">4.</span><span class="special">,</span> <span class="number">17.</span><span class="special">,</span> <span class="number">3.</span> <span class="special">};</span> <span class="comment">// 50</span> 4685<span class="keyword">double</span> <span class="identifier">c3</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">46.</span><span class="special">,</span> <span class="number">64.</span><span class="special">,</span> <span class="number">40.</span><span class="special">,</span> <span class="number">50.</span> <span class="special">};</span> <span class="comment">// 200</span> 4686<span class="keyword">double</span> <span class="identifier">c4</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.</span><span class="special">,</span> <span class="number">3.</span><span class="special">,</span> <span class="number">70.</span><span class="special">,</span> <span class="number">6.</span> <span class="special">};</span> <span class="comment">// 80</span> 4687<span class="keyword">double</span> <span class="identifier">c5</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">2.</span><span class="special">,</span> <span class="number">2.</span><span class="special">,</span> <span class="number">2.</span><span class="special">,</span> <span class="number">14.</span> <span class="special">};</span> <span class="comment">// 20</span> 4688<span class="identifier">cov1</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c1</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c1</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 4689<span class="identifier">cov2</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c2</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c2</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 4690<span class="identifier">cov3</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c3</span><span class="special">,</span> <span class="identifier">c3</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c3</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 4691<span class="identifier">cov4</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c4</span><span class="special">,</span> <span class="identifier">c4</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c4</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 4692<span class="identifier">cov5</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c5</span><span class="special">,</span> <span class="identifier">c5</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c5</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 4693 4694<span class="identifier">acc1</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 4695<span class="identifier">acc1</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 4696<span class="identifier">acc1</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 4697<span class="identifier">acc1</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 4698<span class="identifier">acc1</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 4699 4700<span class="identifier">acc2</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 4701<span class="identifier">acc2</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 4702<span class="identifier">acc2</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 4703<span class="identifier">acc2</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 4704<span class="identifier">acc2</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 4705 4706<span class="identifier">acc3</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 4707<span class="identifier">acc3</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 4708<span class="identifier">acc3</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 4709<span class="identifier">acc3</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 4710<span class="identifier">acc3</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 4711 4712<span class="identifier">acc4</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 4713<span class="identifier">acc4</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 4714<span class="identifier">acc4</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 4715<span class="identifier">acc4</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 4716<span class="identifier">acc4</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 4717 4718<span class="comment">// check relative risk contributions</span> 4719<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">14.</span><span class="special">/</span><span class="number">75.</span> <span class="special">);</span> <span class="comment">// (10 + 46) / 300 = 14/75</span> 4720<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">7.</span><span class="special">/</span><span class="number">25.</span> <span class="special">);</span> <span class="comment">// (20 + 64) / 300 = 7/25</span> 4721<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">7.</span><span class="special">/</span><span class="number">30.</span> <span class="special">);</span> <span class="comment">// (30 + 40) / 300 = 7/30</span> 4722<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">3.</span><span class="special">/</span><span class="number">10.</span> <span class="special">);</span> <span class="comment">// (40 + 50) / 300 = 3/10</span> 4723<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">14.</span><span class="special">/</span><span class="number">35.</span> <span class="special">);</span> <span class="comment">// (26 + 2) / 70 = 14/35</span> 4724<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">3.</span><span class="special">/</span><span class="number">35.</span> <span class="special">);</span> <span class="comment">// ( 4 + 2) / 70 = 3/35</span> 4725<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">19.</span><span class="special">/</span><span class="number">70.</span> <span class="special">);</span> <span class="comment">// (17 + 2) / 70 = 19/70</span> 4726<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">17.</span><span class="special">/</span><span class="number">70.</span> <span class="special">);</span> <span class="comment">// ( 3 + 14) / 70 = 17/70</span> 4727 4728<span class="comment">// check absolute risk contributions</span> 4729<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">28</span> <span class="special">);</span> <span class="comment">// (10 + 46) / 2 = 28</span> 4730<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">42</span> <span class="special">);</span> <span class="comment">// (20 + 64) / 2 = 42</span> 4731<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">35</span> <span class="special">);</span> <span class="comment">// (30 + 40) / 2 = 35</span> 4732<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">45</span> <span class="special">);</span> <span class="comment">// (40 + 50) / 2 = 45</span> 4733<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">14</span> <span class="special">);</span> <span class="comment">// (26 + 2) / 2 = 14</span> 4734<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">3</span> <span class="special">);</span> <span class="comment">// ( 4 + 2) / 2 = 3</span> 4735<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span><span class="number">9.5</span> <span class="special">);</span> <span class="comment">// (17 + 2) / 2 = 9.5</span> 4736<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span><span class="number">8.5</span> <span class="special">);</span> <span class="comment">// ( 3 + 14) / 2 = 8.5</span> 4737 4738<span class="comment">// check relative risk contributions</span> 4739<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">23.</span><span class="special">/</span><span class="number">100.</span> <span class="special">);</span> <span class="comment">// 46/200 = 23/100</span> 4740<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">8.</span><span class="special">/</span><span class="number">25.</span> <span class="special">);</span> <span class="comment">// 64/200 = 8/25</span> 4741<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.</span><span class="special">/</span><span class="number">5.</span> <span class="special">);</span> <span class="comment">// 40/200 = 1/5</span> 4742<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">1.</span><span class="special">/</span><span class="number">4.</span> <span class="special">);</span> <span class="comment">// 50/200 = 1/4</span> 4743<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">1.</span><span class="special">/</span><span class="number">10.</span> <span class="special">);</span> <span class="comment">// 2/ 20 = 1/10</span> 4744<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">1.</span><span class="special">/</span><span class="number">10.</span> <span class="special">);</span> <span class="comment">// 2/ 20 = 1/10</span> 4745<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.</span><span class="special">/</span><span class="number">10.</span> <span class="special">);</span> <span class="comment">// 2/ 20 = 1/10</span> 4746<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">7.</span><span class="special">/</span><span class="number">10.</span> <span class="special">);</span> <span class="comment">// 14/ 20 = 7/10</span> 4747 4748<span class="comment">// check absolute risk contributions</span> 4749<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">46</span> <span class="special">);</span> <span class="comment">// 46</span> 4750<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">64</span> <span class="special">);</span> <span class="comment">// 64</span> 4751<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">40</span> <span class="special">);</span> <span class="comment">// 40</span> 4752<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">50</span> <span class="special">);</span> <span class="comment">// 50</span> 4753<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">2</span> <span class="special">);</span> <span class="comment">// 2</span> 4754<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">2</span> <span class="special">);</span> <span class="comment">// 2</span> 4755<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">2</span> <span class="special">);</span> <span class="comment">// 2</span> 4756<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">14</span> <span class="special">);</span> <span class="comment">// 14</span> 4757</pre> 4758<p> 4759 <span class="bold"><strong>See also</strong></span> 4760 </p> 4761<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4762<li class="listitem"> 4763 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/tail_variate_means_impl.html" title="Struct template tail_variate_means_impl">tail_variate_means_impl</a></code> 4764 </li> 4765<li class="listitem"> 4766 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_tail_mean" title="non_coherent_tail_mean"><code class="literal">non_coherent_tail_mean</code></a> 4767 </li> 4768<li class="listitem"> 4769 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate" title="tail_variate"><code class="literal">tail_variate</code></a> 4770 </li> 4771</ul></div> 4772</div> 4773<div class="section"> 4774<div class="titlepage"><div><div><h4 class="title"> 4775<a name="accumulators.user_s_guide.the_statistical_accumulators_library.variance"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.variance" title="variance and variants">variance 4776 <span class="emphasis"><em>and variants</em></span></a> 4777</h4></div></div></div> 4778<p> 4779 Lazy or iterative calculation of the variance. The lazy calculation is 4780 associated with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_variance</span></code> 4781 feature, and the iterative calculation with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span></code> 4782 feature. Both can be extracted using the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span><span class="special">()</span></code> extractor. For more implementation details, 4783 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_variance_impl.html" title="Struct template lazy_variance_impl">lazy_variance_impl</a></code> 4784 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/variance_impl.html" title="Struct template variance_impl">variance_impl</a></code> 4785 </p> 4786<div class="variablelist"> 4787<p class="title"><b></b></p> 4788<dl class="variablelist"> 4789<dt><span class="term">Result Type</span></dt> 4790<dd> 4791<p> 4792</p> 4793<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4794</pre> 4795<p> 4796 </p> 4797</dd> 4798<dt><span class="term">Depends On</span></dt> 4799<dd><p> 4800 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_variance</span></code> depends on <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 4801 and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">mean</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span></code> 4802 depends on <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">count</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">immediate_mean</span></code> 4803 </p></dd> 4804<dt><span class="term">Variants</span></dt> 4805<dd><p> 4806 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_variance</span></code> (a.k.a. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">))</span></code> 4807 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span></code> (a.k.a. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span></code>) 4808 </p></dd> 4809<dt><span class="term">Initialization Parameters</span></dt> 4810<dd><p> 4811 <span class="emphasis"><em>none</em></span> 4812 </p></dd> 4813<dt><span class="term">Accumulator Parameters</span></dt> 4814<dd><p> 4815 <span class="emphasis"><em>none</em></span> 4816 </p></dd> 4817<dt><span class="term">Extractor Parameters</span></dt> 4818<dd><p> 4819 <span class="emphasis"><em>none</em></span> 4820 </p></dd> 4821<dt><span class="term">Accumulator Complexity</span></dt> 4822<dd><p> 4823 O(1) 4824 </p></dd> 4825<dt><span class="term">Extractor Complexity</span></dt> 4826<dd><p> 4827 O(1) 4828 </p></dd> 4829</dl> 4830</div> 4831<p> 4832 <span class="bold"><strong>Header</strong></span> 4833 </p> 4834<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.variance_hpp" title="Header <boost/accumulators/statistics/variance.hpp>">boost/accumulators/statistics/variance.hpp</a></code><span class="special">></span> 4835</pre> 4836<p> 4837 <span class="bold"><strong>Example</strong></span> 4838 </p> 4839<pre class="programlisting"><span class="comment">// lazy variance</span> 4840<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">)></span> <span class="special">></span> <span class="identifier">acc1</span><span class="special">;</span> 4841 4842<span class="identifier">acc1</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 4843<span class="identifier">acc1</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 4844<span class="identifier">acc1</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 4845<span class="identifier">acc1</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 4846<span class="identifier">acc1</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> 4847 4848<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">));</span> 4849<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 4850<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">11.</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 4851<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">variance</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 4852 4853<span class="comment">// immediate variance</span> 4854<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">variance</span><span class="special">></span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 4855 4856<span class="identifier">acc2</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> 4857<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> 4858<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> 4859<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 4860<span class="identifier">acc2</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> 4861 4862<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 4863<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">3.</span><span class="special">,</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 4864<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">variance</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 4865</pre> 4866<p> 4867 <span class="bold"><strong>See also</strong></span> 4868 </p> 4869<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4870<li class="listitem"> 4871 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/lazy_variance_impl.html" title="Struct template lazy_variance_impl">lazy_variance_impl</a></code> 4872 </li> 4873<li class="listitem"> 4874 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/variance_impl.html" title="Struct template variance_impl">variance_impl</a></code> 4875 </li> 4876<li class="listitem"> 4877 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 4878 </li> 4879<li class="listitem"> 4880 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.mean" title="mean and variants"><code class="literal">mean</code></a> 4881 </li> 4882<li class="listitem"> 4883 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.moment" title="moment"><code class="literal">moment</code></a> 4884 </li> 4885</ul></div> 4886</div> 4887<div class="section"> 4888<div class="titlepage"><div><div><h4 class="title"> 4889<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_covariance"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_covariance" title="weighted_covariance">weighted_covariance</a> 4890</h4></div></div></div> 4891<p> 4892 An iterative Monte Carlo estimator for the weighted covariance. The feature 4893 is specified as <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_covariance</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> and 4894 is extracted with the <code class="computeroutput"><span class="identifier">weighted_variate</span><span class="special">()</span></code> extractor. For more implementation details, 4895 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_covariance_impl.html" title="Struct template weighted_covariance_impl">weighted_covariance_impl</a></code> 4896 </p> 4897<div class="variablelist"> 4898<p class="title"><b></b></p> 4899<dl class="variablelist"> 4900<dt><span class="term">Result Type</span></dt> 4901<dd> 4902<p> 4903</p> 4904<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">outer_product</span><span class="special"><</span> 4905 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span> 4906 <em class="replaceable"><code>weight-type</code></em> 4907 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4908 <span class="special">>::</span><span class="identifier">result_type</span> 4909 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span> 4910 <em class="replaceable"><code>weight-type</code></em> 4911 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 4912 <span class="special">>::</span><span class="identifier">result_type</span> 4913<span class="special">></span> 4914</pre> 4915<p> 4916 </p> 4917</dd> 4918<dt><span class="term">Depends On</span></dt> 4919<dd><p> 4920 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> <br> <code class="computeroutput"><span class="identifier">weighted_mean</span></code> <br> <code class="computeroutput"><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 4921 </p></dd> 4922<dt><span class="term">Variants</span></dt> 4923<dd><p> 4924 <code class="computeroutput"><span class="identifier">abstract_weighted_covariance</span></code> 4925 </p></dd> 4926<dt><span class="term">Initialization Parameters</span></dt> 4927<dd><p> 4928 <span class="emphasis"><em>none</em></span> 4929 </p></dd> 4930<dt><span class="term">Accumulator Parameters</span></dt> 4931<dd><p> 4932 <code class="computeroutput"><span class="identifier">weight</span></code> <br> <code class="computeroutput"><em class="replaceable"><code>variate-tag</code></em></code> 4933 </p></dd> 4934<dt><span class="term">Extractor Parameters</span></dt> 4935<dd><p> 4936 <span class="emphasis"><em>none</em></span> 4937 </p></dd> 4938<dt><span class="term">Accumulator Complexity</span></dt> 4939<dd><p> 4940 O(1) 4941 </p></dd> 4942<dt><span class="term">Extractor Complexity</span></dt> 4943<dd><p> 4944 O(1) 4945 </p></dd> 4946</dl> 4947</div> 4948<p> 4949 <span class="bold"><strong>Header</strong></span> 4950 </p> 4951<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_covariance_hpp" title="Header <boost/accumulators/statistics/weighted_covariance.hpp>">boost/accumulators/statistics/weighted_covariance.hpp</a></code><span class="special">></span> 4952</pre> 4953<p> 4954 <span class="bold"><strong>Example</strong></span> 4955 </p> 4956<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_covariance</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 4957 4958<span class="identifier">acc</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">2.</span><span class="special">);</span> 4959<span class="identifier">acc</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">4.</span><span class="special">);</span> 4960<span class="identifier">acc</span><span class="special">(</span><span class="number">2.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3.3</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3.</span><span class="special">);</span> 4961<span class="identifier">acc</span><span class="special">(</span><span class="number">6.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4.4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 4962 4963<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1e-6</span><span class="special">;</span> 4964<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">weighted_covariance</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="special">-</span><span class="number">2.39</span><span class="special">,</span> <span class="identifier">epsilon</span><span class="special">);</span> 4965</pre> 4966<p> 4967 <span class="bold"><strong>See also</strong></span> 4968 </p> 4969<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4970<li class="listitem"> 4971 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_covariance_impl.html" title="Struct template weighted_covariance_impl">weighted_covariance_impl</a></code> 4972 </li> 4973<li class="listitem"> 4974 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 4975 </li> 4976<li class="listitem"> 4977 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 4978 </li> 4979<li class="listitem"> 4980 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean" title="weighted_mean and variants"><code class="literal">weighted_mean</code></a> 4981 </li> 4982</ul></div> 4983</div> 4984<div class="section"> 4985<div class="titlepage"><div><div><h4 class="title"> 4986<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_density"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_density" title="weighted_density">weighted_density</a> 4987</h4></div></div></div> 4988<p> 4989 The <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span></code> feature returns a histogram 4990 of the weighted sample distribution. For more implementation details, see 4991 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_density_impl.html" title="Struct template weighted_density_impl">weighted_density_impl</a></code>. 4992 </p> 4993<div class="variablelist"> 4994<p class="title"><b></b></p> 4995<dl class="variablelist"> 4996<dt><span class="term">Result Type</span></dt> 4997<dd> 4998<p> 4999</p> 5000<pre class="programlisting"><span class="identifier">iterator_range</span><span class="special"><</span> 5001 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> 5002 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span> 5003 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>weight-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 5004 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>weight-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 5005 <span class="special">></span> 5006 <span class="special">>::</span><span class="identifier">iterator</span> 5007<span class="special">></span> 5008</pre> 5009<p> 5010 </p> 5011</dd> 5012<dt><span class="term">Depends On</span></dt> 5013<dd><p> 5014 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> <br> <code class="computeroutput"><span class="identifier">min</span></code> <br> <code class="computeroutput"><span class="identifier">max</span></code> 5015 </p></dd> 5016<dt><span class="term">Variants</span></dt> 5017<dd><p> 5018 <span class="emphasis"><em>none</em></span> 5019 </p></dd> 5020<dt><span class="term">Initialization Parameters</span></dt> 5021<dd><p> 5022 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">cache_size</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 5023 </p></dd> 5024<dt><span class="term">Accumulator Parameters</span></dt> 5025<dd><p> 5026 <code class="computeroutput"><span class="identifier">weight</span></code> 5027 </p></dd> 5028<dt><span class="term">Extractor Parameters</span></dt> 5029<dd><p> 5030 <span class="emphasis"><em>none</em></span> 5031 </p></dd> 5032<dt><span class="term">Accumulator Complexity</span></dt> 5033<dd><p> 5034 TODO 5035 </p></dd> 5036<dt><span class="term">Extractor Complexity</span></dt> 5037<dd><p> 5038 O(N), when N is <code class="computeroutput"><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 5039 </p></dd> 5040</dl> 5041</div> 5042<p> 5043 <span class="bold"><strong>Header</strong></span> 5044 </p> 5045<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_density_hpp" title="Header <boost/accumulators/statistics/weighted_density.hpp>">boost/accumulators/statistics/weighted_density.hpp</a></code><span class="special">></span> 5046</pre> 5047<p> 5048 <span class="bold"><strong>See also</strong></span> 5049 </p> 5050<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5051<li class="listitem"> 5052 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_density_impl.html" title="Struct template weighted_density_impl">weighted_density_impl</a></code> 5053 </li> 5054<li class="listitem"> 5055 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5056 </li> 5057<li class="listitem"> 5058 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5059 </li> 5060<li class="listitem"> 5061 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.min" title="min"><code class="literal">min</code></a> 5062 </li> 5063<li class="listitem"> 5064 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.max" title="max"><code class="literal">max</code></a> 5065 </li> 5066</ul></div> 5067</div> 5068<div class="section"> 5069<div class="titlepage"><div><div><h4 class="title"> 5070<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_extended_p_square"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_extended_p_square" title="weighted_extended_p_square">weighted_extended_p_square</a> 5071</h4></div></div></div> 5072<p> 5073 Multiple quantile estimation with the extended <code class="literal">P^2</code> algorithm 5074 for weighted samples. For further details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_39.html" title="Struct template weighted_extended_p_square_impl">weighted_extended_p_square_impl</a></code>. 5075 </p> 5076<div class="variablelist"> 5077<p class="title"><b></b></p> 5078<dl class="variablelist"> 5079<dt><span class="term">Result Type</span></dt> 5080<dd> 5081<p> 5082</p> 5083<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 5084 <em class="replaceable"><code>implementation-defined</code></em> 5085<span class="special">></span> 5086</pre> 5087<p> 5088 </p> 5089</dd> 5090<dt><span class="term">Depends On</span></dt> 5091<dd><p> 5092 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 5093 </p></dd> 5094<dt><span class="term">Variants</span></dt> 5095<dd><p> 5096 <span class="emphasis"><em>none</em></span> 5097 </p></dd> 5098<dt><span class="term">Initialization Parameters</span></dt> 5099<dd><p> 5100 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span></code> 5101 </p></dd> 5102<dt><span class="term">Accumulator Parameters</span></dt> 5103<dd><p> 5104 <code class="computeroutput"><span class="identifier">weight</span></code> 5105 </p></dd> 5106<dt><span class="term">Extractor Parameters</span></dt> 5107<dd><p> 5108 <span class="emphasis"><em>none</em></span> 5109 </p></dd> 5110<dt><span class="term">Accumulator Complexity</span></dt> 5111<dd><p> 5112 TODO 5113 </p></dd> 5114<dt><span class="term">Extractor Complexity</span></dt> 5115<dd><p> 5116 O(1) 5117 </p></dd> 5118</dl> 5119</div> 5120<p> 5121 <span class="bold"><strong>Header</strong></span> 5122 </p> 5123<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_extended_p_square_hpp" title="Header <boost/accumulators/statistics/weighted_extended_p_square.hpp>">boost/accumulators/statistics/weighted_extended_p_square.hpp</a></code><span class="special">></span> 5124</pre> 5125<p> 5126 <span class="bold"><strong>Example</strong></span> 5127 </p> 5128<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square</span><span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">accumulator_t</span><span class="special">;</span> 5129 5130<span class="comment">// tolerance in %</span> 5131<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 5132 5133<span class="comment">// some random number generators</span> 5134<span class="keyword">double</span> <span class="identifier">mu1</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span> 5135<span class="keyword">double</span> <span class="identifier">mu2</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> 5136<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 5137<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma1</span><span class="special">(</span><span class="identifier">mu1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5138<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma2</span><span class="special">(</span><span class="identifier">mu2</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5139<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal1</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma1</span><span class="special">);</span> 5140<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal2</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma2</span><span class="special">);</span> 5141 5142<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">probs_uniform</span><span class="special">,</span> <span class="identifier">probs_normal1</span><span class="special">,</span> <span class="identifier">probs_normal2</span><span class="special">,</span> <span class="identifier">probs_normal_exact1</span><span class="special">,</span> <span class="identifier">probs_normal_exact2</span><span class="special">;</span> 5143 5144<span class="keyword">double</span> <span class="identifier">p1</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{/*</span><span class="number">0.001</span><span class="special">,*/</span> <span class="number">0.01</span><span class="special">,</span> <span class="number">0.1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.9</span><span class="special">,</span> <span class="number">0.99</span><span class="special">,</span> <span class="number">0.999</span><span class="special">};</span> 5145<span class="identifier">probs_uniform</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p1</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">p1</span><span class="special">)</span> <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">));</span> 5146 5147<span class="keyword">double</span> <span class="identifier">p2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">0.001</span><span class="special">,</span> <span class="number">0.025</span><span class="special">};</span> 5148<span class="keyword">double</span> <span class="identifier">p3</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">0.975</span><span class="special">,</span> <span class="number">0.999</span><span class="special">};</span> 5149<span class="identifier">probs_normal1</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p2</span><span class="special">,</span> <span class="identifier">p2</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span> <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">));</span> 5150<span class="identifier">probs_normal2</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p3</span><span class="special">,</span> <span class="identifier">p3</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">p3</span><span class="special">)</span> <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">));</span> 5151 5152<span class="keyword">double</span> <span class="identifier">p4</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{-</span><span class="number">3.090232</span><span class="special">,</span> <span class="special">-</span><span class="number">1.959963</span><span class="special">};</span> 5153<span class="keyword">double</span> <span class="identifier">p5</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1.959963</span><span class="special">,</span> <span class="number">3.090232</span><span class="special">};</span> 5154<span class="identifier">probs_normal_exact1</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p4</span><span class="special">,</span> <span class="identifier">p4</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">p4</span><span class="special">)</span> <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">));</span> 5155<span class="identifier">probs_normal_exact2</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">p5</span><span class="special">,</span> <span class="identifier">p5</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">p5</span><span class="special">)</span> <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">));</span> 5156 5157<span class="identifier">accumulator_t</span> <span class="identifier">acc_uniform</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span> <span class="special">=</span> <span class="identifier">probs_uniform</span><span class="special">);</span> 5158<span class="identifier">accumulator_t</span> <span class="identifier">acc_normal1</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span> <span class="special">=</span> <span class="identifier">probs_normal1</span><span class="special">);</span> 5159<span class="identifier">accumulator_t</span> <span class="identifier">acc_normal2</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_extended_p_square</span><span class="special">::</span><span class="identifier">probabilities</span> <span class="special">=</span> <span class="identifier">probs_normal2</span><span class="special">);</span> 5160 5161<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5162<span class="special">{</span> 5163 <span class="identifier">acc_uniform</span><span class="special">(</span><span class="identifier">rng</span><span class="special">(),</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 5164 5165 <span class="keyword">double</span> <span class="identifier">sample1</span> <span class="special">=</span> <span class="identifier">normal1</span><span class="special">();</span> 5166 <span class="keyword">double</span> <span class="identifier">sample2</span> <span class="special">=</span> <span class="identifier">normal2</span><span class="special">();</span> 5167 <span class="identifier">acc_normal1</span><span class="special">(</span><span class="identifier">sample1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu1</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample1</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu1</span><span class="special">)));</span> 5168 <span class="identifier">acc_normal2</span><span class="special">(</span><span class="identifier">sample2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu2</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample2</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu2</span><span class="special">)));</span> 5169<span class="special">}</span> 5170 5171<span class="comment">// check for uniform distribution </span> 5172<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">probs_uniform</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5173<span class="special">{</span> 5174 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">weighted_extended_p_square</span><span class="special">(</span><span class="identifier">acc_uniform</span><span class="special">)[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">probs_uniform</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">epsilon</span><span class="special">);</span> 5175<span class="special">}</span> 5176 5177<span class="comment">// check for standard normal distribution</span> 5178<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">probs_normal1</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5179<span class="special">{</span> 5180 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">weighted_extended_p_square</span><span class="special">(</span><span class="identifier">acc_normal1</span><span class="special">)[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">probs_normal_exact1</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">epsilon</span><span class="special">);</span> 5181 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="identifier">weighted_extended_p_square</span><span class="special">(</span><span class="identifier">acc_normal2</span><span class="special">)[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">probs_normal_exact2</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">epsilon</span><span class="special">);</span> 5182<span class="special">}</span> 5183</pre> 5184<p> 5185 <span class="bold"><strong>See also</strong></span> 5186 </p> 5187<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5188<li class="listitem"> 5189 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_39.html" title="Struct template weighted_extended_p_square_impl">weighted_extended_p_square_impl</a></code> 5190 </li> 5191<li class="listitem"> 5192 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5193 </li> 5194<li class="listitem"> 5195 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5196 </li> 5197</ul></div> 5198</div> 5199<div class="section"> 5200<div class="titlepage"><div><div><h4 class="title"> 5201<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_kurtosis"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_kurtosis" title="weighted_kurtosis">weighted_kurtosis</a> 5202</h4></div></div></div> 5203<p> 5204 The kurtosis of a sample distribution is defined as the ratio of the 4th 5205 central moment and the square of the 2nd central moment (the variance) 5206 of the samples, minus 3. The term <code class="literal">-3</code> is added in order 5207 to ensure that the normal distribution has zero kurtosis. For more implementation 5208 details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_kurtosis_impl.html" title="Struct template weighted_kurtosis_impl">weighted_kurtosis_impl</a></code> 5209 </p> 5210<div class="variablelist"> 5211<p class="title"><b></b></p> 5212<dl class="variablelist"> 5213<dt><span class="term">Result Type</span></dt> 5214<dd> 5215<p> 5216</p> 5217<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 5218 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 5219 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 5220<span class="special">>::</span><span class="identifier">result_type</span> 5221</pre> 5222<p> 5223 </p> 5224</dd> 5225<dt><span class="term">Depends On</span></dt> 5226<dd><p> 5227 <code class="computeroutput"><span class="identifier">weighted_mean</span></code> <br> 5228 <code class="computeroutput"><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 5229 <br> <code class="computeroutput"><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">3</span><span class="special">></span></code> <br> <code class="computeroutput"><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">4</span><span class="special">></span></code> 5230 </p></dd> 5231<dt><span class="term">Variants</span></dt> 5232<dd><p> 5233 <span class="emphasis"><em>none</em></span> 5234 </p></dd> 5235<dt><span class="term">Initialization Parameters</span></dt> 5236<dd><p> 5237 <span class="emphasis"><em>none</em></span> 5238 </p></dd> 5239<dt><span class="term">Accumulator Parameters</span></dt> 5240<dd><p> 5241 <span class="emphasis"><em>none</em></span> 5242 </p></dd> 5243<dt><span class="term">Extractor Parameters</span></dt> 5244<dd><p> 5245 <span class="emphasis"><em>none</em></span> 5246 </p></dd> 5247<dt><span class="term">Accumulator Complexity</span></dt> 5248<dd><p> 5249 O(1) 5250 </p></dd> 5251<dt><span class="term">Extractor Complexity</span></dt> 5252<dd><p> 5253 O(1) 5254 </p></dd> 5255</dl> 5256</div> 5257<p> 5258 <span class="bold"><strong>Header</strong></span> 5259 </p> 5260<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_kurtosis_hpp" title="Header <boost/accumulators/statistics/weighted_kurtosis.hpp>">boost/accumulators/statistics/weighted_kurtosis.hpp</a></code><span class="special">></span> 5261</pre> 5262<p> 5263 <span class="bold"><strong>Example</strong></span> 5264 </p> 5265<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_kurtosis</span><span class="special">>,</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 5266 5267<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 5268<span class="identifier">acc2</span><span class="special">(</span><span class="number">7</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 5269<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 5270<span class="identifier">acc2</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 5271<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> 5272 5273<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">42.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 5274<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">212.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 5275<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">3</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1350.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 5276<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">4</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">9956.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 5277<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_kurtosis</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">0.58137026432</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 5278</pre> 5279<p> 5280 <span class="bold"><strong>See also</strong></span> 5281 </p> 5282<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5283<li class="listitem"> 5284 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_kurtosis_impl.html" title="Struct template weighted_kurtosis_impl">weighted_kurtosis_impl</a></code> 5285 </li> 5286<li class="listitem"> 5287 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean" title="weighted_mean and variants"><code class="literal">weighted_mean</code></a> 5288 </li> 5289<li class="listitem"> 5290 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment" title="weighted_moment"><code class="literal">weighted_moment</code></a> 5291 </li> 5292</ul></div> 5293</div> 5294<div class="section"> 5295<div class="titlepage"><div><div><h4 class="title"> 5296<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean" title="weighted_mean and variants">weighted_mean 5297 <span class="emphasis"><em>and variants</em></span></a> 5298</h4></div></div></div> 5299<p> 5300 Calculates the weighted mean of samples or variates. The calculation is 5301 either lazy (in the result extractor), or immediate (in the accumulator). 5302 The lazy implementation is the default. For more implementation details, 5303 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_mean_impl.html" title="Struct template weighted_mean_impl">weighted_mean_impl</a></code> 5304 or. <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/imme_1_3_2_6_3_59_1_1_22_8.html" title="Struct template immediate_weighted_mean_impl">immediate_weighted_mean_impl</a></code> 5305 </p> 5306<div class="variablelist"> 5307<p class="title"><b></b></p> 5308<dl class="variablelist"> 5309<dt><span class="term">Result Type</span></dt> 5310<dd><p> 5311 For samples, <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span></code> <br> For variates, 5312 <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span><span class="special">,</span> 5313 <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span></code> 5314 </p></dd> 5315<dt><span class="term">Depends On</span></dt> 5316<dd><p> 5317 <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> <br> 5318 The lazy mean of samples depends on <code class="computeroutput"><span class="identifier">weighted_sum</span></code> 5319 <br> The lazy mean of variates depends on <code class="computeroutput"><span class="identifier">weighted_sum_of_variates</span><span class="special"><></span></code> 5320 </p></dd> 5321<dt><span class="term">Variants</span></dt> 5322<dd><p> 5323 <code class="computeroutput"><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> <br> <code class="computeroutput"><span class="identifier">immediate_weighted_mean</span></code> 5324 <br> <code class="computeroutput"><span class="identifier">immediate_weighted_mean_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 5325 </p></dd> 5326<dt><span class="term">Initialization Parameters</span></dt> 5327<dd><p> 5328 <span class="emphasis"><em>none</em></span> 5329 </p></dd> 5330<dt><span class="term">Accumulator Parameters</span></dt> 5331<dd><p> 5332 <span class="emphasis"><em>none</em></span> 5333 </p></dd> 5334<dt><span class="term">Extractor Parameters</span></dt> 5335<dd><p> 5336 <span class="emphasis"><em>none</em></span> 5337 </p></dd> 5338<dt><span class="term">Accumulator Complexity</span></dt> 5339<dd><p> 5340 O(1) 5341 </p></dd> 5342<dt><span class="term">Extractor Complexity</span></dt> 5343<dd><p> 5344 O(1) 5345 </p></dd> 5346</dl> 5347</div> 5348<p> 5349 <span class="bold"><strong>Header</strong></span> 5350 </p> 5351<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_mean_hpp" title="Header <boost/accumulators/statistics/weighted_mean.hpp>">boost/accumulators/statistics/weighted_mean.hpp</a></code><span class="special">></span> 5352</pre> 5353<p> 5354 <span class="bold"><strong>Example</strong></span> 5355 </p> 5356<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span> 5357 <span class="keyword">int</span> 5358 <span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 5359 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_mean</span> 5360 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> 5361 <span class="special">></span> 5362 <span class="special">,</span> <span class="keyword">int</span> 5363<span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 5364 5365<span class="identifier">acc</span><span class="special">(</span><span class="number">10</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">7</span><span class="special">);</span> <span class="comment">// 20</span> 5366<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">//</span> 5367 <span class="comment">//</span> 5368<span class="identifier">acc</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">8</span><span class="special">);</span> <span class="comment">// 18</span> 5369<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">//</span> 5370 <span class="comment">//</span> 5371<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">9</span><span class="special">);</span> <span class="comment">// 16</span> 5372<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">//</span> 5373 <span class="comment">//</span> 5374<span class="identifier">acc</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">5</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">6</span><span class="special">);</span> <span class="comment">//+ 30</span> 5375<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">14</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> <span class="comment">//</span> 5376 <span class="comment">//= 84 / 14 = 6</span> 5377 5378<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">6.</span><span class="special">,</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 5379<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">52.</span><span class="special">/</span><span class="number">7.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc</span><span class="special">)));</span> 5380 5381<span class="identifier">accumulator_set</span><span class="special"><</span> 5382 <span class="keyword">int</span> 5383 <span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span> 5384 <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span> 5385 <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">immediate</span><span class="special">)</span> 5386 <span class="special">></span> 5387 <span class="special">,</span> <span class="keyword">int</span> 5388<span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 5389 5390<span class="identifier">acc2</span><span class="special">(</span><span class="number">10</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">7</span><span class="special">);</span> <span class="comment">// 20</span> 5391<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> <span class="comment">//</span> 5392 <span class="comment">//</span> 5393<span class="identifier">acc2</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">8</span><span class="special">);</span> <span class="comment">// 18</span> 5394<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> <span class="comment">//</span> 5395 <span class="comment">//</span> 5396<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">9</span><span class="special">);</span> <span class="comment">// 16</span> 5397<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> <span class="comment">//</span> 5398 <span class="comment">//</span> 5399<span class="identifier">acc2</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">5</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">6</span><span class="special">);</span> <span class="comment">//+ 30</span> 5400<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">14</span><span class="special">,</span> <span class="identifier">sum_of_weights</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> <span class="comment">//</span> 5401 <span class="comment">//= 84 / 14 = 6</span> 5402 5403<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">6.</span><span class="special">,</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 5404<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">52.</span><span class="special">/</span><span class="number">7.</span><span class="special">,</span> <span class="special">(</span><span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_mean_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">)));</span> 5405</pre> 5406<p> 5407 <span class="bold"><strong>See also</strong></span> 5408 </p> 5409<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5410<li class="listitem"> 5411 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_mean_impl.html" title="Struct template weighted_mean_impl">weighted_mean_impl</a></code> 5412 </li> 5413<li class="listitem"> 5414 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/imme_1_3_2_6_3_59_1_1_22_8.html" title="Struct template immediate_weighted_mean_impl">immediate_weighted_mean_impl</a></code> 5415 </li> 5416<li class="listitem"> 5417 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_sum" title="weighted_sum and variants"><code class="literal">weighted_sum</code></a> 5418 </li> 5419<li class="listitem"> 5420 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5421 </li> 5422</ul></div> 5423</div> 5424<div class="section"> 5425<div class="titlepage"><div><div><h4 class="title"> 5426<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_median"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_median" title="weighted_median and variants">weighted_median 5427 <span class="emphasis"><em>and variants</em></span></a> 5428</h4></div></div></div> 5429<p> 5430 Median estimation for weighted samples based on the <code class="literal">P^2</code> 5431 quantile estimator, the density estimator, or the <code class="literal">P^2</code> 5432 cumulative distribution estimator. For more implementation details, see 5433 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_median_impl.html" title="Struct template weighted_median_impl">weighted_median_impl</a></code>, 5434 <code class="computeroutput">with_weighted_density_median_impl</code>, 5435 and <code class="computeroutput">with_weighted_p_square_cumulative_distribution_median_impl</code>. 5436 </p> 5437<p> 5438 The three median accumulators all satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_median</span></code> 5439 feature, and can all be extracted with the <code class="computeroutput"><span class="identifier">weighted_median</span><span class="special">()</span></code> extractor. 5440 </p> 5441<div class="variablelist"> 5442<p class="title"><b></b></p> 5443<dl class="variablelist"> 5444<dt><span class="term">Result Type</span></dt> 5445<dd> 5446<p> 5447</p> 5448<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 5449</pre> 5450<p> 5451 </p> 5452</dd> 5453<dt><span class="term">Depends On</span></dt> 5454<dd><p> 5455 <code class="computeroutput"><span class="identifier">weighted_median</span></code> depends 5456 on <code class="computeroutput"><span class="identifier">weighted_p_square_quantile_for_median</span></code> 5457 <br> <code class="computeroutput"><span class="identifier">with_weighted_density_median</span></code> 5458 depends on <code class="computeroutput"><span class="identifier">count</span></code> 5459 and <code class="computeroutput"><span class="identifier">weighted_density</span></code> 5460 <br> <code class="computeroutput"><span class="identifier">with_weighted_p_square_cumulative_distribution_median</span></code> 5461 depends on <code class="computeroutput"><span class="identifier">weighted_p_square_cumulative_distribution</span></code> 5462 </p></dd> 5463<dt><span class="term">Variants</span></dt> 5464<dd><p> 5465 <code class="computeroutput"><span class="identifier">with_weighted_density_median</span></code> 5466 (a.k.a. <code class="computeroutput"><span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">with_weighted_density</span><span class="special">)</span></code>) <br> <code class="computeroutput"><span class="identifier">with_weighted_p_square_cumulative_distribution_median</span></code> 5467 (a.k.a. <code class="computeroutput"><span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">with_weighted_p_square_cumulative_distribution</span><span class="special">)</span></code>) 5468 </p></dd> 5469<dt><span class="term">Initialization Parameters</span></dt> 5470<dd><p> 5471 <code class="computeroutput"><span class="identifier">with_weighted_density_median</span></code> 5472 requires <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">cache_size</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">num_bins</span></code> 5473 <br> <code class="computeroutput"><span class="identifier">with_weighted_p_square_cumulative_distribution_median</span></code> 5474 requires <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span></code> 5475 </p></dd> 5476<dt><span class="term">Accumulator Parameters</span></dt> 5477<dd><p> 5478 <code class="computeroutput"><span class="identifier">weight</span></code> 5479 </p></dd> 5480<dt><span class="term">Extractor Parameters</span></dt> 5481<dd><p> 5482 <span class="emphasis"><em>none</em></span> 5483 </p></dd> 5484<dt><span class="term">Accumulator Complexity</span></dt> 5485<dd><p> 5486 TODO 5487 </p></dd> 5488<dt><span class="term">Extractor Complexity</span></dt> 5489<dd><p> 5490 TODO 5491 </p></dd> 5492</dl> 5493</div> 5494<p> 5495 <span class="bold"><strong>Header</strong></span> 5496 </p> 5497<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_median_hpp" title="Header <boost/accumulators/statistics/weighted_median.hpp>">boost/accumulators/statistics/weighted_median.hpp</a></code><span class="special">></span> 5498</pre> 5499<p> 5500 <span class="bold"><strong>Example</strong></span> 5501 </p> 5502<pre class="programlisting"><span class="comment">// Median estimation of normal distribution N(1,1) using samples from a narrow normal distribution N(1,0.01)</span> 5503<span class="comment">// The weights equal to the likelihood ratio of the corresponding samples</span> 5504 5505<span class="comment">// two random number generators</span> 5506<span class="keyword">double</span> <span class="identifier">mu</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> 5507<span class="keyword">double</span> <span class="identifier">sigma_narrow</span> <span class="special">=</span> <span class="number">0.01</span><span class="special">;</span> 5508<span class="keyword">double</span> <span class="identifier">sigma</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> 5509<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 5510<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma_narrow</span><span class="special">(</span><span class="identifier">mu</span><span class="special">,</span><span class="identifier">sigma_narrow</span><span class="special">);</span> 5511<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal_narrow</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma_narrow</span><span class="special">);</span> 5512 5513<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">with_weighted_p_square_quantile</span><span class="special">)</span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 5514<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">with_weighted_density</span><span class="special">)</span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> 5515 <span class="identifier">acc_dens</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">cache_size</span> <span class="special">=</span> <span class="number">10000</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_density</span><span class="special">::</span><span class="identifier">num_bins</span> <span class="special">=</span> <span class="number">1000</span> <span class="special">);</span> 5516<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">with_weighted_p_square_cumulative_distribution</span><span class="special">)</span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> 5517 <span class="identifier">acc_cdist</span><span class="special">(</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span> <span class="special">=</span> <span class="number">100</span> <span class="special">);</span> 5518 5519<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5520<span class="special">{</span> 5521 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">normal_narrow</span><span class="special">();</span> 5522 <span class="identifier">acc</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(</span><span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma_narrow</span><span class="special">/</span><span class="identifier">sigma_narrow</span> <span class="special">-</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma</span><span class="special">/</span><span class="identifier">sigma</span> <span class="special">)));</span> 5523 <span class="identifier">acc_dens</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(</span><span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma_narrow</span><span class="special">/</span><span class="identifier">sigma_narrow</span> <span class="special">-</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma</span><span class="special">/</span><span class="identifier">sigma</span> <span class="special">)));</span> 5524 <span class="identifier">acc_cdist</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(</span><span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="identifier">mu</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma_narrow</span><span class="special">/</span><span class="identifier">sigma_narrow</span> <span class="special">-</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">sigma</span><span class="special">/</span><span class="identifier">sigma</span> <span class="special">)));</span> 5525<span class="special">}</span> 5526 5527<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">acc</span><span class="special">),</span> <span class="number">1e-1</span><span class="special">);</span> 5528<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">acc_dens</span><span class="special">),</span> <span class="number">1e-1</span><span class="special">);</span> 5529<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weighted_median</span><span class="special">(</span><span class="identifier">acc_cdist</span><span class="special">),</span> <span class="number">1e-1</span><span class="special">);</span> 5530</pre> 5531<p> 5532 <span class="bold"><strong>See also</strong></span> 5533 </p> 5534<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5535<li class="listitem"> 5536 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_median_impl.html" title="Struct template weighted_median_impl">weighted_median_impl</a></code> 5537 </li> 5538<li class="listitem"> 5539 <code class="computeroutput">with_weighted_density_median_impl</code> 5540 </li> 5541<li class="listitem"> 5542 <code class="computeroutput">with_weighted_p_square_cumulative_distribution_median_impl</code> 5543 </li> 5544<li class="listitem"> 5545 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5546 </li> 5547<li class="listitem"> 5548 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_quantile" title="weighted_p_square_quantile and variants"><code class="literal">weighted_p_square_quantile</code></a> 5549 </li> 5550<li class="listitem"> 5551 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_cumulative_distribution" title="weighted_p_square_cumulative_distribution"><code class="literal">weighted_p_square_cumulative_distribution</code></a> 5552 </li> 5553</ul></div> 5554</div> 5555<div class="section"> 5556<div class="titlepage"><div><div><h4 class="title"> 5557<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment" title="weighted_moment">weighted_moment</a> 5558</h4></div></div></div> 5559<p> 5560 Calculates the N-th moment of the weighted samples, which is defined as 5561 the sum of the weighted N-th power of the samples over the sum of the weights. 5562 </p> 5563<div class="variablelist"> 5564<p class="title"><b></b></p> 5565<dl class="variablelist"> 5566<dt><span class="term">Result Type</span></dt> 5567<dd> 5568<p> 5569</p> 5570<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 5571 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 5572 <span class="special">,</span> <span class="identifier">weight_type</span> 5573<span class="special">>::</span><span class="identifier">result_type</span> 5574</pre> 5575<p> 5576 </p> 5577</dd> 5578<dt><span class="term">Depends On</span></dt> 5579<dd><p> 5580 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 5581 </p></dd> 5582<dt><span class="term">Variants</span></dt> 5583<dd><p> 5584 <span class="emphasis"><em>none</em></span> 5585 </p></dd> 5586<dt><span class="term">Initialization Parameters</span></dt> 5587<dd><p> 5588 <span class="emphasis"><em>none</em></span> 5589 </p></dd> 5590<dt><span class="term">Accumulator Parameters</span></dt> 5591<dd><p> 5592 <code class="computeroutput"><span class="identifier">weight</span></code> 5593 </p></dd> 5594<dt><span class="term">Extractor Parameters</span></dt> 5595<dd><p> 5596 <span class="emphasis"><em>none</em></span> 5597 </p></dd> 5598<dt><span class="term">Accumulator Complexity</span></dt> 5599<dd><p> 5600 O(1) 5601 </p></dd> 5602<dt><span class="term">Extractor Complexity</span></dt> 5603<dd><p> 5604 O(1) 5605 </p></dd> 5606</dl> 5607</div> 5608<p> 5609 <span class="bold"><strong>Header</strong></span> 5610 </p> 5611<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_moment_hpp" title="Header <boost/accumulators/statistics/weighted_moment.hpp>">boost/accumulators/statistics/weighted_moment.hpp</a></code><span class="special">></span> 5612</pre> 5613<p> 5614 <span class="bold"><strong>Example</strong></span> 5615 </p> 5616<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 5617<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">7</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">acc7</span><span class="special">;</span> 5618 5619<span class="identifier">acc2</span><span class="special">(</span><span class="number">2.1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">);</span> 5620<span class="identifier">acc2</span><span class="special">(</span><span class="number">2.7</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.4</span><span class="special">);</span> 5621<span class="identifier">acc2</span><span class="special">(</span><span class="number">1.8</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">);</span> 5622 5623<span class="identifier">acc7</span><span class="special">(</span><span class="number">2.1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">);</span> 5624<span class="identifier">acc7</span><span class="special">(</span><span class="number">2.7</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.4</span><span class="special">);</span> 5625<span class="identifier">acc7</span><span class="special">(</span><span class="number">1.8</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">);</span> 5626 5627<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">5.403</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 5628<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">548.54182</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">7</span><span class="special">>(</span><span class="identifier">acc7</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 5629</pre> 5630<p> 5631 <span class="bold"><strong>See also</strong></span> 5632 </p> 5633<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5634<li class="listitem"> 5635 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_moment_impl.html" title="Struct template weighted_moment_impl">weighted_moment_impl</a></code> 5636 </li> 5637<li class="listitem"> 5638 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5639 </li> 5640<li class="listitem"> 5641 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5642 </li> 5643</ul></div> 5644</div> 5645<div class="section"> 5646<div class="titlepage"><div><div><h4 class="title"> 5647<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_cumulative_distribution"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_cumulative_distribution" title="weighted_p_square_cumulative_distribution">weighted_p_square_cumulative_distribution</a> 5648</h4></div></div></div> 5649<p> 5650 Histogram calculation of the cumulative distribution with the <code class="literal">P^2</code> 5651 algorithm for weighted samples. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_44.html" title="Struct template weighted_p_square_cumulative_distribution_impl">weighted_p_square_cumulative_distribution_impl</a></code> 5652 </p> 5653<div class="variablelist"> 5654<p class="title"><b></b></p> 5655<dl class="variablelist"> 5656<dt><span class="term">Result Type</span></dt> 5657<dd> 5658<p> 5659</p> 5660<pre class="programlisting"><span class="identifier">iterator_range</span><span class="special"><</span> 5661 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span> 5662 <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span> 5663 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><span class="identifier">weighted_sample</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 5664 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span><span class="identifier">weighted_sample</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">>::</span><span class="identifier">result_type</span> 5665 <span class="special">></span> 5666 <span class="special">>::</span><span class="identifier">iterator</span> 5667<span class="special">></span> 5668</pre> 5669<p> 5670 where <code class="computeroutput"><span class="identifier">weighted_sample</span></code> 5671 is <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span></code> 5672 </p> 5673</dd> 5674<dt><span class="term">Depends On</span></dt> 5675<dd><p> 5676 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_or_weights</span></code> 5677 </p></dd> 5678<dt><span class="term">Variants</span></dt> 5679<dd><p> 5680 <span class="emphasis"><em>none</em></span> 5681 </p></dd> 5682<dt><span class="term">Initialization Parameters</span></dt> 5683<dd><p> 5684 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span></code> 5685 </p></dd> 5686<dt><span class="term">Accumulator Parameters</span></dt> 5687<dd><p> 5688 <code class="computeroutput"><span class="identifier">weight</span></code> 5689 </p></dd> 5690<dt><span class="term">Extractor Parameters</span></dt> 5691<dd><p> 5692 <span class="emphasis"><em>none</em></span> 5693 </p></dd> 5694<dt><span class="term">Accumulator Complexity</span></dt> 5695<dd><p> 5696 TODO 5697 </p></dd> 5698<dt><span class="term">Extractor Complexity</span></dt> 5699<dd><p> 5700 O(N) where N is <code class="computeroutput"><span class="identifier">num_cells</span></code> 5701 </p></dd> 5702</dl> 5703</div> 5704<p> 5705 <span class="bold"><strong>Header</strong></span> 5706 </p> 5707<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_p_square_cumul_dist_hpp" title="Header <boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp>">boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp</a></code><span class="special">></span> 5708</pre> 5709<p> 5710 <span class="bold"><strong>Example</strong></span> 5711 </p> 5712<pre class="programlisting"><span class="comment">// tolerance in %</span> 5713<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span> 5714 5715<span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">accumulator_t</span><span class="special">;</span> 5716 5717<span class="identifier">accumulator_t</span> <span class="identifier">acc_upper</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span> <span class="special">=</span> <span class="number">100</span><span class="special">);</span> 5718<span class="identifier">accumulator_t</span> <span class="identifier">acc_lower</span><span class="special">(</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">::</span><span class="identifier">num_cells</span> <span class="special">=</span> <span class="number">100</span><span class="special">);</span> 5719 5720<span class="comment">// two random number generators</span> 5721<span class="keyword">double</span> <span class="identifier">mu_upper</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> 5722<span class="keyword">double</span> <span class="identifier">mu_lower</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span> 5723<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 5724<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma_upper</span><span class="special">(</span><span class="identifier">mu_upper</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 5725<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma_lower</span><span class="special">(</span><span class="identifier">mu_lower</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 5726<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal_upper</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma_upper</span><span class="special">);</span> 5727<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal_lower</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma_lower</span><span class="special">);</span> 5728 5729<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5730<span class="special">{</span> 5731 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">normal_upper</span><span class="special">();</span> 5732 <span class="identifier">acc_upper</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu_upper</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu_upper</span><span class="special">)));</span> 5733<span class="special">}</span> 5734 5735<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5736<span class="special">{</span> 5737 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">normal_lower</span><span class="special">();</span> 5738 <span class="identifier">acc_lower</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu_lower</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu_lower</span><span class="special">)));</span> 5739<span class="special">}</span> 5740 5741<span class="keyword">typedef</span> <span class="identifier">iterator_range</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">></span> <span class="special">>::</span><span class="identifier">iterator</span> <span class="special">></span> <span class="identifier">histogram_type</span><span class="special">;</span> 5742<span class="identifier">histogram_type</span> <span class="identifier">histogram_upper</span> <span class="special">=</span> <span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">(</span><span class="identifier">acc_upper</span><span class="special">);</span> 5743<span class="identifier">histogram_type</span> <span class="identifier">histogram_lower</span> <span class="special">=</span> <span class="identifier">weighted_p_square_cumulative_distribution</span><span class="special">(</span><span class="identifier">acc_lower</span><span class="special">);</span> 5744 5745<span class="comment">// Note that applying importance sampling results in a region of the distribution </span> 5746<span class="comment">// to be estimated more accurately and another region to be estimated less accurately</span> 5747<span class="comment">// than without importance sampling, i.e., with unweighted samples</span> 5748 5749<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">histogram_upper</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5750<span class="special">{</span> 5751 <span class="comment">// problem with small results: epsilon is relative (in percent), not absolute!</span> 5752 5753 <span class="comment">// check upper region of distribution</span> 5754 <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">histogram_upper</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span> <span class="special">></span> <span class="number">0.1</span> <span class="special">)</span> 5755 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="number">1.0</span> <span class="special">+</span> <span class="identifier">erf</span><span class="special">(</span> <span class="identifier">histogram_upper</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">first</span> <span class="special">/</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="number">2.0</span><span class="special">)</span> <span class="special">)),</span> <span class="identifier">histogram_upper</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5756 <span class="comment">// check lower region of distribution</span> 5757 <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">histogram_lower</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span> <span class="special"><</span> <span class="special">-</span><span class="number">0.1</span> <span class="special">)</span> 5758 <span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="number">0.5</span> <span class="special">*</span> <span class="special">(</span><span class="number">1.0</span> <span class="special">+</span> <span class="identifier">erf</span><span class="special">(</span> <span class="identifier">histogram_lower</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">first</span> <span class="special">/</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="number">2.0</span><span class="special">)</span> <span class="special">)),</span> <span class="identifier">histogram_lower</span><span class="special">[</span><span class="identifier">i</span><span class="special">].</span><span class="identifier">second</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5759<span class="special">}</span> 5760</pre> 5761<p> 5762 <span class="bold"><strong>See also</strong></span> 5763 </p> 5764<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5765<li class="listitem"> 5766 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_44.html" title="Struct template weighted_p_square_cumulative_distribution_impl">weighted_p_square_cumulative_distribution_impl</a></code> 5767 </li> 5768<li class="listitem"> 5769 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5770 </li> 5771<li class="listitem"> 5772 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5773 </li> 5774</ul></div> 5775</div> 5776<div class="section"> 5777<div class="titlepage"><div><div><h4 class="title"> 5778<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_p_square_quantile" title="weighted_p_square_quantile and variants">weighted_p_square_quantile 5779 <span class="emphasis"><em>and variants</em></span></a> 5780</h4></div></div></div> 5781<p> 5782 Single quantile estimation with the <code class="literal">P^2</code> algorithm. For 5783 more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_45.html" title="Struct template weighted_p_square_quantile_impl">weighted_p_square_quantile_impl</a></code> 5784 </p> 5785<div class="variablelist"> 5786<p class="title"><b></b></p> 5787<dl class="variablelist"> 5788<dt><span class="term">Result Type</span></dt> 5789<dd> 5790<p> 5791</p> 5792<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 5793 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 5794 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 5795<span class="special">>::</span><span class="identifier">result_type</span> 5796</pre> 5797<p> 5798 </p> 5799</dd> 5800<dt><span class="term">Depends On</span></dt> 5801<dd><p> 5802 <code class="computeroutput"><span class="identifier">count</span></code> <br> <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 5803 </p></dd> 5804<dt><span class="term">Variants</span></dt> 5805<dd><p> 5806 <code class="computeroutput"><span class="identifier">weighted_p_square_quantile_for_median</span></code> 5807 </p></dd> 5808<dt><span class="term">Initialization Parameters</span></dt> 5809<dd><p> 5810 <code class="computeroutput"><span class="identifier">quantile_probability</span></code>, 5811 which defaults to <code class="computeroutput"><span class="number">0.5</span></code>. 5812 (Note: for <code class="computeroutput"><span class="identifier">weighted_p_square_quantile_for_median</span></code>, 5813 the <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 5814 parameter is ignored and is always <code class="computeroutput"><span class="number">0.5</span></code>.) 5815 </p></dd> 5816<dt><span class="term">Accumulator Parameters</span></dt> 5817<dd><p> 5818 <code class="computeroutput"><span class="identifier">weight</span></code> 5819 </p></dd> 5820<dt><span class="term">Extractor Parameters</span></dt> 5821<dd><p> 5822 <span class="emphasis"><em>none</em></span> 5823 </p></dd> 5824<dt><span class="term">Accumulator Complexity</span></dt> 5825<dd><p> 5826 TODO 5827 </p></dd> 5828<dt><span class="term">Extractor Complexity</span></dt> 5829<dd><p> 5830 O(1) 5831 </p></dd> 5832</dl> 5833</div> 5834<p> 5835 <span class="bold"><strong>Header</strong></span> 5836 </p> 5837<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_p_square_quantile_hpp" title="Header <boost/accumulators/statistics/weighted_p_square_quantile.hpp>">boost/accumulators/statistics/weighted_p_square_quantile.hpp</a></code><span class="special">></span> 5838</pre> 5839<p> 5840 <span class="bold"><strong>Example</strong></span> 5841 </p> 5842<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_p_square_quantile</span><span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">accumulator_t</span><span class="special">;</span> 5843 5844<span class="comment">// tolerance in %</span> 5845<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 5846 5847<span class="comment">// some random number generators</span> 5848<span class="keyword">double</span> <span class="identifier">mu4</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span> 5849<span class="keyword">double</span> <span class="identifier">mu5</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span> 5850<span class="keyword">double</span> <span class="identifier">mu6</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> 5851<span class="keyword">double</span> <span class="identifier">mu7</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> 5852<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 5853<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma4</span><span class="special">(</span><span class="identifier">mu4</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5854<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma5</span><span class="special">(</span><span class="identifier">mu5</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5855<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma6</span><span class="special">(</span><span class="identifier">mu6</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5856<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma7</span><span class="special">(</span><span class="identifier">mu7</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> 5857<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal4</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma4</span><span class="special">);</span> 5858<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal5</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma5</span><span class="special">);</span> 5859<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal6</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma6</span><span class="special">);</span> 5860<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal7</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma7</span><span class="special">);</span> 5861 5862<span class="identifier">accumulator_t</span> <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">);</span> 5863<span class="identifier">accumulator_t</span> <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">);</span> 5864<span class="identifier">accumulator_t</span> <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">);</span> 5865<span class="identifier">accumulator_t</span> <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">);</span> 5866 5867<span class="identifier">accumulator_t</span> <span class="identifier">acc4</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">);</span> 5868<span class="identifier">accumulator_t</span> <span class="identifier">acc5</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">);</span> 5869<span class="identifier">accumulator_t</span> <span class="identifier">acc6</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">);</span> 5870<span class="identifier">accumulator_t</span> <span class="identifier">acc7</span><span class="special">(</span><span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">);</span> 5871 5872 5873<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 5874<span class="special">{</span> 5875 <span class="keyword">double</span> <span class="identifier">sample</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 5876 <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 5877 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 5878 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 5879 <span class="identifier">acc3</span><span class="special">(</span><span class="identifier">sample</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">);</span> 5880 5881 <span class="keyword">double</span> <span class="identifier">sample4</span> <span class="special">=</span> <span class="identifier">normal4</span><span class="special">();</span> 5882 <span class="keyword">double</span> <span class="identifier">sample5</span> <span class="special">=</span> <span class="identifier">normal5</span><span class="special">();</span> 5883 <span class="keyword">double</span> <span class="identifier">sample6</span> <span class="special">=</span> <span class="identifier">normal6</span><span class="special">();</span> 5884 <span class="keyword">double</span> <span class="identifier">sample7</span> <span class="special">=</span> <span class="identifier">normal7</span><span class="special">();</span> 5885 <span class="identifier">acc4</span><span class="special">(</span><span class="identifier">sample4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu4</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample4</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu4</span><span class="special">)));</span> 5886 <span class="identifier">acc5</span><span class="special">(</span><span class="identifier">sample5</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu5</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample5</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu5</span><span class="special">)));</span> 5887 <span class="identifier">acc6</span><span class="special">(</span><span class="identifier">sample6</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu6</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample6</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu6</span><span class="special">)));</span> 5888 <span class="identifier">acc7</span><span class="special">(</span><span class="identifier">sample7</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu7</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample7</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu7</span><span class="special">)));</span> 5889<span class="special">}</span> 5890 5891<span class="comment">// check for uniform distribution with weight = 1</span> 5892<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">),</span> <span class="number">0.001</span><span class="special">,</span> <span class="number">15</span> <span class="special">);</span> 5893<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">0.025</span><span class="special">,</span> <span class="number">5</span> <span class="special">);</span> 5894<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">0.975</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5895<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">),</span> <span class="number">0.999</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5896 5897<span class="comment">// check for shifted standard normal distribution ("importance sampling")</span> 5898<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">),</span> <span class="special">-</span><span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5899<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc5</span><span class="special">),</span> <span class="special">-</span><span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5900<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc6</span><span class="special">),</span> <span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5901<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_p_square_quantile</span><span class="special">(</span><span class="identifier">acc7</span><span class="special">),</span> <span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 5902</pre> 5903<p> 5904 <span class="bold"><strong>See also</strong></span> 5905 </p> 5906<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5907<li class="listitem"> 5908 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_45.html" title="Struct template weighted_p_square_quantile_impl">weighted_p_square_quantile_impl</a></code> 5909 </li> 5910<li class="listitem"> 5911 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 5912 </li> 5913<li class="listitem"> 5914 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 5915 </li> 5916</ul></div> 5917</div> 5918<div class="section"> 5919<div class="titlepage"><div><div><h4 class="title"> 5920<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_peaks_over_threshold"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_peaks_over_threshold" title="weighted_peaks_over_threshold and variants">weighted_peaks_over_threshold 5921 <span class="emphasis"><em>and variants</em></span></a> 5922</h4></div></div></div> 5923<p> 5924 Weighted peaks over threshold method for weighted quantile and weighted 5925 tail mean estimation. For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_46.html" title="Struct template weighted_peaks_over_threshold_impl">weighted_peaks_over_threshold_impl</a></code> 5926 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_47.html" title="Struct template weighted_peaks_over_threshold_prob_impl">weighted_peaks_over_threshold_prob_impl</a></code>. 5927 </p> 5928<p> 5929 Both <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_peaks_over_threshold</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_peaks_over_threshold_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 5930 satisfy the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_peaks_over_threshold</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> feature and can be extracted using 5931 the <code class="computeroutput"><span class="identifier">weighted_peaks_over_threshold</span><span class="special">()</span></code> extractor. 5932 </p> 5933<div class="variablelist"> 5934<p class="title"><b></b></p> 5935<dl class="variablelist"> 5936<dt><span class="term">Result Type</span></dt> 5937<dd> 5938<p> 5939 <code class="computeroutput"><span class="identifier">tuple</span><span class="special"><</span><span class="identifier">float_type</span><span class="special">,</span> 5940 <span class="identifier">float_type</span><span class="special">,</span> 5941 <span class="identifier">float_type</span><span class="special">></span></code> 5942 where <code class="computeroutput"><span class="identifier">float_type</span></code> 5943 is 5944</p> 5945<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 5946 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 5947 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 5948<span class="special">>::</span><span class="identifier">result_type</span> 5949</pre> 5950<p> 5951 </p> 5952</dd> 5953<dt><span class="term">Depends On</span></dt> 5954<dd><p> 5955 <code class="computeroutput"><span class="identifier">weighted_peaks_over_threshold</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 5956 depends on <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 5957 <br> <code class="computeroutput"><span class="identifier">weighted_peaks_over_threshold_prob</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 5958 depends on <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> 5959 and <code class="computeroutput"><span class="identifier">tail_weights</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 5960 </p></dd> 5961<dt><span class="term">Variants</span></dt> 5962<dd><p> 5963 <code class="computeroutput"><span class="identifier">weighted_peaks_over_threshold_prob</span></code> 5964 </p></dd> 5965<dt><span class="term">Initialization Parameters</span></dt> 5966<dd><p> 5967 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold</span><span class="special">::</span><span class="identifier">threshold_value</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">peaks_over_threshold_prob</span><span class="special">::</span><span class="identifier">threshold_probability</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 5968 </p></dd> 5969<dt><span class="term">Accumulator Parameters</span></dt> 5970<dd><p> 5971 <code class="computeroutput"><span class="identifier">weight</span></code> 5972 </p></dd> 5973<dt><span class="term">Extractor Parameters</span></dt> 5974<dd><p> 5975 <span class="emphasis"><em>none</em></span> 5976 </p></dd> 5977<dt><span class="term">Accumulator Complexity</span></dt> 5978<dd><p> 5979 TODO 5980 </p></dd> 5981<dt><span class="term">Extractor Complexity</span></dt> 5982<dd><p> 5983 O(1) 5984 </p></dd> 5985</dl> 5986</div> 5987<p> 5988 <span class="bold"><strong>Header</strong></span> 5989 </p> 5990<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_peaks_over_threshold_hpp" title="Header <boost/accumulators/statistics/weighted_peaks_over_threshold.hpp>">boost/accumulators/statistics/weighted_peaks_over_threshold.hpp</a></code><span class="special">></span> 5991</pre> 5992<p> 5993 <span class="bold"><strong>See also</strong></span> 5994 </p> 5995<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5996<li class="listitem"> 5997 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_46.html" title="Struct template weighted_peaks_over_threshold_impl">weighted_peaks_over_threshold_impl</a></code> 5998 </li> 5999<li class="listitem"> 6000 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_47.html" title="Struct template weighted_peaks_over_threshold_prob_impl">weighted_peaks_over_threshold_prob_impl</a></code> 6001 </li> 6002<li class="listitem"> 6003 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 6004 </li> 6005<li class="listitem"> 6006 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 6007 </li> 6008</ul></div> 6009</div> 6010<div class="section"> 6011<div class="titlepage"><div><div><h4 class="title"> 6012<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_skewness"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_skewness" title="weighted_skewness">weighted_skewness</a> 6013</h4></div></div></div> 6014<p> 6015 The skewness of a sample distribution is defined as the ratio of the 3rd 6016 central moment and the <code class="literal">3/2</code>-th power of the 2nd central 6017 moment (the variance) of the samples 3. The skewness estimator for weighted 6018 samples is formally identical to the estimator for unweighted samples, 6019 except that the weighted counterparts of all measures it depends on are 6020 to be taken. 6021 </p> 6022<p> 6023 For implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_skewness_impl.html" title="Struct template weighted_skewness_impl">weighted_skewness_impl</a></code>. 6024 </p> 6025<div class="variablelist"> 6026<p class="title"><b></b></p> 6027<dl class="variablelist"> 6028<dt><span class="term">Result Type</span></dt> 6029<dd> 6030<p> 6031</p> 6032<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 6033 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 6034 <span class="special">,</span> <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 6035<span class="special">>::</span><span class="identifier">result_type</span> 6036</pre> 6037<p> 6038 </p> 6039</dd> 6040<dt><span class="term">Depends On</span></dt> 6041<dd><p> 6042 <code class="computeroutput"><span class="identifier">weighted_mean</span></code> <br> 6043 <code class="computeroutput"><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 6044 <br> <code class="computeroutput"><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">3</span><span class="special">></span></code> 6045 </p></dd> 6046<dt><span class="term">Variants</span></dt> 6047<dd><p> 6048 <span class="emphasis"><em>none</em></span> 6049 </p></dd> 6050<dt><span class="term">Initialization Parameters</span></dt> 6051<dd><p> 6052 <span class="emphasis"><em>none</em></span> 6053 </p></dd> 6054<dt><span class="term">Accumulator Parameters</span></dt> 6055<dd><p> 6056 <code class="computeroutput"><span class="identifier">weight</span></code> 6057 </p></dd> 6058<dt><span class="term">Extractor Parameters</span></dt> 6059<dd><p> 6060 <span class="emphasis"><em>none</em></span> 6061 </p></dd> 6062<dt><span class="term">Accumulator Complexity</span></dt> 6063<dd><p> 6064 O(1) 6065 </p></dd> 6066<dt><span class="term">Extractor Complexity</span></dt> 6067<dd><p> 6068 O(1) 6069 </p></dd> 6070</dl> 6071</div> 6072<p> 6073 <span class="bold"><strong>Header</strong></span> 6074 </p> 6075<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_skewness_hpp" title="Header <boost/accumulators/statistics/weighted_skewness.hpp>">boost/accumulators/statistics/weighted_skewness.hpp</a></code><span class="special">></span> 6076</pre> 6077<p> 6078 <span class="bold"><strong>Example</strong></span> 6079 </p> 6080<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_skewness</span><span class="special">>,</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 6081 6082<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 6083<span class="identifier">acc2</span><span class="special">(</span><span class="number">7</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 6084<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 6085<span class="identifier">acc2</span><span class="special">(</span><span class="number">9</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 6086<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> 6087 6088<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">42.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 6089<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">212.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 6090<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">3</span><span class="special">>(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1350.</span><span class="special">/</span><span class="number">11.</span> <span class="special">);</span> 6091<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">weighted_skewness</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1.30708406282</span><span class="special">,</span> <span class="number">1e-6</span> <span class="special">);</span> 6092</pre> 6093<p> 6094 <span class="bold"><strong>See also</strong></span> 6095 </p> 6096<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6097<li class="listitem"> 6098 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_skewness_impl.html" title="Struct template weighted_skewness_impl">weighted_skewness_impl</a></code> 6099 </li> 6100<li class="listitem"> 6101 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean" title="weighted_mean and variants"><code class="literal">weighted_mean</code></a> 6102 </li> 6103<li class="listitem"> 6104 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment" title="weighted_moment"><code class="literal">weighted_moment</code></a> 6105 </li> 6106</ul></div> 6107</div> 6108<div class="section"> 6109<div class="titlepage"><div><div><h4 class="title"> 6110<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_sum"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_sum" title="weighted_sum and variants">weighted_sum 6111 <span class="emphasis"><em>and variants</em></span></a> 6112</h4></div></div></div> 6113<p> 6114 For summing the weighted samples or variates. All of the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_of_variates</span><span class="special"><></span></code> 6115 features can be extracted with the <code class="computeroutput"><span class="identifier">weighted_sum_of_variates</span><span class="special">()</span></code> extractor. Variants that implement the 6116 Kahan summation algorithm are also provided. 6117 </p> 6118<div class="variablelist"> 6119<p class="title"><b></b></p> 6120<dl class="variablelist"> 6121<dt><span class="term">Result Type</span></dt> 6122<dd><p> 6123 <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span></code> for summing weighted 6124 samples <br> <code class="computeroutput"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span></code> 6125 for summing weighted variates 6126 </p></dd> 6127<dt><span class="term">Depends On</span></dt> 6128<dd><p> 6129 <span class="emphasis"><em>none</em></span> 6130 </p></dd> 6131<dt><span class="term">Variants</span></dt> 6132<dd><p> 6133 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_of_variates</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 6134 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_kahan</span></code> (a.k.a. tag::weighted_sum(kahan)) 6135 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_of_variates_kahan</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> <br> 6136 </p></dd> 6137<dt><span class="term">Initialization Parameters</span></dt> 6138<dd><p> 6139 <span class="emphasis"><em>none</em></span> 6140 </p></dd> 6141<dt><span class="term">Accumulator Parameters</span></dt> 6142<dd><p> 6143 <code class="computeroutput"><span class="identifier">weight</span></code> <br> <code class="computeroutput"><em class="replaceable"><code>variate-tag</code></em></code> 6144 for summing variates 6145 </p></dd> 6146<dt><span class="term">Extractor Parameters</span></dt> 6147<dd><p> 6148 <span class="emphasis"><em>none</em></span> 6149 </p></dd> 6150<dt><span class="term">Accumulator Complexity</span></dt> 6151<dd><p> 6152 O(1). Note that the Kahan sum performs four floating-point sum operations 6153 per accumulated value, whereas the naive sum performs only one. 6154 </p></dd> 6155<dt><span class="term">Extractor Complexity</span></dt> 6156<dd><p> 6157 O(1) 6158 </p></dd> 6159</dl> 6160</div> 6161<p> 6162 <span class="bold"><strong>Header</strong></span> 6163 </p> 6164<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_sum_hpp" title="Header <boost/accumulators/statistics/weighted_sum.hpp>">boost/accumulators/statistics/weighted_sum.hpp</a></code><span class="special">></span> 6165<span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_sum_kahan_hpp" title="Header <boost/accumulators/statistics/weighted_sum_kahan.hpp>">boost/accumulators/statistics/weighted_sum_kahan.hpp</a></code><span class="special">></span> 6166</pre> 6167<p> 6168 <span class="bold"><strong>Example</strong></span> 6169 </p> 6170<pre class="programlisting"><span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_of_variates</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">int</span><span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 6171 6172<span class="identifier">acc</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 6173<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weighted_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6174<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">6</span><span class="special">,</span> <span class="identifier">weighted_sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6175 6176<span class="identifier">acc</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">6</span><span class="special">);</span> 6177<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="identifier">weighted_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6178<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">24</span><span class="special">,</span> <span class="identifier">weighted_sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6179 6180<span class="identifier">acc</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">6</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="number">9</span><span class="special">);</span> 6181<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">32</span><span class="special">,</span> <span class="identifier">weighted_sum</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6182<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">78</span><span class="special">,</span> <span class="identifier">weighted_sum_of_variates</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6183 6184<span class="comment">// demonstrate weighted Kahan summation</span> 6185<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">float</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_sum_kahan</span><span class="special">>,</span> <span class="keyword">float</span> <span class="special">></span> <span class="identifier">acc</span><span class="special">;</span> 6186<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">0.0f</span><span class="special">,</span> <span class="identifier">weighted_sum_kahan</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6187<span class="keyword">for</span> <span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">1e6</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span> 6188 <span class="identifier">acc</span><span class="special">(</span><span class="number">1.0f</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1e-6f</span><span class="special">);</span> 6189<span class="special">}</span> 6190<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">1.0f</span><span class="special">,</span> <span class="identifier">weighted_sum_kahan</span><span class="special">(</span><span class="identifier">acc</span><span class="special">));</span> 6191</pre> 6192<p> 6193 <span class="bold"><strong>See also</strong></span> 6194 </p> 6195<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6196<li class="listitem"> 6197 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_sum_impl.html" title="Struct template weighted_sum_impl">weighted_sum_impl</a></code> 6198 </li> 6199<li class="listitem"> 6200 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_sum_impl.html" title="Struct template weighted_sum_impl">weighted_sum_kahan_impl</a></code> 6201 </li> 6202</ul></div> 6203</div> 6204<div class="section"> 6205<div class="titlepage"><div><div><h4 class="title"> 6206<a name="accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_weighted_tail_mean"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_weighted_tail_mean" title="non_coherent_weighted_tail_mean">non_coherent_weighted_tail_mean</a> 6207</h4></div></div></div> 6208<p> 6209 Estimation of the (non-coherent) weighted tail mean based on order statistics 6210 (for both left and right tails). The left non-coherent weighted tail mean 6211 feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code>, 6212 and the right non-choherent weighted tail mean feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code>. 6213 They both share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_non_coherent_tail_mean</span></code> 6214 feature with the unweighted non-coherent tail mean accumulators and can 6215 be extracted with either the <code class="computeroutput"><span class="identifier">non_coherent_tail_mean</span><span class="special">()</span></code> or the <code class="computeroutput"><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">()</span></code> extractors. For more implementation details, 6216 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/non_1_3_2_6_3_59_1_1_22_18.html" title="Struct template non_coherent_weighted_tail_mean_impl">non_coherent_weighted_tail_mean_impl</a></code>. 6217 </p> 6218<div class="variablelist"> 6219<p class="title"><b></b></p> 6220<dl class="variablelist"> 6221<dt><span class="term">Result Type</span></dt> 6222<dd> 6223<p> 6224</p> 6225<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 6226 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 6227 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 6228<span class="special">>::</span><span class="identifier">result_type</span> 6229</pre> 6230<p> 6231 </p> 6232</dd> 6233<dt><span class="term">Depends On</span></dt> 6234<dd><p> 6235 <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> <br> 6236 <code class="computeroutput"><span class="identifier">tail_weights</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 6237 </p></dd> 6238<dt><span class="term">Variants</span></dt> 6239<dd><p> 6240 <code class="computeroutput"><span class="identifier">abstract_non_coherent_tail_mean</span></code> 6241 </p></dd> 6242<dt><span class="term">Initialization Parameters</span></dt> 6243<dd><p> 6244 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 6245 </p></dd> 6246<dt><span class="term">Accumulator Parameters</span></dt> 6247<dd><p> 6248 <span class="emphasis"><em>none</em></span> 6249 </p></dd> 6250<dt><span class="term">Extractor Parameters</span></dt> 6251<dd><p> 6252 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 6253 </p></dd> 6254<dt><span class="term">Accumulator Complexity</span></dt> 6255<dd><p> 6256 O(log N), where N is the cache size 6257 </p></dd> 6258<dt><span class="term">Extractor Complexity</span></dt> 6259<dd><p> 6260 O(N log N), where N is the cache size 6261 </p></dd> 6262</dl> 6263</div> 6264<p> 6265 <span class="bold"><strong>Header</strong></span> 6266 </p> 6267<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_tail_mean_hpp" title="Header <boost/accumulators/statistics/weighted_tail_mean.hpp>">boost/accumulators/statistics/weighted_tail_mean.hpp</a></code><span class="special">></span> 6268</pre> 6269<p> 6270 <span class="bold"><strong>Example</strong></span> 6271 </p> 6272<pre class="programlisting"><span class="comment">// tolerance in %</span> 6273<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 6274 6275<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">100000</span><span class="special">;</span> <span class="comment">// number of MC steps</span> 6276<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">25000</span><span class="special">;</span> <span class="comment">// cache size</span> 6277 6278<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> 6279 <span class="identifier">acc0</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6280<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> 6281 <span class="identifier">acc1</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6282 6283<span class="comment">// random number generators</span> 6284<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 6285 6286<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 6287<span class="special">{</span> 6288 <span class="keyword">double</span> <span class="identifier">smpl</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">rng</span><span class="special">());</span> 6289 <span class="identifier">acc0</span><span class="special">(</span><span class="identifier">smpl</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.</span><span class="special">/</span><span class="identifier">smpl</span><span class="special">);</span> 6290<span class="special">}</span> 6291 6292<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 6293<span class="special">{</span> 6294 <span class="keyword">double</span> <span class="identifier">smpl</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">();</span> 6295 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">smpl</span><span class="special">*</span><span class="identifier">smpl</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">smpl</span><span class="special">);</span> 6296<span class="special">}</span> 6297 6298<span class="comment">// check uniform distribution</span> 6299<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.95</span><span class="special">),</span> <span class="number">0.975</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6300<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">0.9875</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6301<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">),</span> <span class="number">0.995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6302<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc0</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">0.9995</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6303<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.05</span><span class="special">),</span> <span class="number">0.025</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6304<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="number">0.0125</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6305<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.01</span><span class="special">),</span> <span class="number">0.005</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6306<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">non_coherent_weighted_tail_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="number">0.0005</span><span class="special">,</span> <span class="number">5</span><span class="special">*</span><span class="identifier">epsilon</span> <span class="special">);</span> 6307</pre> 6308<p> 6309 <span class="bold"><strong>See also</strong></span> 6310 </p> 6311<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6312<li class="listitem"> 6313 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/non_1_3_2_6_3_59_1_1_22_18.html" title="Struct template non_coherent_weighted_tail_mean_impl">non_coherent_weighted_tail_mean_impl</a></code> 6314 </li> 6315<li class="listitem"> 6316 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 6317 </li> 6318<li class="listitem"> 6319 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 6320 </li> 6321</ul></div> 6322</div> 6323<div class="section"> 6324<div class="titlepage"><div><div><h4 class="title"> 6325<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_quantile"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_quantile" title="weighted_tail_quantile">weighted_tail_quantile</a> 6326</h4></div></div></div> 6327<p> 6328 Tail quantile estimation based on order statistics of weighted samples 6329 (for both left and right tails). The left weighted tail quantile feature 6330 is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span></code>, 6331 and the right weighted tail quantile feature is <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span></code>. They both share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">quantile</span></code> feature with the unweighted 6332 tail quantile accumulators and can be extracted with either the <code class="computeroutput"><span class="identifier">quantile</span><span class="special">()</span></code> 6333 or the <code class="computeroutput"><span class="identifier">weighted_tail_quantile</span><span class="special">()</span></code> extractors. For more implementation details, 6334 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_51.html" title="Struct template weighted_tail_quantile_impl">weighted_tail_quantile_impl</a></code> 6335 </p> 6336<div class="variablelist"> 6337<p class="title"><b></b></p> 6338<dl class="variablelist"> 6339<dt><span class="term">Result Type</span></dt> 6340<dd> 6341<p> 6342</p> 6343<pre class="programlisting"><em class="replaceable"><code>sample-type</code></em> 6344</pre> 6345<p> 6346 </p> 6347</dd> 6348<dt><span class="term">Depends On</span></dt> 6349<dd><p> 6350 <code class="computeroutput"><span class="identifier">sum_of_weights</span></code> <br> 6351 <code class="computeroutput"><span class="identifier">tail_weights</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 6352 </p></dd> 6353<dt><span class="term">Variants</span></dt> 6354<dd><p> 6355 <span class="emphasis"><em>none</em></span> 6356 </p></dd> 6357<dt><span class="term">Initialization Parameters</span></dt> 6358<dd><p> 6359 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 6360 </p></dd> 6361<dt><span class="term">Accumulator Parameters</span></dt> 6362<dd><p> 6363 <span class="emphasis"><em>none</em></span> 6364 </p></dd> 6365<dt><span class="term">Extractor Parameters</span></dt> 6366<dd><p> 6367 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 6368 </p></dd> 6369<dt><span class="term">Accumulator Complexity</span></dt> 6370<dd><p> 6371 O(log N), where N is the cache size 6372 </p></dd> 6373<dt><span class="term">Extractor Complexity</span></dt> 6374<dd><p> 6375 O(N log N), where N is the cache size 6376 </p></dd> 6377</dl> 6378</div> 6379<p> 6380 <span class="bold"><strong>Header</strong></span> 6381 </p> 6382<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_tail_quantile_hpp" title="Header <boost/accumulators/statistics/weighted_tail_quantile.hpp>">boost/accumulators/statistics/weighted_tail_quantile.hpp</a></code><span class="special">></span> 6383</pre> 6384<p> 6385 <span class="bold"><strong>Example</strong></span> 6386 </p> 6387<pre class="programlisting"><span class="comment">// tolerance in %</span> 6388<span class="keyword">double</span> <span class="identifier">epsilon</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 6389 6390<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">100000</span><span class="special">;</span> <span class="comment">// number of MC steps</span> 6391<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">20000</span><span class="special">;</span> <span class="comment">// cache size</span> 6392 6393<span class="keyword">double</span> <span class="identifier">mu1</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> 6394<span class="keyword">double</span> <span class="identifier">mu2</span> <span class="special">=</span> <span class="special">-</span><span class="number">1.0</span><span class="special">;</span> 6395<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 6396<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma1</span><span class="special">(</span><span class="identifier">mu1</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 6397<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma2</span><span class="special">(</span><span class="identifier">mu2</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 6398<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal1</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma1</span><span class="special">);</span> 6399<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal2</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma2</span><span class="special">);</span> 6400 6401<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_quantile</span><span class="special"><</span><span class="identifier">right</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> 6402 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span><span class="special">);</span> 6403 6404<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_quantile</span><span class="special"><</span><span class="identifier">left</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">double</span><span class="special">></span> 6405 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span><span class="special">);</span> 6406 6407<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 6408<span class="special">{</span> 6409 <span class="keyword">double</span> <span class="identifier">sample1</span> <span class="special">=</span> <span class="identifier">normal1</span><span class="special">();</span> 6410 <span class="keyword">double</span> <span class="identifier">sample2</span> <span class="special">=</span> <span class="identifier">normal2</span><span class="special">();</span> 6411 <span class="identifier">acc1</span><span class="special">(</span><span class="identifier">sample1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu1</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample1</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu1</span><span class="special">)));</span> 6412 <span class="identifier">acc2</span><span class="special">(</span><span class="identifier">sample2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span><span class="special">(-</span><span class="identifier">mu2</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">sample2</span> <span class="special">-</span> <span class="number">0.5</span> <span class="special">*</span> <span class="identifier">mu2</span><span class="special">)));</span> 6413<span class="special">}</span> 6414 6415<span class="comment">// check standard normal distribution</span> 6416<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.975</span><span class="special">),</span> <span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6417<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.999</span><span class="special">),</span> <span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6418<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.025</span><span class="special">),</span> <span class="special">-</span><span class="number">1.959963</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6419<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.001</span><span class="special">),</span> <span class="special">-</span><span class="number">3.090232</span><span class="special">,</span> <span class="identifier">epsilon</span> <span class="special">);</span> 6420</pre> 6421<p> 6422 <span class="bold"><strong>See also</strong></span> 6423 </p> 6424<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6425<li class="listitem"> 6426 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_51.html" title="Struct template weighted_tail_quantile_impl">weighted_tail_quantile_impl</a></code> 6427 </li> 6428<li class="listitem"> 6429 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.sum" title="sum and variants"><code class="literal">sum</code></a> 6430 </li> 6431<li class="listitem"> 6432 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 6433 </li> 6434</ul></div> 6435</div> 6436<div class="section"> 6437<div class="titlepage"><div><div><h4 class="title"> 6438<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_variate_means"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_tail_variate_means" title="weighted_tail_variate_means and variants">weighted_tail_variate_means 6439 <span class="emphasis"><em>and variants</em></span></a> 6440</h4></div></div></div> 6441<p> 6442 Estimation of the absolute and relative weighted tail variate means (for 6443 both left and right tails) The absolute weighted tail variate means has 6444 the feature <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">absolute_weighted_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> 6445 <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> and the relative weighted tail 6446 variate mean has the feature <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> 6447 <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code>. All absolute weighted tail 6448 variate mean features share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_absolute_tail_variate_means</span></code> 6449 feature with their unweighted variants and can be extracted with the <code class="computeroutput"><span class="identifier">tail_variate_means</span><span class="special">()</span></code> 6450 and <code class="computeroutput"><span class="identifier">weighted_tail_variate_means</span><span class="special">()</span></code> extractors. All the relative weighted 6451 tail variate mean features share the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">abstract_relative_tail_variate_means</span></code> 6452 feature with their unweighted variants and can be extracted with either 6453 the <code class="computeroutput"><span class="identifier">relative_tail_variate_means</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">()</span></code> extractors. 6454 </p> 6455<p> 6456 For more implementation details, see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_52.html" title="Struct template weighted_tail_variate_means_impl">weighted_tail_variate_means_impl</a></code> 6457 </p> 6458<div class="variablelist"> 6459<p class="title"><b></b></p> 6460<dl class="variablelist"> 6461<dt><span class="term">Result Type</span></dt> 6462<dd> 6463<p> 6464</p> 6465<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special"><</span> 6466 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 6467 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 6468 <span class="special">,</span> <em class="replaceable"><code>weight-type</code></em> 6469 <span class="special">>::</span><span class="identifier">result_type</span><span class="special">::</span><span class="identifier">iterator</span> 6470<span class="special">></span> 6471</pre> 6472<p> 6473 </p> 6474</dd> 6475<dt><span class="term">Depends On</span></dt> 6476<dd><p> 6477 <code class="computeroutput"><span class="identifier">non_coherent_weighted_tail_mean</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 6478 <br> <code class="computeroutput"><span class="identifier">tail_variate</span><span class="special"><</span><em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">,</span> <em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 6479 <br> <code class="computeroutput"><span class="identifier">tail_weights</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">></span></code> 6480 </p></dd> 6481<dt><span class="term">Variants</span></dt> 6482<dd><p> 6483 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">absolute_weighted_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 6484 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">,</span> <em class="replaceable"><code>variate-type</code></em><span class="special">,</span> <em class="replaceable"><code>variate-tag</code></em><span class="special">></span></code> 6485 </p></dd> 6486<dt><span class="term">Initialization Parameters</span></dt> 6487<dd><p> 6488 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">tail</span><span class="special"><</span><em class="replaceable"><code>left-or-right</code></em><span class="special">>::</span><span class="identifier">cache_size</span></code> 6489 </p></dd> 6490<dt><span class="term">Accumulator Parameters</span></dt> 6491<dd><p> 6492 <span class="emphasis"><em>none</em></span> 6493 </p></dd> 6494<dt><span class="term">Extractor Parameters</span></dt> 6495<dd><p> 6496 <code class="computeroutput"><span class="identifier">quantile_probability</span></code> 6497 </p></dd> 6498<dt><span class="term">Accumulator Complexity</span></dt> 6499<dd><p> 6500 O(log N), where N is the cache size 6501 </p></dd> 6502<dt><span class="term">Extractor Complexity</span></dt> 6503<dd><p> 6504 O(N log N), where N is the cache size 6505 </p></dd> 6506</dl> 6507</div> 6508<p> 6509 <span class="bold"><strong>Header</strong></span> 6510 </p> 6511<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_tail_variate_means_hpp" title="Header <boost/accumulators/statistics/weighted_tail_variate_means.hpp>">boost/accumulators/statistics/weighted_tail_variate_means.hpp</a></code><span class="special">></span> 6512</pre> 6513<p> 6514 <span class="bold"><strong>Example</strong></span> 6515 </p> 6516<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">5</span><span class="special">;</span> <span class="comment">// cache size</span> 6517 6518<span class="keyword">typedef</span> <span class="keyword">double</span> <span class="identifier">variate_type</span><span class="special">;</span> 6519<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">variate_type</span><span class="special">></span> <span class="identifier">variate_set_type</span><span class="special">;</span> 6520 6521<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_variate_means</span><span class="special"><</span><span class="identifier">right</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">relative</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> 6522 <span class="identifier">acc1</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6523<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_variate_means</span><span class="special"><</span><span class="identifier">right</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">absolute</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> 6524 <span class="identifier">acc2</span><span class="special">(</span> <span class="identifier">right_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6525<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_variate_means</span><span class="special"><</span><span class="identifier">left</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">relative</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> 6526 <span class="identifier">acc3</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6527<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_tail_variate_means</span><span class="special"><</span><span class="identifier">left</span><span class="special">,</span> <span class="identifier">variate_set_type</span><span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">covariate1</span><span class="special">>(</span><span class="identifier">absolute</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> 6528 <span class="identifier">acc4</span><span class="special">(</span> <span class="identifier">left_tail_cache_size</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">);</span> 6529 6530<span class="identifier">variate_set_type</span> <span class="identifier">cov1</span><span class="special">,</span> <span class="identifier">cov2</span><span class="special">,</span> <span class="identifier">cov3</span><span class="special">,</span> <span class="identifier">cov4</span><span class="special">,</span> <span class="identifier">cov5</span><span class="special">;</span> 6531<span class="keyword">double</span> <span class="identifier">c1</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">10.</span><span class="special">,</span> <span class="number">20.</span><span class="special">,</span> <span class="number">30.</span><span class="special">,</span> <span class="number">40.</span> <span class="special">};</span> <span class="comment">// 100</span> 6532<span class="keyword">double</span> <span class="identifier">c2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">26.</span><span class="special">,</span> <span class="number">4.</span><span class="special">,</span> <span class="number">17.</span><span class="special">,</span> <span class="number">3.</span> <span class="special">};</span> <span class="comment">// 50</span> 6533<span class="keyword">double</span> <span class="identifier">c3</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">46.</span><span class="special">,</span> <span class="number">64.</span><span class="special">,</span> <span class="number">40.</span><span class="special">,</span> <span class="number">50.</span> <span class="special">};</span> <span class="comment">// 200</span> 6534<span class="keyword">double</span> <span class="identifier">c4</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1.</span><span class="special">,</span> <span class="number">3.</span><span class="special">,</span> <span class="number">70.</span><span class="special">,</span> <span class="number">6.</span> <span class="special">};</span> <span class="comment">// 80</span> 6535<span class="keyword">double</span> <span class="identifier">c5</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">2.</span><span class="special">,</span> <span class="number">2.</span><span class="special">,</span> <span class="number">2.</span><span class="special">,</span> <span class="number">14.</span> <span class="special">};</span> <span class="comment">// 20</span> 6536<span class="identifier">cov1</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c1</span><span class="special">,</span> <span class="identifier">c1</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c1</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 6537<span class="identifier">cov2</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c2</span><span class="special">,</span> <span class="identifier">c2</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c2</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 6538<span class="identifier">cov3</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c3</span><span class="special">,</span> <span class="identifier">c3</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c3</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 6539<span class="identifier">cov4</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c4</span><span class="special">,</span> <span class="identifier">c4</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c4</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 6540<span class="identifier">cov5</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c5</span><span class="special">,</span> <span class="identifier">c5</span> <span class="special">+</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">c5</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">variate_type</span><span class="special">));</span> 6541 6542<span class="identifier">acc1</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.8</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 6543<span class="identifier">acc1</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 6544<span class="identifier">acc1</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 6545<span class="identifier">acc1</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 6546<span class="identifier">acc1</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 6547 6548<span class="identifier">acc2</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.8</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 6549<span class="identifier">acc2</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 6550<span class="identifier">acc2</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 6551<span class="identifier">acc2</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 6552<span class="identifier">acc2</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 6553 6554<span class="identifier">acc3</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.8</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 6555<span class="identifier">acc3</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 6556<span class="identifier">acc3</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 6557<span class="identifier">acc3</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 6558<span class="identifier">acc3</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 6559 6560<span class="identifier">acc4</span><span class="special">(</span><span class="number">100.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.8</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov1</span><span class="special">);</span> 6561<span class="identifier">acc4</span><span class="special">(</span> <span class="number">50.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov2</span><span class="special">);</span> 6562<span class="identifier">acc4</span><span class="special">(</span><span class="number">200.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov3</span><span class="special">);</span> 6563<span class="identifier">acc4</span><span class="special">(</span> <span class="number">80.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.1</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov4</span><span class="special">);</span> 6564<span class="identifier">acc4</span><span class="special">(</span> <span class="number">20.</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1.2</span><span class="special">,</span> <span class="identifier">covariate1</span> <span class="special">=</span> <span class="identifier">cov5</span><span class="special">);</span> 6565 6566<span class="comment">// check relative risk contributions</span> 6567<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">10</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">46</span><span class="special">)/(</span><span class="number">0.8</span><span class="special">*</span><span class="number">100</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6568<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">20</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">64</span><span class="special">)/(</span><span class="number">0.8</span><span class="special">*</span><span class="number">100</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6569<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">30</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">40</span><span class="special">)/(</span><span class="number">0.8</span><span class="special">*</span><span class="number">100</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6570<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">40</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">50</span><span class="special">)/(</span><span class="number">0.8</span><span class="special">*</span><span class="number">100</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6571<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">26</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/(</span><span class="number">0.9</span><span class="special">*</span><span class="number">50</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6572<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">4</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/(</span><span class="number">0.9</span><span class="special">*</span><span class="number">50</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6573<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">17</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/(</span><span class="number">0.9</span><span class="special">*</span><span class="number">50</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6574<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">3</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">14</span><span class="special">)/(</span><span class="number">0.9</span><span class="special">*</span><span class="number">50</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6575 6576<span class="comment">// check absolute risk contributions</span> 6577<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">10</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">46</span><span class="special">)/</span><span class="number">1.8</span> <span class="special">);</span> 6578<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">20</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">64</span><span class="special">)/</span><span class="number">1.8</span> <span class="special">);</span> 6579<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">30</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">40</span><span class="special">)/</span><span class="number">1.8</span> <span class="special">);</span> 6580<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.7</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="special">(</span><span class="number">0.8</span><span class="special">*</span><span class="number">40</span> <span class="special">+</span> <span class="number">1.0</span><span class="special">*</span><span class="number">50</span><span class="special">)/</span><span class="number">1.8</span> <span class="special">);</span> 6581<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">26</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/</span><span class="number">2.1</span> <span class="special">);</span> 6582<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">4</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/</span><span class="number">2.1</span> <span class="special">);</span> 6583<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">17</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">)/</span><span class="number">2.1</span> <span class="special">);</span> 6584<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.3</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="special">(</span><span class="number">0.9</span><span class="special">*</span><span class="number">3</span> <span class="special">+</span> <span class="number">1.2</span><span class="special">*</span><span class="number">14</span><span class="special">)/</span><span class="number">2.1</span> <span class="special">);</span> 6585 6586<span class="comment">// check relative risk contributions</span> 6587<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">46</span><span class="special">/(</span><span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6588<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">64</span><span class="special">/(</span><span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6589<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">40</span><span class="special">/(</span><span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6590<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">50</span><span class="special">/(</span><span class="number">1.0</span><span class="special">*</span><span class="number">200</span><span class="special">)</span> <span class="special">);</span> 6591<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/(</span><span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6592<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/(</span><span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6593<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/(</span><span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6594<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">relative_weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc3</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">14</span><span class="special">/(</span><span class="number">1.2</span><span class="special">*</span><span class="number">20</span><span class="special">)</span> <span class="special">);</span> 6595 6596<span class="comment">// check absolute risk contributions</span> 6597<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">46</span><span class="special">/</span><span class="number">1.0</span> <span class="special">);</span> 6598<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">64</span><span class="special">/</span><span class="number">1.0</span> <span class="special">);</span> 6599<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">40</span><span class="special">/</span><span class="number">1.0</span> <span class="special">);</span> 6600<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.9</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">1.0</span><span class="special">*</span><span class="number">50</span><span class="special">/</span><span class="number">1.0</span> <span class="special">);</span> 6601<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/</span><span class="number">1.2</span> <span class="special">);</span> 6602<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">1</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/</span><span class="number">1.2</span> <span class="special">);</span> 6603<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">2</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">2</span><span class="special">/</span><span class="number">1.2</span> <span class="special">);</span> 6604<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span> <span class="special">*(</span><span class="identifier">weighted_tail_variate_means</span><span class="special">(</span><span class="identifier">acc4</span><span class="special">,</span> <span class="identifier">quantile_probability</span> <span class="special">=</span> <span class="number">0.1</span><span class="special">).</span><span class="identifier">begin</span><span class="special">()</span> <span class="special">+</span> <span class="number">3</span><span class="special">),</span> <span class="number">1.2</span><span class="special">*</span><span class="number">14</span><span class="special">/</span><span class="number">1.2</span> <span class="special">);</span> 6605</pre> 6606<p> 6607 <span class="bold"><strong>See also</strong></span> 6608 </p> 6609<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6610<li class="listitem"> 6611 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/wei_1_3_2_6_3_59_1_1_22_52.html" title="Struct template weighted_tail_variate_means_impl">weighted_tail_variate_means_impl</a></code> 6612 </li> 6613<li class="listitem"> 6614 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.non_coherent_weighted_tail_mean" title="non_coherent_weighted_tail_mean"><code class="literal">non_coherent_weighted_tail_mean</code></a> 6615 </li> 6616<li class="listitem"> 6617 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail_variate" title="tail_variate"><code class="literal">tail_variate</code></a> 6618 </li> 6619<li class="listitem"> 6620 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.tail" title="tail"><code class="literal">tail</code></a> 6621 </li> 6622</ul></div> 6623</div> 6624<div class="section"> 6625<div class="titlepage"><div><div><h4 class="title"> 6626<a name="accumulators.user_s_guide.the_statistical_accumulators_library.weighted_variance"></a><a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_variance" title="weighted_variance and variants">weighted_variance 6627 <span class="emphasis"><em>and variants</em></span></a> 6628</h4></div></div></div> 6629<p> 6630 Lazy or iterative calculation of the weighted variance. The lazy calculation 6631 is associated with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_weighted_variance</span></code> 6632 feature, and the iterative calculation with the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span></code> 6633 feature. Both can be extracted using the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">()</span></code> extractor. For more implementation details, 6634 see <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/laz_1_3_2_6_3_59_1_1_22_11.html" title="Struct template lazy_weighted_variance_impl">lazy_weighted_variance_impl</a></code> 6635 and <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_variance_impl.html" title="Struct template weighted_variance_impl">weighted_variance_impl</a></code> 6636 </p> 6637<div class="variablelist"> 6638<p class="title"><b></b></p> 6639<dl class="variablelist"> 6640<dt><span class="term">Result Type</span></dt> 6641<dd> 6642<p> 6643</p> 6644<pre class="programlisting"><span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">fdiv</span><span class="special"><</span> 6645 <span class="identifier">numeric</span><span class="special">::</span><span class="identifier">functional</span><span class="special">::</span><span class="identifier">multiplies</span><span class="special"><</span><em class="replaceable"><code>sample-type</code></em><span class="special">,</span> <em class="replaceable"><code>weight-type</code></em><span class="special">>::</span><span class="identifier">result_type</span> 6646 <span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 6647<span class="special">>::</span><span class="identifier">result_type</span> 6648</pre> 6649<p> 6650 </p> 6651</dd> 6652<dt><span class="term">Depends On</span></dt> 6653<dd><p> 6654 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_weighted_variance</span></code> depends 6655 on <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">></span></code> 6656 and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_mean</span></code> <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span></code> depends on <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">count</span></code> and <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">immediate_weighted_mean</span></code> 6657 </p></dd> 6658<dt><span class="term">Variants</span></dt> 6659<dd><p> 6660 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lazy_weighted_variance</span></code> (a.k.a. 6661 <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">))</span></code> 6662 <br> <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span></code> (a.k.a. <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)</span></code>) 6663 </p></dd> 6664<dt><span class="term">Initialization Parameters</span></dt> 6665<dd><p> 6666 <span class="emphasis"><em>none</em></span> 6667 </p></dd> 6668<dt><span class="term">Accumulator Parameters</span></dt> 6669<dd><p> 6670 <code class="computeroutput"><span class="identifier">weight</span></code> 6671 </p></dd> 6672<dt><span class="term">Extractor Parameters</span></dt> 6673<dd><p> 6674 <span class="emphasis"><em>none</em></span> 6675 </p></dd> 6676<dt><span class="term">Accumulator Complexity</span></dt> 6677<dd><p> 6678 O(1) 6679 </p></dd> 6680<dt><span class="term">Extractor Complexity</span></dt> 6681<dd><p> 6682 O(1) 6683 </p></dd> 6684</dl> 6685</div> 6686<p> 6687 <span class="bold"><strong>Header</strong></span> 6688 </p> 6689<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><code class="computeroutput"><a class="link" href="reference.html#header.boost.accumulators.statistics.weighted_variance_hpp" title="Header <boost/accumulators/statistics/weighted_variance.hpp>">boost/accumulators/statistics/weighted_variance.hpp</a></code><span class="special">></span> 6690</pre> 6691<p> 6692 <span class="bold"><strong>Example</strong></span> 6693 </p> 6694<pre class="programlisting"><span class="comment">// lazy weighted_variance</span> 6695<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">lazy</span><span class="special">)>,</span> <span class="keyword">int</span><span class="special">></span> <span class="identifier">acc1</span><span class="special">;</span> 6696 6697<span class="identifier">acc1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> <span class="comment">// 2</span> 6698<span class="identifier">acc1</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// 6</span> 6699<span class="identifier">acc1</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> <span class="comment">// 3</span> 6700<span class="identifier">acc1</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> <span class="comment">// 16</span> 6701<span class="identifier">acc1</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> <span class="comment">// 5</span> 6702 6703<span class="comment">// weighted_mean = (2+6+3+16+5) / (2+3+1+4+1) = 32 / 11 = 2.9090909090909090909090909090909</span> 6704 6705<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">));</span> 6706<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.9090909</span><span class="special">,</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 6707<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">10.1818182</span><span class="special">,</span> <span class="identifier">accumulators</span><span class="special">::</span><span class="identifier">weighted_moment</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 6708<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.7190083</span><span class="special">,</span> <span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">acc1</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 6709 6710<span class="comment">// immediate weighted_variance</span> 6711<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">>,</span> <span class="keyword">int</span><span class="special">></span> <span class="identifier">acc2</span><span class="special">;</span> 6712 6713<span class="identifier">acc2</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> 6714<span class="identifier">acc2</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">3</span><span class="special">);</span> 6715<span class="identifier">acc2</span><span class="special">(</span><span class="number">3</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 6716<span class="identifier">acc2</span><span class="special">(</span><span class="number">4</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">4</span><span class="special">);</span> 6717<span class="identifier">acc2</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 6718 6719<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="number">5u</span><span class="special">,</span> <span class="identifier">count</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">));</span> 6720<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">2.9090909</span><span class="special">,</span> <span class="identifier">weighted_mean</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 6721<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.7190083</span><span class="special">,</span> <span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">acc2</span><span class="special">),</span> <span class="number">1e-5</span><span class="special">);</span> 6722 6723<span class="comment">// check lazy and immediate variance with random numbers</span> 6724 6725<span class="comment">// two random number generators</span> 6726<span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span> <span class="identifier">rng</span><span class="special">;</span> 6727<span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="identifier">mean_sigma</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">1</span><span class="special">);</span> 6728<span class="identifier">boost</span><span class="special">::</span><span class="identifier">variate_generator</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lagged_fibonacci607</span><span class="special">&,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">normal_distribution</span><span class="special"><></span> <span class="special">></span> <span class="identifier">normal</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">mean_sigma</span><span class="special">);</span> 6729 6730<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">>,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">acc_lazy</span><span class="special">;</span> 6731<span class="identifier">accumulator_set</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">stats</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">immediate</span><span class="special">)>,</span> <span class="keyword">double</span> <span class="special">></span> <span class="identifier">acc_immediate</span><span class="special">;</span> 6732 6733<span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span><span class="special"><</span><span class="number">10000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> 6734<span class="special">{</span> 6735 <span class="keyword">double</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">normal</span><span class="special">();</span> 6736 <span class="identifier">acc_lazy</span><span class="special">(</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">());</span> 6737 <span class="identifier">acc_immediate</span><span class="special">(</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">weight</span> <span class="special">=</span> <span class="identifier">rng</span><span class="special">());</span> 6738<span class="special">}</span> 6739 6740<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">acc_lazy</span><span class="special">),</span> <span class="number">1.</span><span class="special">);</span> 6741<span class="identifier">BOOST_CHECK_CLOSE</span><span class="special">(</span><span class="number">1.</span><span class="special">,</span> <span class="identifier">weighted_variance</span><span class="special">(</span><span class="identifier">acc_immediate</span><span class="special">),</span> <span class="number">1.</span><span class="special">);</span> 6742</pre> 6743<p> 6744 <span class="bold"><strong>See also</strong></span> 6745 </p> 6746<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6747<li class="listitem"> 6748 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/laz_1_3_2_6_3_59_1_1_22_11.html" title="Struct template lazy_weighted_variance_impl">lazy_weighted_variance_impl</a></code> 6749 </li> 6750<li class="listitem"> 6751 <code class="computeroutput"><a class="link" href="../boost/accumulators/impl/weighted_variance_impl.html" title="Struct template weighted_variance_impl">weighted_variance_impl</a></code> 6752 </li> 6753<li class="listitem"> 6754 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.count" title="count"><code class="literal">count</code></a> 6755 </li> 6756<li class="listitem"> 6757 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean" title="weighted_mean and variants"><code class="literal">weighted_mean</code></a> 6758 </li> 6759<li class="listitem"> 6760 <a class="link" href="user_s_guide.html#accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment" title="weighted_moment"><code class="literal">weighted_moment</code></a> 6761 </li> 6762</ul></div> 6763</div> 6764</div> 6765</div> 6766<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 6767<td align="left"></td> 6768<td align="right"><div class="copyright-footer">Copyright © 2005, 2006 Eric Niebler<p> 6769 Distributed under the Boost Software License, Version 1.0. (See accompanying 6770 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 6771 </p> 6772</div></td> 6773</tr></table> 6774<hr> 6775<div class="spirit-nav"> 6776<a accesskey="p" href="../accumulators.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../accumulators.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 6777</div> 6778</body> 6779</html> 6780