Специальные функции и инструменты в этой библиотеке можно использовать с MPFR (тип произвольного точного числа, основанный на GNU Multiple Precision Arithmetic Library), либо через привязки в boost/math/bindings/mpfr.hpp, либо через boost/math/bindings/mpreal.hpp.
Новые проекты рекомендуется использовать Boost.Multiprecision с GMP/MPFR backend.
Для использования этих привязок вам необходимо установить MPFR Плюс зависимость от библиотеки GMP. Вам также понадобится одна из двух поддерживаемых оберток C++ для MPFR: gmpfrxx (или mpfr_class) или mpfr-C++ (mpreal).
К сожалению, ни mpfr_class
, ни mpreal
не вполне удовлетворяют нашим концептуальным требованиям, поэтому существует очень тонкий набор дополнительных интерфейсов и некоторые вспомогательные черты, определенные в boost/math/bindings/mpfr.hpp и boost/math/bindings/mpreal.hpp, которые вы должны использовать вместо включения «gmpfrxx.h» или «mpreal.h» напрямую. Затем классы mpfr_class
или mpreal
можно использовать без изменений после включения этого заголовка, поэтому, например, шаблоны выражения mpfr_class
сохраняются и полностью поддерживаются этой библиотекой:
#include <boost/math/bindings/mpfr.hpp>
#include <boost/math/special_functions/gamma.hpp>
int main()
{
mpfr_class::set_dprec(500);
mpfr_class v = boost::math::tgamma(sqrt(mpfr_class(2)));
std::cout << std::setprecision(50) << v << std::endl;
}
Альтернативно использование с mpreal
будет выглядеть так:
#include <boost/math/bindings/mpreal.hpp>
#include <boost/math/special_functions/gamma.hpp>
int main()
{
mpfr::mpreal::set_precision(500);
mpfr::mpreal v = boost::math::tgamma(sqrt(mpfr::mpreal(2)));
std::cout << std::setprecision(50) << v << std::endl;
}
Для тех функций, которые основаны на приближении Lanczos, связывания определяют ряд приближений с точностью до 61 термина и приблизительно до 3e-113. Таким образом, это устанавливает верхний предел точности для большинства функций, определенных этой библиотекой, при использовании с mpfr_class
или mpreal
.
Существует программа проверки концепции поддержки mpfr here и here.