Существуют две эквивалентные политики, которые влияют нарабочую точность, используемую для расчета результатов, эти политики по умолчанию равны 0, что означает вычисление с максимальной точностью, доступной в используемом типе, но могут быть установлены на другие значения, чтобы вызвать более низкие уровни точности. Возможно, вы захотите обменять точность на скорость оценки.
namespace boost{ namespace math{ namespace policies{
template <int N>
digits10;
template <int N>
digits2;
}}}
Как и следовало ожидать,цифры 10указывают число десятичных цифр для использования, ицифры 2.число двоичных цифр. Внутренне, в зависимости от того, что используется, точность всегда преобразуется вдвоичные цифры..
Эти политики указаны во время компиляции, поскольку многие специальные функции используют время компиляции для выбора того, какое приближение использовать на основе запрашиваемой точности и используемого числового типа.
Например, мы могли бы вычислить<tgamma
>приблизительно до 5 десятичных цифр, используя:
#include <boost/math/special_functions/gamma.hpp>
using boost::math::tgamma;
using boost::math::policies::policy;
using boost::math::policies::digits10;
typedef policy<digits10<5> > my_pol_5;
Или снова с помощью функции помощника<make_policy
>:
#include <boost/math/special_functions/gamma.hpp>
using boost::math::tgamma;
using namespace boost::math::policies;
double t = tgamma(12, policy<digits10<5> >());
А для квантиля распределения с точностью приблизительно 25 бит:
#include <boost/math/distributions/normal.hpp>
using boost::math::normal_distribution;
using namespace boost::math::policies;
const int bits = 25;
double q = quantile(
normal_distribution<double, policy<digits2<bits> > >(),
0.05);