...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
You can use the various macros below to change any (or all) of the policies.
You can make a local change by placing a macro definition before a function or distribution #include.
Caution | |
---|---|
There is a danger of One-Definition-Rule violations if you add ad-hoc macros to more than one source files: these must be set the same in every translation unit. |
Caution | |
---|---|
If you place it after the #include it will have no effect, (and it will affect only any other following #includes). This is probably not what you intend! |
If you want to alter the defaults for any or all of the policies for all functions and distributions, installation-wide, then you can do so by defining various macros in boost/math/tools/user.hpp.
Defines what happens when a domain error occurs, if not defined then defaults
to throw_on_error
, but
can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when a pole error occurs, if not defined then defaults
to throw_on_error
, but
can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when an overflow error occurs, if not defined then
defaults to throw_on_error
,
but can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when a rounding error occurs, if not defined then
defaults to throw_on_error
,
but can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when an internal evaluation error occurs, if not defined
then defaults to throw_on_error
,
but can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when an overflow error occurs, if not defined then
defaults to ignore_error
,
but can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when a denormalisation error occurs, if not defined
then defaults to ignore_error
,
but can be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines what happens when the result is indeterminate, but where there
is none the less a convention for the result. If not defined then defaults
to ignore_error
, but can
be set to any of the enumerated actions for error handing: throw_on_error
, errno_on_error
,
ignore_error
or user_error
.
Defines how many decimal digits to use in internal computations: defaults
to 0
- meaning use all available
digits - but can be set to some other decimal value. Since setting this
is likely to have a substantial impact on accuracy, it's not generally
recommended that you change this from the default.
Determines whether float
types
get promoted to double
internally
to ensure maximum precision in the result, defaults to true
,
but can be set to false
to
turn promotion of float
's
off.
Determines whether double
types get promoted to long double
internally to ensure maximum precision
in the result, defaults to true
,
but can be set to false
to
turn promotion of double
's
off.
Determines how discrete quantiles return their results: either as an integer,
or as a real value, can be set to one of the enumerated values: real
, integer_round_outwards
,
integer_round_inwards
,
integer_round_down
, integer_round_up
, integer_round_nearest
.
Defaults to integer_round_outwards
.
Determines whether functions that are mathematically undefined for a specific
distribution compile or raise a static (i.e. compile-time) assertion. Defaults
to true
: meaning that any
mathematically undefined function will not compile. When set to false
then the function will compile but
return the result of a domain error: this can be useful for some generic
code, that needs to work with all distributions and determine at runtime
whether or not a particular property is well defined.
Determines how many series iterations a special function is permitted to perform before it gives up and returns an evaluation_error: Defaults to 1000000.
Determines how many root-finding iterations a special function is permitted to perform before it gives up and returns an evaluation_error: Defaults to 200.
Suppose we want overflow errors to set ::errno
and return an infinity, discrete
quantiles to return a real-valued result (rather than round to integer),
and for mathematically undefined functions to compile, but return a domain
error. Then we could add the following to boost/math/tools/user.hpp:
#define BOOST_MATH_OVERFLOW_ERROR_POLICY errno_on_error #define BOOST_MATH_DISCRETE_QUANTILE_POLICY real #define BOOST_MATH_ASSERT_UNDEFINED_POLICY false
or we could place these definitions before
#include <boost/math/distributions/normal.hpp> using boost::math::normal_distribution;
in a source .cpp file.