[section:navigation Navigation]

Used in combination with the configured browser key, the
following keys act as handy shortcuts for common navigation tasks.

[h5 Shortcuts]
[:
[^[*p]] - Previous page

[^[*n]] - Next page

[^[*h]] - home

[^[*u]] - Up
]

The following table shows how to access these from common browsers:

[table
[[Browser][Access Method]]
[[Internet Explorer]
   [Alt+Key highlights the link only, so for example to move to the next topic
   you would need "Alt+n" followed by "Enter".]]
[[Firefox 2.0 and later][Alt+Shift+Key follows the link, so for example
   "Alt+Shift+n" will take you to the next topic.]]
[[Opera][Press Shift+Esc followed by the access key.]]
[[Konqueror][Press and release the Ctrl key, followed by the access key]]
]

Some browsers also make these links available in their site-navigation
toolbars: in Opera for example you can use Ctrl plus the left and right
arrow keys to move between "next" and "previous" topics.

[endsect]

[section:directories Directory and File Structure]

[h4 boost\/math]

[variablelist
[[\/concepts\/]
   [Prototype defining the *essential* features of a RealType 
   class (see real_concept.hpp). Most applications will use `double` 
   as the RealType (and short `typedef` names of distributions are 
   reserved for this type where possible), a few will use `float` or 
   `long double`, but it is also possible to use higher precision types 
   like __NTL_RR that conform to the requirements specified by real_concept.]]

[[\/constants\/]
   [Templated definition of some highly accurate math 
   constants (in constants.hpp).]]
  
[[\/distributions\/]
   [Distributions used in mathematics and, especially, statistics: 
   Gaussian, Students-t, Fisher, Binomial etc]]

[[\/policies\/]
   [Policy framework, for handling user requested behaviour modifications.]]
                     
[[\/special_functions\/]
   [Math functions generally regarded as 'special', like beta, 
   cbrt, erf, gamma, lgamma, tgamma ... (Some of these are specified in 
   C++, and C99\/TR1, and perhaps TR2).]]
                     
[[\/tools\/]
   [Tools used by functions, like evaluating polynomials, continued fractions, 
   root finding, precision and limits, and by tests. Some will 
   find application outside this package.]]
]
  
[h4 boost\/libs]

[variablelist
[[\/doc\/]
   [Documentation source files in Quickbook format processed into 
   html and pdf formats.]]
   
[[\/examples\/]
   [Examples and demos of using math functions and distributions.]]
   
[[\/performance\/]
   [Performance testing and tuning program.]]
   
[[\/test\/]
   [Test files, in various .cpp files, most using Boost.Test 
   (some with test data as .ipp files, usually generated using NTL RR 
   type with ample precision for the type, often for precisions 
   suitable for up to 256-bit significand real types).]]
   
[[\/tools\/]
   [Programs used to generate test data.  Also changes to the
   [@http://shoup.net/ntl/ NTL] released package to provide a few additional 
   (and vital) extra features.]]
]

[endsect]
   
[section:namespaces Namespaces]
   
All math functions and distributions are in `namespace boost::math`
   
So, for example, the Students-t distribution template in `namespace boost::math` is
   
   template <class RealType> class students_t_distribution
   
and can be instantiated with the help of the reserved name `students_t`(for `RealType  double`)
   
   typedef students_t_distribution<double> students_t;
   
   student_t mydist(10);
   
[note Some distribution names are also used in std random library,
so to avoid the risk of ambiguity it is better to make explicit using declarations,
for example: `using boost::math::students_t_distribution`]
   
Functions not intended for use by applications are in `boost::math::detail`.

Functions that may have more general use, like `digits` 
(significand), `max_value`, `min_value` and `epsilon` are in 
`boost::math::tools`.

__Policy and configuration information is in namespace `boost::math::policies`.

[endsect]

[/ structure.qbk
  Copyright 2006 John Maddock and Paul A. Bristow.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]
