Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / math / doc / html / math_toolkit / stat_tut / weg / dist_construct_eg.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Distribution Construction Examples</title>
5 <link rel="stylesheet" href="../../../math.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../../index.html" title="Math Toolkit 2.11.0">
8 <link rel="up" href="../weg.html" title="Worked Examples">
9 <link rel="prev" href="../weg.html" title="Worked Examples">
10 <link rel="next" href="st_eg.html" title="Student's t Distribution Examples">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../weg.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../weg.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="st_eg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="math_toolkit.stat_tut.weg.dist_construct_eg"></a><a class="link" href="dist_construct_eg.html" title="Distribution Construction Examples">Distribution
28         Construction Examples</a>
29 </h4></div></div></div>
30 <p>
31           The structure of distributions is rather different from some other statistical
32           libraries, for example, those written in less object-oriented language
33           like FORTRAN and C that provide a few arguments to each free function.
34         </p>
35 <p>
36           Boost.Math library instead provides each distribution as a template C++
37           class. A distribution is constructed with a few arguments, and then member
38           and non-member functions are used to find values of the distribution, often
39           a function of a random variate.
40         </p>
41 <p>
42           For this demonstration, first we need some includes to access the negative
43           binomial distribution (and the binomial, beta and gamma distributions too).
44         </p>
45 <p>
46           To demonstrate the use with a high precision User-defined floating-point
47           type <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>, we
48           also need an include from Boost.Multiprecision. (We could equally well
49           have used a <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
50           multiprecision type).
51         </p>
52 <p>
53           We choose a typedef <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code>
54           to provide a 50 decimal digit type, but we could equally have chosen at
55           128-bit type <code class="computeroutput"><span class="identifier">cpp_bin_float_quad</span></code>,
56           or on some platforms <code class="computeroutput"><span class="identifier">__float128</span></code>,
57           providing about 35 decimal digits.
58         </p>
59 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">negative_binomial</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for negative_binomial_distribution</span>
60   <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial_distribution</span><span class="special">;</span> <span class="comment">// default type is double.</span>
61   <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial</span><span class="special">;</span> <span class="comment">// typedef provides default type is double.</span>
62 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">binomial</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for binomial_distribution.</span>
63 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">beta</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for beta_distribution.</span>
64 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for gamma_distribution.</span>
65 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">normal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for normal_distribution.</span>
66
67 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_bin_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for cpp_bin_float_50</span>
68 </pre>
69 <p>
70           Several examples of constructing distributions follow:
71         </p>
72 <p>
73           First, a negative binomial distribution with 8 successes and a success
74           fraction 0.25, 25% or 1 in 4, is constructed like this:
75         </p>
76 <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">mydist0</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
77 </pre>
78 <p>
79           But this is inconveniently long, so we might be tempted to write
80         </p>
81 <pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">;</span>
82 </pre>
83 <p>
84           but this might risk ambiguity with names in <code class="computeroutput"><span class="identifier">std</span>
85           <span class="identifier">random</span></code> so <span class="bold"><strong>much</strong></span>
86           better is explicit <code class="computeroutput"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span></code>
87           statements, for example:
88         </p>
89 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial_distribution</span><span class="special">;</span>
90 </pre>
91 <p>
92           and we can still reduce typing.
93         </p>
94 <p>
95           Since the vast majority of applications use will be using <code class="computeroutput"><span class="keyword">double</span></code> precision, the template argument
96           to the distribution (<code class="computeroutput"><span class="identifier">RealType</span></code>)
97           defaults to type <code class="computeroutput"><span class="keyword">double</span></code>, so
98           we can also write:
99         </p>
100 <pre class="programlisting"><span class="identifier">negative_binomial_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">mydist9</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span> <span class="comment">// Uses default `RealType = double`.</span>
101 </pre>
102 <p>
103           But the name <code class="computeroutput"><span class="identifier">negative_binomial_distribution</span></code>
104           is still inconveniently long, so, for most distributions, a convenience
105           <code class="computeroutput"><span class="keyword">typedef</span></code> is provided, for example:
106         </p>
107 <pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">negative_binomial</span><span class="special">;</span> <span class="comment">// Reserved name of type double.</span>
108 </pre>
109 <div class="caution"><table border="0" summary="Caution">
110 <tr>
111 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
112 <th align="left">Caution</th>
113 </tr>
114 <tr><td align="left" valign="top"><p>
115             This convenience typedef is <span class="bold"><strong>not provided</strong></span>
116             if a clash would occur with the name of a function; currently only <code class="computeroutput"><span class="identifier">beta</span></code> and <code class="computeroutput"><span class="identifier">gamma</span></code>
117             fall into this category.
118           </p></td></tr>
119 </table></div>
120 <p>
121           So, after a using statement,
122         </p>
123 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial</span><span class="special">;</span>
124 </pre>
125 <p>
126           we have a convenient typedef to <code class="computeroutput"><span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span></code>:
127         </p>
128 <pre class="programlisting"><span class="identifier">negative_binomial</span> <span class="identifier">mydist</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
129 </pre>
130 <p>
131           Some more examples using the convenience typedef:
132         </p>
133 <pre class="programlisting"><span class="identifier">negative_binomial</span> <span class="identifier">mydist10</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="number">0.4</span><span class="special">);</span> <span class="comment">// Both arguments double.</span>
134 </pre>
135 <p>
136           And automatic conversion of arguments takes place, so you can use integers
137           and floats:
138         </p>
139 <pre class="programlisting"><span class="identifier">negative_binomial</span> <span class="identifier">mydist11</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">0.4</span><span class="special">);</span> <span class="comment">// Using provided typedef of type double, and int and double arguments.</span>
140 </pre>
141 <p>
142           This is probably the most common usage. Other combination are possible
143           too:
144         </p>
145 <pre class="programlisting"><span class="identifier">negative_binomial</span> <span class="identifier">mydist12</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="number">0.4F</span><span class="special">);</span> <span class="comment">// Double and float arguments.</span>
146 <span class="identifier">negative_binomial</span> <span class="identifier">mydist13</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="comment">// Both arguments integer.</span>
147 </pre>
148 <p>
149           Similarly for most other distributions like the binomial.
150         </p>
151 <pre class="programlisting"><span class="identifier">binomial</span> <span class="identifier">mybinomial</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span> <span class="comment">// is more concise than</span>
152 <span class="identifier">binomial_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">mybinomd1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
153 </pre>
154 <p>
155           For cases when the typdef distribution name would clash with a math special
156           function (currently only beta and gamma) the typedef is deliberately not
157           provided, and the longer version of the name must be used, so for example,
158           do not use:
159         </p>
160 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">beta</span><span class="special">;</span>
161 <span class="identifier">beta</span> <span class="identifier">mybetad0</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span> <span class="comment">// Error beta is a math FUNCTION!</span>
162 </pre>
163 <p>
164           Which produces the error messages:
165         </p>
166 <pre class="programlisting">error C2146: syntax error : missing ';' before identifier 'mybetad0'
167 warning C4551: function call missing argument list
168 error C3861: 'mybetad0': identifier not found
169 </pre>
170 <p>
171           Instead you should use:
172         </p>
173 <pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">beta_distribution</span><span class="special">;</span>
174 <span class="identifier">beta_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">mybetad1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
175 </pre>
176 <p>
177           or for the gamma distribution:
178         </p>
179 <pre class="programlisting"><span class="identifier">gamma_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">mygammad1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
180 </pre>
181 <p>
182           We can, of course, still provide the type explicitly thus:
183         </p>
184 <pre class="programlisting"><span class="comment">// Explicit double precision:  both arguments are double:</span>
185 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span>        <span class="identifier">mydist1</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
186
187 <span class="comment">// Explicit float precision, double arguments are truncated to float:</span>
188 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;</span>         <span class="identifier">mydist2</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
189
190 <span class="comment">// Explicit float precision, integer &amp; double arguments converted to float:</span>
191 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;</span>         <span class="identifier">mydist3</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
192
193 <span class="comment">// Explicit float precision, float arguments, so no conversion:</span>
194 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;</span>         <span class="identifier">mydist4</span><span class="special">(</span><span class="number">8.F</span><span class="special">,</span> <span class="number">0.25F</span><span class="special">);</span>
195
196 <span class="comment">// Explicit float precision, integer arguments promoted to float.</span>
197 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;</span>         <span class="identifier">mydist5</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span>
198
199 <span class="comment">// Explicit double precision:</span>
200 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span>        <span class="identifier">mydist6</span><span class="special">(</span><span class="number">5.</span><span class="special">,</span> <span class="number">0.4</span><span class="special">);</span>
201
202 <span class="comment">// Explicit long double precision:</span>
203 <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="keyword">long</span> <span class="keyword">double</span><span class="special">&gt;</span>   <span class="identifier">mydist7</span><span class="special">(</span><span class="number">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
204 </pre>
205 <p>
206           And you can use your own template RealType, for example, <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cpp_bin_float_50</span></code> (an arbitrary 50 decimal
207           digits precision type), then we can write:
208         </p>
209 <pre class="programlisting"> <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span>
210  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_50</span><span class="special">&gt;</span>  <span class="identifier">mydist8</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
211
212  <span class="comment">// `integer` arguments are promoted to your RealType exactly, but</span>
213  <span class="comment">// `double` argument are converted to RealType,</span>
214  <span class="comment">// most likely losing precision!</span>
215
216  <span class="comment">// So DON'T be tempted to write the 'obvious':</span>
217  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_50</span><span class="special">&gt;</span>  <span class="identifier">mydist20</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="number">0.23456789012345678901234567890</span><span class="special">);</span>
218 <span class="comment">// to avoid truncation of second parameter to `0.2345678901234567` and loss of precision.</span>
219
220 <span class="comment">// Instead pass a quoted decimal digit string:</span>
221  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_50</span><span class="special">&gt;</span>  <span class="identifier">mydist21</span><span class="special">(</span><span class="number">8</span><span class="special">,</span> <span class="identifier">cpp_bin_float_50</span><span class="special">(</span><span class="string">"0.23456789012345678901234567890"</span><span class="special">)</span> <span class="special">);</span>
222
223  <span class="comment">// Ensure that all potentially significant digits are shown.</span>
224  <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">cpp_bin_float_50</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">);</span>
225  <span class="comment">// </span>
226  <span class="identifier">cpp_bin_float_50</span> <span class="identifier">x</span><span class="special">(</span><span class="string">"1.23456789012345678901234567890"</span><span class="special">);</span>
227  <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">mydist8</span><span class="special">,</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
228 </pre>
229 <pre class="programlisting"><span class="identifier">showing</span>  <span class="number">0.00012630010495970320103876754721976419438231705359935</span>
230             <span class="number">0.00012630010495970320103876754721976419438231528547467</span>
231 </pre>
232 <div class="warning"><table border="0" summary="Warning">
233 <tr>
234 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
235 <th align="left">Warning</th>
236 </tr>
237 <tr><td align="left" valign="top"><p>
238             When using multiprecision, it is all too easy to get accidental truncation!
239           </p></td></tr>
240 </table></div>
241 <p>
242           For example, if you write
243         </p>
244 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">mydist8</span><span class="special">,</span> <span class="number">1.23456789012345678901234567890</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
245 </pre>
246 <p>
247           showing 0.00012630010495970318465064569310967179576805651692929, which
248           is wrong at about the 17th decimal digit!
249         </p>
250 <p>
251           This is because the value provided is truncated to a <code class="computeroutput"><span class="keyword">double</span></code>,
252           effectively <code class="computeroutput"><span class="keyword">double</span> <span class="identifier">x</span>
253           <span class="special">=</span> <span class="number">1.23456789012345678901234567890</span><span class="special">;</span></code>
254         </p>
255 <p>
256           Then the now <code class="computeroutput"><span class="keyword">double</span> <span class="identifier">x</span></code>
257           is passed to function <code class="computeroutput"><span class="identifier">pdf</span></code>,
258           and this truncated <code class="computeroutput"><span class="keyword">double</span></code>
259           value is finally promoted to <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code>.
260         </p>
261 <p>
262           Another way of quietly getting the wrong answer is to write:
263         </p>
264 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">mydist8</span><span class="special">,</span> <span class="identifier">cpp_bin_float_50</span><span class="special">(</span><span class="number">1.23456789012345678901234567890</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
265 </pre>
266 <p>
267           A correct way from a multi-digit string value is
268         </p>
269 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">mydist8</span><span class="special">,</span> <span class="identifier">cpp_bin_float_50</span><span class="special">(</span><span class="string">"1.23456789012345678901234567890"</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
270 </pre>
271 <div class="tip"><table border="0" summary="Tip">
272 <tr>
273 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../doc/src/images/tip.png"></td>
274 <th align="left">Tip</th>
275 </tr>
276 <tr><td align="left" valign="top"><p>
277             Getting about 17 decimal digits followed by many zeros is often a sign
278             of accidental truncation.
279           </p></td></tr>
280 </table></div>
281 <h5>
282 <a name="math_toolkit.stat_tut.weg.dist_construct_eg.h0"></a>
283           <span class="phrase"><a name="math_toolkit.stat_tut.weg.dist_construct_eg.default_arguments_to_distributio"></a></span><a class="link" href="dist_construct_eg.html#math_toolkit.stat_tut.weg.dist_construct_eg.default_arguments_to_distributio">Default
284           arguments to distribution constructors.</a>
285         </h5>
286 <p>
287           Note that default constructor arguments are only provided for some distributions.
288           So if you wrongly assume a default argument, you will get an error message,
289           for example:
290         </p>
291 <pre class="programlisting"><span class="identifier">negative_binomial_distribution</span><span class="special">&lt;&gt;</span> <span class="identifier">mydist8</span><span class="special">;</span>
292 </pre>
293 <pre class="programlisting">error C2512 no appropriate default constructor available.</pre>
294 <p>
295           No default constructors are provided for the <code class="computeroutput"><span class="identifier">negative</span>
296           <span class="identifier">binomial</span></code> distribution, because
297           it is difficult to chose any sensible default values for this distribution.
298         </p>
299 <p>
300           For other distributions, like the normal distribution, it is obviously
301           very useful to provide 'standard' defaults for the mean (zero) and standard
302           deviation (unity) thus:
303         </p>
304 <pre class="programlisting"><span class="identifier">normal_distribution</span><span class="special">(</span><span class="identifier">RealType</span> <span class="identifier">mean</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">RealType</span> <span class="identifier">sd</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span>
305 </pre>
306 <p>
307           So in this case we can more tersely write:
308         </p>
309 <pre class="programlisting">  <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">normal</span><span class="special">;</span>
310
311   <span class="identifier">normal</span> <span class="identifier">norm1</span><span class="special">;</span>       <span class="comment">// Standard normal distribution N[0,1].</span>
312   <span class="identifier">normal</span> <span class="identifier">norm2</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>    <span class="comment">// Mean = 2, std deviation = 1.</span>
313   <span class="identifier">normal</span> <span class="identifier">norm3</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// Mean = 2, std deviation = 3.</span>
314
315   <span class="special">}</span>
316   <span class="keyword">catch</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">exception</span> <span class="special">&amp;</span><span class="identifier">ex</span><span class="special">)</span>
317   <span class="special">{</span>
318     <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ex</span><span class="special">.</span><span class="identifier">what</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
319   <span class="special">}</span>
320
321   <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
322 <span class="special">}</span>  <span class="comment">// int main()</span>
323 </pre>
324 <p>
325           There is no useful output from this demonstration program, of course.
326         </p>
327 <p>
328           See <a href="../../../../../example/distribution_construction.cpp" target="_top">distribution_construction.cpp</a>
329           for full source code.
330         </p>
331 </div>
332 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
333 <td align="left"></td>
334 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2019 Nikhar
335       Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
336       Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
337       R&#229;de, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
338       Daryle Walker and Xiaogang Zhang<p>
339         Distributed under the Boost Software License, Version 1.0. (See accompanying
340         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>)
341       </p>
342 </div></td>
343 </tr></table>
344 <hr>
345 <div class="spirit-nav">
346 <a accesskey="p" href="../weg.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../weg.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="st_eg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
347 </div>
348 </body>
349 </html>