Imported Upstream version 1.57.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.78.1">
7 <link rel="home" href="../../../index.html" title="Math Toolkit 2.1.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: these provide a few arguments to each free function.
34         </p>
35 <p>
36           Boost.Math library provides each distribution as a template C++ class.
37           A distribution is constructed with a few arguments, and then member and
38           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_dec_float</span></code> we also
48           need an include from Boost.Multiprecision.
49         </p>
50 <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>
51   <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>
52   <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>
53 <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>
54 <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>
55 <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>
56 <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>
57
58 <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_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span> <span class="comment">// for cpp_dec_float_100</span>
59 </pre>
60 <p>
61           Several examples of constructing distributions follow:
62         </p>
63 <p>
64           First, a negative binomial distribution with 8 successes and a success
65           fraction 0.25, 25% or 1 in 4, is constructed like this:
66         </p>
67 <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>
68 </pre>
69 <p>
70           But this is inconveniently long, so we might be tempted to write
71         </p>
72 <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>
73 </pre>
74 <p>
75           but this might risk ambiguity with names in <code class="computeroutput"><span class="identifier">std</span>
76           <span class="identifier">random</span></code> so <span class="bold"><strong>much</strong></span>
77           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>
78           statements, for example:
79         </p>
80 <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>
81 </pre>
82 <p>
83           and we can still reduce typing.
84         </p>
85 <p>
86           Since the vast majority of applications use will be using <code class="computeroutput"><span class="keyword">double</span></code> precision, the template argument
87           to the distribution (<code class="computeroutput"><span class="identifier">RealType</span></code>)
88           defaults to type <code class="computeroutput"><span class="keyword">double</span></code>, so
89           we can also write:
90         </p>
91 <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>
92 </pre>
93 <p>
94           But the name <code class="computeroutput"><span class="identifier">negative_binomial_distribution</span></code>
95           is still inconveniently long, so, for most distributions, a convenience
96           <code class="computeroutput"><span class="keyword">typedef</span></code> is provided, for example:
97         </p>
98 <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>
99 </pre>
100 <div class="caution"><table border="0" summary="Caution">
101 <tr>
102 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
103 <th align="left">Caution</th>
104 </tr>
105 <tr><td align="left" valign="top"><p>
106             This convenience typedef is <span class="bold"><strong>not provided</strong></span>
107             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>
108             fall into this category.
109           </p></td></tr>
110 </table></div>
111 <p>
112           So, after a using statement,
113         </p>
114 <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>
115 </pre>
116 <p>
117           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>:
118         </p>
119 <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>
120 </pre>
121 <p>
122           Some more examples using the convenience typedef:
123         </p>
124 <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>
125 </pre>
126 <p>
127           And automatic conversion takes place, so you can use integers and floats:
128         </p>
129 <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 double, int and double arguments.</span>
130 </pre>
131 <p>
132           This is probably the most common usage.
133         </p>
134 <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>
135 <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>
136 </pre>
137 <p>
138           Similarly for most other distributions like the binomial.
139         </p>
140 <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>
141 <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>
142 </pre>
143 <p>
144           For cases when the typdef distribution name would clash with a math special
145           function (currently only beta and gamma) the typedef is deliberately not
146           provided, and the longer version of the name must be used. For example
147           do not use:
148         </p>
149 <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>
150 <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>
151 </pre>
152 <p>
153           Which produces the error messages:
154         </p>
155 <pre class="programlisting">error C2146: syntax error : missing ';' before identifier 'mybetad0'
156 warning C4551: function call missing argument list
157 error C3861: 'mybetad0': identifier not found
158 </pre>
159 <p>
160           Instead you should use:
161         </p>
162 <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>
163 <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>
164 </pre>
165 <p>
166           or for the gamma distribution:
167         </p>
168 <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>
169 </pre>
170 <p>
171           We can, of course, still provide the type explicitly thus:
172         </p>
173 <pre class="programlisting"><span class="comment">// Explicit double precision:  both arguments are double:</span>
174 <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>
175
176 <span class="comment">// Explicit float precision, double arguments are truncated to float:</span>
177 <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>
178
179 <span class="comment">// Explicit float precision, integer &amp; double arguments converted to float:</span>
180 <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>
181
182 <span class="comment">// Explicit float precision, float arguments, so no conversion:</span>
183 <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>
184
185 <span class="comment">// Explicit float precision, integer arguments promoted to float.</span>
186 <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>
187
188 <span class="comment">// Explicit double precision:</span>
189 <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">8.</span><span class="special">,</span> <span class="number">0.25</span><span class="special">);</span>
190
191 <span class="comment">// Explicit long double precision:</span>
192 <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>
193 </pre>
194 <p>
195           And you can use your own 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_dec_float_50</span></code>
196           (an arbitrary 50 decimal digits precision type), then we can write:
197         </p>
198 <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>
199
200  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_dec_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>
201  <span class="comment">// `integer` arguments are promoted to your RealType exactly, but</span>
202  <span class="comment">// `double` argument are converted to RealType,</span>
203  <span class="comment">// possibly losing precision, so don't write:</span>
204
205  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_dec_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>
206 <span class="comment">// to avoid truncation of second parameter to `0.2345678901234567`.</span>
207
208  <span class="identifier">negative_binomial_distribution</span><span class="special">&lt;</span><span class="identifier">cpp_dec_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_dec_float_50</span><span class="special">(</span><span class="string">"0.23456789012345678901234567890"</span><span class="special">)</span> <span class="special">);</span>
209
210  <span class="comment">// Ensure that all potentially significant digits are shown.</span>
211  <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_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">);</span>
212  <span class="identifier">cpp_dec_float_50</span> <span class="identifier">x</span><span class="special">(</span><span class="string">"1.23456789012345678901234567890"</span><span class="special">);</span>
213  <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>
214 </pre>
215 <pre class="programlisting"><span class="identifier">showing</span>  <span class="number">0.00012630010495970320103876754721976419438231705359935</span>
216 </pre>
217 <div class="warning"><table border="0" summary="Warning">
218 <tr>
219 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
220 <th align="left">Warning</th>
221 </tr>
222 <tr><td align="left" valign="top"><p>
223             When using multiprecision, it is all too easy to get accidental truncation!
224           </p></td></tr>
225 </table></div>
226 <p>
227           For example, if you write
228         </p>
229 <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>
230 </pre>
231 <p>
232           showing 0.00012630010495970318465064569310967179576805651692929, which
233           is wrong at about the 17th decimal digit!
234         </p>
235 <p>
236           This is because the value provided is truncated to a <code class="computeroutput"><span class="keyword">double</span></code>,
237           effectively <code class="computeroutput"><span class="keyword">double</span> <span class="identifier">x</span>
238           <span class="special">=</span> <span class="number">1.23456789012345678901234567890</span><span class="special">;</span></code>
239         </p>
240 <p>
241           Then the now <code class="computeroutput"><span class="keyword">double</span> <span class="identifier">x</span></code>
242           is passed to function <code class="computeroutput"><span class="identifier">pdf</span></code>,
243           and this truncated <code class="computeroutput"><span class="keyword">double</span></code>
244           value is finally promoted to <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>.
245         </p>
246 <p>
247           Another way of quietly getting the wrong answer is to write:
248         </p>
249 <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_dec_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>
250 </pre>
251 <p>
252           A correct way from a multi-digit string value is
253         </p>
254 <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_dec_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>
255 </pre>
256 <div class="tip"><table border="0" summary="Tip">
257 <tr>
258 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../doc/src/images/tip.png"></td>
259 <th align="left">Tip</th>
260 </tr>
261 <tr><td align="left" valign="top"><p>
262             Getting about 17 decimal digits followed by many zeros is often a sign
263             of accidental truncation.
264           </p></td></tr>
265 </table></div>
266 <h5>
267 <a name="math_toolkit.stat_tut.weg.dist_construct_eg.h0"></a>
268           <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
269           arguments to distribution constructors.</a>
270         </h5>
271 <p>
272           Note that default constructor arguments are only provided for some distributions.
273           So if you wrongly assume a default argument, you will get an error message,
274           for example:
275         </p>
276 <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>
277 </pre>
278 <pre class="programlisting">error C2512 no appropriate default constructor available.</pre>
279 <p>
280           No default constructors are provided for the <code class="computeroutput"><span class="identifier">negative</span>
281           <span class="identifier">binomial</span></code> distribution, because
282           it is difficult to chose any sensible default values for this distribution.
283         </p>
284 <p>
285           For other distributions, like the normal distribution, it is obviously
286           very useful to provide 'standard' defaults for the mean (zero) and standard
287           deviation (unity) thus:
288         </p>
289 <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>
290 </pre>
291 <p>
292           So in this case we can write:
293         </p>
294 <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>
295
296   <span class="identifier">normal</span> <span class="identifier">norm1</span><span class="special">;</span>       <span class="comment">// Standard normal distribution.</span>
297   <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>
298   <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>
299
300   <span class="special">}</span>
301   <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>
302   <span class="special">{</span>
303     <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>
304   <span class="special">}</span>
305
306   <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
307 <span class="special">}</span>  <span class="comment">// int main()</span>
308 </pre>
309 <p>
310           There is no useful output from this demonstration program, of course.
311         </p>
312 <p>
313           See <a href="../../../../../example/distribution_construction.cpp" target="_top">distribution_construction.cpp</a>
314           for full source code.
315         </p>
316 </div>
317 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
318 <td align="left"></td>
319 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2010, 2012-2014 Nikhar Agrawal,
320       Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert
321       Holin, Bruno Lalande, John Maddock, Johan R&#229;de, Gautam Sewani, Benjamin Sobotta,
322       Thijs van den Berg, Daryle Walker and Xiaogang Zhang<p>
323         Distributed under the Boost Software License, Version 1.0. (See accompanying
324         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>)
325       </p>
326 </div></td>
327 </tr></table>
328 <hr>
329 <div class="spirit-nav">
330 <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>
331 </div>
332 </body>
333 </html>