1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Boost.Math Frequently Asked Questions (FAQs)</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.12.0"> 8<link rel="up" href="../overview.html" title="Chapter 1. Overview"> 9<link rel="prev" href="overview_tr1.html" title="C99 and C++ TR1 C-style Functions"> 10<link rel="next" href="contact.html" title="Contact Info and Support"> 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="overview_tr1.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.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="contact.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="math_toolkit.main_faq"></a><a class="link" href="main_faq.html" title="Boost.Math Frequently Asked Questions (FAQs)">Boost.Math Frequently Asked Questions 28 (FAQs)</a> 29</h2></div></div></div> 30<div class="orderedlist"><ol class="orderedlist" type="1"> 31<li class="listitem"> 32<p class="simpara"> 33 <span class="emphasis"><em>I'm a FORTRAN/NAG/SPSS/SAS/Cephes/MathCad/R user and I don't 34 see where the functions like dnorm(mean, sd) are in Boost.Math?</em></span> 35 </p> 36<p class="simpara"> 37 Nearly all are provided, and many more like mean, skewness, quantiles, 38 complements ... but Boost.Math makes full use of C++, and it looks a bit 39 different. But do not panic! See section on construction and the many examples. 40 Briefly, the distribution is constructed with the parameters (like location 41 and scale) (things after the | in representation like P(X=k|n, p) or ; 42 in a common representation of pdf f(x; μσ<sup>2</sup>). Functions like pdf, cdf are 43 called with the name of that distribution and the random variate often 44 called x or k. For example, <code class="computeroutput"><span class="identifier">normal</span> 45 <span class="identifier">my_norm</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">my_norm</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span></code> 46 </p> 47</li> 48<li class="listitem"> 49<p class="simpara"> 50 I'm a user of <a href="http://support.sas.com/rnd/app/da/new/probabilityfunctions.html" target="_top">New 51 SAS Functions for Computing Probabilities</a>. 52 </p> 53<p class="simpara"> 54 You will find the interface more familiar, but to be able to select a distribution 55 (perhaps using a string) see the Extras/Future Directions section, and 56 /boost/libs/math/dot_net_example/boost_math.cpp for an example that is 57 used to create a C# (C sharp) utility (that you might also find useful): 58 see <a href="http://sourceforge.net/projects/distexplorer/" target="_top">Statistical 59 Distribution Explorer</a>. 60 </p> 61</li> 62<li class="listitem"> 63<p class="simpara"> 64 <span class="emphasis"><em>I'm allergic to reading manuals and prefer to learn from examples.</em></span> 65 </p> 66<p class="simpara"> 67 Fear not - you are not alone! Many examples are available for functions 68 and distributions. Some are referenced directly from the text. Others can 69 be found at <code class="computeroutput"><span class="special">\</span><span class="identifier">boost_latest_release</span><span class="special">\</span><span class="identifier">libs</span><span class="special">\</span><span class="identifier">math</span><span class="special">\</span><span class="identifier">example</span></code>, 70 for example If you are a Visual Studio user, you should be able to create 71 projects from each of these, making sure that the Boost library is in the 72 include directories list (there are usually NO libraries that must be built). 73 </p> 74</li> 75<li class="listitem"> 76<p class="simpara"> 77 <span class="emphasis"><em>How do I make sure that the Boost library is in the Visual Studio 78 include directories list?</em></span> 79 </p> 80<p class="simpara"> 81 You can add an include path, for example, your Boost place /boost-latest_release, 82 for example <code class="computeroutput"><span class="identifier">X</span><span class="special">:/</span><span class="identifier">boost_1_70_0</span><span class="special">/</span></code> 83 if you have a separate partition X for Boost releases. Or you can use an 84 environment variable BOOST_ROOT set to your Boost place, and include that. 85 Visual Studio before 2010 provided Tools, Options, VC++ Directories to 86 control directories: Visual Studio 2010 instead provides property sheets 87 to assist. You may find it convenient to create a new one adding \boost-latest_release; 88 to the existing include items in $(IncludePath). 89 </p> 90</li> 91<li class="listitem"> 92<p class="simpara"> 93 <span class="emphasis"><em>I'm a FORTRAN/NAG/SPSS/SAS/Cephes/MathCad/R user and I don't 94 see where the properties like mean, median, mode, variance, skewness of 95 distributions are in Boost.Math?</em></span> 96 </p> 97<p class="simpara"> 98 They are all available (if defined for the parameters with which you constructed 99 the distribution) via <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.cdf">Cumulative 100 Distribution Function</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability 101 Density Function</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.quantile">Quantile</a>, 102 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.hazard">Hazard Function</a>, 103 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.chf">Cumulative Hazard Function</a>, 104 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.mean">mean</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.median">median</a>, 105 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.mode">mode</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.variance">variance</a>, 106 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.sd">standard deviation</a>, 107 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.skewness">skewness</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.kurtosis">kurtosis</a>, <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.kurtosis_excess">kurtosis_excess</a>, 108 <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.range">range</a> and <a class="link" href="dist_ref/nmp.html#math_toolkit.dist_ref.nmp.support">support</a>. 109 </p> 110</li> 111<li class="listitem"> 112<p class="simpara"> 113 <span class="emphasis"><em>I am a C programmer. Can I user Boost.Math with C?</em></span> 114 </p> 115<p class="simpara"> 116 Yes you can, including all the special functions, and TR1 functions like 117 isnan. They appear as C functions, by being declared as "extern C". 118 </p> 119</li> 120<li class="listitem"> 121<p class="simpara"> 122 <span class="emphasis"><em>I am a C# (Basic? F# FORTRAN? Other CLI?) programmer. Can I use 123 Boost.Math with C#? (or ...)?</em></span> 124 </p> 125<p class="simpara"> 126 Yes you can, including all the special functions, and TR1 functions like 127 isnan. But you <span class="bold"><strong>must build the Boost.Math as a dynamic 128 library (.dll) and compile with the /CLI option</strong></span>. See the boost/math/dot_net_example 129 folder which contains an example that builds a simple statistical distribution 130 app with a GUI. See <a href="http://sourceforge.net/projects/distexplorer/" target="_top">Statistical 131 Distribution Explorer</a> 132 </p> 133</li> 134<li class="listitem"> 135<p class="simpara"> 136 <span class="emphasis"><em>What these "policies" things for?</em></span> 137 </p> 138<p class="simpara"> 139 Policies are a powerful (if necessarily complex) fine-grain mechanism that 140 allow you to customise the behaviour of the Boost.Math library according 141 to your precise needs. See <a class="link" href="../policy.html" title="Chapter 21. Policies: Controlling Precision, Error Handling etc">Policies</a>. But 142 if, very probably, the default behaviour suits you, you don't need to know 143 more. 144 </p> 145</li> 146<li class="listitem"> 147<p class="simpara"> 148 <span class="emphasis"><em>I am a C user and expect to see global C-style<code class="computeroutput"><span class="special">::</span><span class="identifier">errno</span></code> set for overflow/errors etc?</em></span> 149 </p> 150<p class="simpara"> 151 You can achieve what you want - see <a class="link" href="pol_ref/error_handling_policies.html" title="Error Handling Policies">error 152 handling policies</a> and <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">user 153 error handling</a> and many examples. 154 </p> 155</li> 156<li class="listitem"> 157<p class="simpara"> 158 <span class="emphasis"><em>I am a C user and expect to silently return a max value for overflow?</em></span> 159 </p> 160<p class="simpara"> 161 You (and C++ users too) can return whatever you want on overflow - see 162 <a class="link" href="error_handling.html#math_toolkit.error_handling.overflow_error">overflow_error</a> 163 and <a class="link" href="pol_ref/error_handling_policies.html" title="Error Handling Policies">error 164 handling policies</a> and several examples. 165 </p> 166</li> 167<li class="listitem"> 168<p class="simpara"> 169 <span class="emphasis"><em>I don't want any error message for overflow etc?</em></span> 170 </p> 171<p class="simpara"> 172 You can control exactly what happens for all the abnormal conditions, including 173 the values returned. See <a class="link" href="error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>, 174 <a class="link" href="error_handling.html#math_toolkit.error_handling.overflow_error">overflow_error</a> 175 <a class="link" href="pol_ref/error_handling_policies.html" title="Error Handling Policies">error handling 176 policies</a> <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">user 177 error handling</a> etc and examples. 178 </p> 179</li> 180<li class="listitem"> 181<p class="simpara"> 182 <span class="emphasis"><em>My environment doesn't allow and/or I don't want exceptions. 183 Can I still user Boost.Math?</em></span> 184 </p> 185<p class="simpara"> 186 Yes but you must customise the error handling: see <a class="link" href="pol_tutorial/user_def_err_pol.html" title="Calling User Defined Error Handlers">user 187 error handling</a> and <a class="link" href="pol_ref/policy_defaults.html" title="Using Macros to Change the Policy Defaults">changing 188 policies defaults</a> . 189 </p> 190</li> 191<li class="listitem"> 192<p class="simpara"> 193 <span class="emphasis"><em>The docs are several hundreds of pages long! Can I read the docs 194 off-line or on paper?</em></span> 195 </p> 196<p class="simpara"> 197 Yes - you can download the Boost current release of most documentation 198 as a zip of pdfs (including Boost.Math) from Sourceforge, for example 199 <a href="https://sourceforge.net/projects/boost/files/boost-docs/1.45.0/boost_pdf_1_45_0.tar.gz/download" target="_top">https://sourceforge.net/projects/boost/files/boost-docs/1.45.0/boost_pdf_1_45_0.tar.gz/download</a>. 200 And you can print any pages you need (or even print all pages - but be 201 warned that there are several hundred!). Both html and pdf versions are 202 highly hyperlinked. The entire Boost.Math pdf can be searched with Adobe 203 Reader, Edit, Find ... This can often find what you seek, a partial substitute 204 for a full index. 205 </p> 206</li> 207<li class="listitem"> 208<p class="simpara"> 209 <span class="emphasis"><em>I want a compact version for an embedded application. Can I use 210 float precision?</em></span> 211 </p> 212<p class="simpara"> 213 Yes - by selecting RealType template parameter as float: for example normal_distribution<float> 214 your_normal(mean, sd); (But double may still be used internally, so space 215 saving may be less that you hope for). You can also change the promotion 216 policy, but accuracy might be much reduced. 217 </p> 218</li> 219<li class="listitem"> 220<p class="simpara"> 221 <span class="emphasis"><em>I seem to get somewhat different results compared to other programs. 222 Why?</em></span> 223 </p> 224<p class="simpara"> 225 We hope Boost.Math to be more accurate: our priority is accuracy (over 226 speed). See the section on accuracy. But for evaluations that require iterations 227 there are parameters which can change the required accuracy (see <a class="link" href="../policy.html" title="Chapter 21. Policies: Controlling Precision, Error Handling etc">Policies</a>). You might be able to squeeze a little 228 more (or less) accuracy at the cost of runtime. 229 </p> 230</li> 231<li class="listitem"> 232<p class="simpara"> 233 <span class="emphasis"><em>Will my program run more slowly compared to other math functions 234 and statistical libraries?</em></span> 235 </p> 236<p class="simpara"> 237 Probably, thought not always, and not by too much: our priority is accuracy. 238 For most functions, making sure you have the latest compiler version with 239 all optimisations switched on is the key to speed. For evaluations that 240 require iteration, you may be able to gain a little more speed at the expense 241 of accuracy. See detailed suggestions and results on <a class="link" href="../perf.html" title="Chapter 22. Performance">performance</a>. 242 </p> 243</li> 244<li class="listitem"> 245<p class="simpara"> 246 <span class="emphasis"><em>How do I handle infinity and NaNs portably?</em></span> 247 </p> 248<p class="simpara"> 249 See <a class="link" href="fp_facets.html" title="Facets for Floating-Point Infinities and NaNs">nonfinite fp_facets</a> for 250 Facets for Floating-Point Infinities and NaNs. 251 </p> 252</li> 253<li class="listitem"> 254<p class="simpara"> 255 <span class="emphasis"><em>Where are the pre-built libraries?</em></span> 256 </p> 257<p class="simpara"> 258 Good news - you probably don't need any! - just <code class="computeroutput"><span class="preprocessor">#include</span> 259 <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span></code><span class="emphasis"><em>math/distribution_you_want></em></span>. 260 But in the unlikely event that you do, see <a class="link" href="building.html" title="If and How to Build a Boost.Math Library, and its Examples and Tests">building 261 libraries</a>. 262 </p> 263</li> 264<li class="listitem"> 265<p class="simpara"> 266 <span class="emphasis"><em>I don't see the function or distribution that I want.</em></span> 267 </p> 268<p class="simpara"> 269 You could try an email to ask the authors - but no promises! 270 </p> 271</li> 272<li class="listitem"> 273<p class="simpara"> 274 <span class="emphasis"><em>I need more decimal digits for values/computations.</em></span> 275 </p> 276<p class="simpara"> 277 You can use Boost.Math with <a href="../../../../../libs/multiprecision/doc/html/index.html" target="_top">Boost.Multiprecision</a>: 278 typically <a href="../../../../../libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html" target="_top">cpp_dec_float</a> 279 is a useful user-defined type to provide a fixed number of decimal digits, 280 usually 50 or 100. 281 </p> 282</li> 283<li class="listitem"> 284<p class="simpara"> 285 Why can't I write something really simple like <code class="computeroutput"><span class="identifier">cpp_int</span> 286 <span class="identifier">one</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> <span class="identifier">cpp_dec_float_50</span> 287 <span class="identifier">two</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> <span class="identifier">one</span> 288 <span class="special">*</span> <span class="identifier">two</span><span class="special">;</span></code> 289 </p> 290<p class="simpara"> 291 Because <code class="computeroutput"><span class="identifier">cpp_int</span></code> might be 292 bigger than <code class="computeroutput"><span class="identifier">cpp_dec_float</span> <span class="identifier">can</span> <span class="identifier">hold</span></code>, 293 so you must make an <span class="bold"><strong>explicit</strong></span> conversion. 294 See <a href="http://svn.boost.org/svn/boost/trunk/libs/multiprecision/doc/html/boost_multiprecision/intro.html" target="_top">mixed 295 multiprecision arithmetic</a> and <a href="http://svn.boost.org/svn/boost/trunk/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html" target="_top">conversion</a>. 296 </p> 297</li> 298<li class="listitem"> 299<p class="simpara"> 300 <span class="emphasis"><em>How do I choose between Boost.Multiprecision cpp_bin_50 and cpp_dec_50?</em></span> 301 </p> 302<p class="simpara"> 303 Unless you have a specific reason to choose <code class="computeroutput"><span class="identifier">cpp_dec_</span></code>, 304 then the default choice should be <code class="computeroutput"><span class="identifier">cpp_bin_</span></code>, 305 for example using the convenience <code class="computeroutput"><span class="identifier">typedefs</span></code> 306 like <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_50</span></code> or <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_100</span></code>. 307 </p> 308<p class="simpara"> 309 In general, both work well and give the same results and at roughly the 310 same speed with <code class="computeroutput"><span class="identifier">cpp_dec_50</span></code> 311 sometimes faster. 312 </p> 313<p class="simpara"> 314 cpp_dec_ was developed first paving the way for cpp_bin_. cpp_dec_ has 315 several guard digits and is not rounded at all, using 'brute force' to 316 get the promised number of decimal digits correct, but making it difficult 317 to reason about precision and computational uncertainty, for example see 318 <span class="bold"><strong>https://svn.boost.org/trac10/ticket/12133</strong></span>. 319 It also has a fast but imprecise division operator giving surprising results 320 sometimes, see <span class="bold"><strong>https://svn.boost.org/trac10/ticket/11178</strong></span>. 321 </p> 322<p class="simpara"> 323 cpp_bin_ is correctly/exactly rounded making it possible to reason about 324 both the precision and rounding of the results. 325 </p> 326</li> 327<li class="listitem"> 328<p class="simpara"> 329 <span class="emphasis"><em>How do I see or report bugs and features, and request new functions?</em></span> 330 </p> 331<p class="simpara"> 332 Currently open bug reports can be viewed <a href="https://github.com/boostorg/math/issues" target="_top">here</a> 333 on GITHUB. 334 </p> 335<p class="simpara"> 336 All old bug reports including closed ones can be viewed on Trac (now read-only) 337 <a href="https://svn.boost.org/trac/boost/query?status=assigned&status=closed&status=new&status=reopened&component=math&col=id&col=summary&col=status&col=type&col=milestone&col=component&order=priority" target="_top">here</a> 338 and more recent issues on GIThub <a href="https://github.com/boostorg/math/issues?utf8=%E2%9C%93&q=is%3Aissue" target="_top">here</a>. 339 </p> 340</li> 341<li class="listitem"> 342 <span class="emphasis"><em>How can I tell if my compiler will work with Boost.Math?</em></span> 343 </li> 344</ol></div> 345<p> 346 You should start by assuming that your compiler/platform <span class="bold"><strong>will</strong></span> 347 compile, even if it only supports a C++03 standard. 348 </p> 349<p> 350 Boost in general does <span class="bold"><strong>not</strong></span> 'support' a particular 351 C++ standard or compiler or platform. Each library has its own requirements, 352 and for Boost.Math, each individual function or distribution or tool may have 353 different requirements and may or may not work on any particular compiler. 354 </p> 355<p> 356 So the short answer is to try it and see what works for you. 357 </p> 358<p> 359 Some recent functions are written to require more recent standards, even perhaps 360 not-yet-standardized features. Some clues about requirements can be gleaned 361 from tests and examples (see jamfiles) and notes on requirements in documentation. 362 You can refer to the <a href="https://www.boost.org/development/tests/develop/developer/math.html" target="_top">Boost 363 Test Matrix</a> to see the current results for Boost.Math tests of many 364 compilers on many platforms. But bear in mind that the testing or demonstration 365 code may use C++11 or higher features like <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><></span><span class="identifier">max_digits10</span></code>, 366 <code class="computeroutput"><span class="keyword">auto</span></code>, <code class="computeroutput"><span class="identifier">lambdas</span> 367 <span class="special">...</span></code> for convenience; these may not be 368 needed for your application. 369 </p> 370</div> 371<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 372<td align="left"></td> 373<td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar 374 Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, 375 Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan 376 Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, 377 Daryle Walker and Xiaogang Zhang<p> 378 Distributed under the Boost Software License, Version 1.0. (See accompanying 379 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>) 380 </p> 381</div></td> 382</tr></table> 383<hr> 384<div class="spirit-nav"> 385<a accesskey="p" href="overview_tr1.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.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="contact.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 386</div> 387</body> 388</html> 389