Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

mpfi_float

Boost , Chapter 1. Boost.Multiprecision , Interval Number Types

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Включить<Усиление/Многоточность/mpfi.hpp>

namespace boost{ namespace multiprecision{
template <unsigned Digits10>
class mpfi_float_backend;
typedef number<mpfi_float_backend<50> >    mpfi_float_50;
typedef number<mpfi_float_backend<100> >   mpfifloat_100;
typedef number<mpfi_float_backend<500> >   mpfifloat_500;
typedef number<mpfi_float_backend<1000> >  mpfi_float_1000;
typedef number<mpfi_float_backend<0> >     mpfi_float;
}} // namespaces

mpfi_float_backendтип используется в сочетании сномер: Он действует как тонкая обертка вокругMPFImpfi_t, чтобы обеспечить тип реального числа, который является заменой для родных типов плавающих точек C++, но с гораздо большей точностью и реализацией интервальной арифметики.

Типmpfi_float_backendможно использовать с фиксированной точностью, указав ненулевойпараметр шаблона Digits10или с переменной точностью, установив аргумент шаблона до нуля. Типдефы mpfi_float_50, mpfi_float_100, mpfi_float_500, mpfi_float_1000 обеспечивают арифметические типы с точностью 50, 100, 500 и 1000 десятичных знаков соответственно. Typedef mpfi_float обеспечивает переменный тип точности, точность которого может управляться через функции члена.

[Note] Note

Этот тип обеспечивает только поддержкуnumeric_limits, когда точность фиксируется во время компиляции.

Как и обычные преобразования из арифметических и струнных типов, экземплярычисла<mpfi_float_backend<N>>являются копируемыми и присваиваемыми из:

  • MPFIнативный типmpfi_t.
  • номеробертывается вокругMPFIилиMPFR:номер<mpfi_float_backend<M>>>mpfr_float<M>.
  • Существует два конструктора аргументов, принимающих двачисла<mpfr_float<M>>аргументов, определяющих интервал.

Также можно получить доступ к базовомуmpfi_tчерез функциюmpfi_float_backendэлемента данных.

Что вы должны знать при использовании этого типа:

  • По умолчанию построенmpfi_float_backendустановлен на NaN (это поведение по умолчаниюMPFI).
  • Не вносятся изменения вGMPилиMPFRглобальные настройки, поэтому этот тип может сосуществовать с существующимMPFRилиGMPкодом.
  • Код может в равной степени использоватьMPIRвместоGMP— действительно, это предпочтительный вариант на Win32.
  • Этот бэкэнд поддерживает rvalue-ссылки и является Move-Aware, делая инстанциации числана этом бэкэнд-движении осведомленными.
  • Конверсия из строки приводит к тому, чтоstd::runtime_errorвыбрасывается, если строка не может быть интерпретирована как действительное число с плавающей точкой.
  • Разделение на ноль приводит к бесконечности.

Существуют некоторые дополнительные нечленские функции для работы на интервалах:

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfr_float_backend<Digits10>, ExpressionTemplates> lower(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);

Возвращает нижний конец интервала.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfr_float_backend<Digits10>, ExpressionTemplates> upper(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);

Возвращает верхний конец интервала.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfr_float_backend<Digits10>, ExpressionTemplates> median(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);

Возвращает среднюю точку интервала.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfr_float_backend<Digits10>, ExpressionTemplates> width(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& val);

Возвращает абсолютную ширину интервала.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfi_float_backend<Digits10>, ExpressionTemplates> intersect(
  const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
  const number<mpfi_float_backend<Digits10>, ExpressionTemplates>&  b);

Возвращает интервал, который является пересечениемaиb. Возвращает неопределенный пустой интервал, если такого пересечения нет.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
number<mpfi_float_backend<Digits10>, ExpressionTemplates> hull(
  const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
  const number<mpfi_float_backend<Digits10>, ExpressionTemplates>&  b);

Возвращает интервал, который является союзомaиb.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool overlap(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
             const number<mpfi_float_backend<Digits10>, ExpressionTemplates>&  b);

Возвращаетистиннотолько в том случае, если интервалыaиbперекрываются.

template <unsigned Digits10, expression_template_option ExpressionTemplates1, expression_template_option ExpressionTemplates2>
bool in(const number<mpfr_float_backend<Digits10>, ExpressionTemplates1>& a,
        const number<mpfi_float_backend<Digits10>, ExpressionTemplates2>&  b);

Возвращаетистиннотолько в том случае, если точкаaсодержится в интервалеb.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool zero_in(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);

Возвращаетистинноетолько в том случае, если интервалaсодержит нулевое значение.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
            const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);

истиннотолько в том случае, еслиаявляется подмножествомb.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool proper_subset(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a,
                   const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& b);

Возвращаетистиннотолько в том случае, еслиaявляется правильным подмножествомb.

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool empty(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);

Возвращаетистиннотолько в том случае, еслиявляется пустым интервалом, эквивалентнымверхнему[] нижнему].

template <unsigned Digits10, expression_template_option ExpressionTemplates>
bool singleton(const number<mpfi_float_backend<Digits10>, ExpressionTemplates>& a);

Возвращаетистинно, еслиниже==выше.

MPFI example:
#include <boost/multiprecision/mpfi.hpp>
#include <boost/math/special_functions/gamma.hpp>
#include <iostream>
int main()
{
   using namespace boost::multiprecision;
   // Operations at variable precision and no numeric_limits support:
   mpfi_float a = 2;
   mpfi_float::default_precision(1000);
   std::cout << mpfi_float::default_precision() << std::endl;
   std::cout << sqrt(a) << std::endl; // print root-2
   // Operations at fixed precision and full numeric_limits support:
   mpfi_float_100 b = 2;
   std::cout << std::numeric_limits<mpfi_float_100>::digits << std::endl;
   // We can use any C++ std lib function:
   std::cout << log(b) << std::endl; // print log(2)
   // Access the underlying data:
   mpfi_t r;
   mpfi_init(r);
   mpfi_set(r, b.backend().data());
   // Construct some explicit intervals and perform set operations:
   mpfi_float_50 i1(1, 2), i2(1.5, 2.5);
   std::cout << intersect(i1, i2) << std::endl;
   std::cout << hull(i1, i2) << std::endl;
   std::cout << overlap(i1, i2) << std::endl;
   std::cout << subset(i1, i2) << std::endl;
   mpfi_clear(r);
   return 0;
}

PrevUpHomeNext

Статья mpfi_float раздела Chapter 1. Boost.Multiprecision Interval Number Types может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Interval Number Types ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 03:15:35/0.0049622058868408/0