#включает  </мультиплексия/float128.hpp>
namespace boost{ namespace multiprecision{
class float128_backend;
typedef number<float128_backend, et_off>    float128;
}} 
Тип числа float128 представляет собой очень тонкую обертку вокруг типов данных GCC float128 или Intel _Quad и обеспечивает тип реального числа, который является заменой для родных типов с плавающей точкой C++, но с 113-битной мантиссой и совместим с 128-битным QUAD FORTRAN.
Доступны все стандартные библиотеки и поддержка numeric_limits, производительность должна быть эквивалентна базовым родным типам: например, бенчмарки LINPACK для GCC float128 и boost::multiprecision::float128 достигли 5,6 MFLOPS.
Как и обычные преобразования из арифметических и струнных типов, экземпляры float128 являются копируемыми и присваиваемыми из типов данных GCC float128 и Intel _Quad.
Также можно получить доступ к базовому типу float128 или _Quad через функцию data() члена float128_backend.
Что вы должны знать при использовании этого типа:
- По умолчанию построенные float128имеют значение ноль.
- Этот бэкэнд поддерживает rvalue-ссылки и является Move-Aware, делая инстанциации номер на этом бэкэнд-движении осведомленными.
- Невозможно переместить объекты этого типа в строку и обратно и получить точно такое же значение при компилировании с компилятором C++ Intel и использовании _Quadв качестве основного типа: это текущее ограничение нашего кода. Круглое спотыкание при использованииfloat128в качестве базового типа возможно (как для GCC, так и для Intel).
- Преобразование из строки приводит к тому, что std::runtime_errorвыбрасывается, если строка не может быть интерпретирована как действительное число с плавающей точкой.
- Разделение на ноль приводит к бесконечности.
- Тип float128может использоваться как буквальный тип (поддержка Constexpr).
- При использовании компилятора Intel базовый тип по умолчанию float128, если он доступен, и_Quad, если нет. Вы можете переопределить по умолчанию, определив либоBOOST_MP_USE_FLOAT128, либоBOOST_MP_USE_QUAD.
- Когда базовым типом является тип Intel _Quad, код должен быть составлен с помощью опции компилятора-Qoption,cpp,--extended_float_type.
#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions/gamma.hpp>
#include <iostream>
int main()
{
   using namespace boost::multiprecision;
   
   float128 b = 2;
   
   std::cout << std::numeric_limits<float128>::digits << std::endl;
   
   std::cout << std::numeric_limits<float128>::digits10 << std::endl;
   
   std::cout << std::setprecision(std::numeric_limits<float128>::max_digits10)
      << log(b) << std::endl; 
   
   std::cout << boost::math::tgamma(b) << std::endl;
   
   
   std::cout << boost::math::tgamma(float128(1000)) << std::endl;
   
   
   
   constexpr float128 pi = 3.1415926535897932384626433832795028841971693993751058Q;
   return 0;
}