]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/math/doc/html/math_toolkit/stat_tut/weg/dist_construct_eg.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / 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.77.1">
7 <link rel="home" href="../../../index.html" title="Math Toolkit 2.5.1">
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, Jeremy Murphy, Johan R&#229;de, Gautam Sewani,
322 Benjamin Sobotta, 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>