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

float128

Boost , Chapter 1. Boost.Multiprecision , floating-point Numbers

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

#включает </мультиплексия/float128.hpp>

namespace boost{ namespace multiprecision{
class float128_backend;
typedef number<float128_backend, et_off>    float128;
}} // namespaces

Тип числа float128 представляет собой очень тонкую обертку вокруг типов данных GCC float128 или Intel _Quad и обеспечивает тип реального числа, который является заменой для родных типов с плавающей точкой C++, но с 113-битной мантиссой и совместим с 128-битным QUAD FORTRAN.

Доступны все стандартные библиотеки и поддержка numeric_limits, производительность должна быть эквивалентна базовым родным типам: например, бенчмарки LINPACK для GCC float128 и boost::multiprecision::float128 достигли 5,6 MFLOPS[3].

Как и обычные преобразования из арифметических и струнных типов, экземпляры 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.
float128 example:
#include <boost/multiprecision/float128.hpp>
#include <boost/math/special_functions/gamma.hpp>
#include <iostream>
int main()
{
   using namespace boost::multiprecision;
   // Operations at 128-bit precision and full numeric_limits support:
   float128 b = 2;
   // There are 113-bits of precision:
   std::cout << std::numeric_limits<float128>::digits << std::endl;
   // Or 34 decimal places:
   std::cout << std::numeric_limits<float128>::digits10 << std::endl;
   // We can use any C++ std lib function, lets print all the digits as well:
   std::cout << std::setprecision(std::numeric_limits<float128>::max_digits10)
      << log(b) << std::endl; // print log(2) = 0.693147180559945309417232121458176575
   // We can also use any function from Boost.Math:
   std::cout << boost::math::tgamma(b) << std::endl;
   // And since we have an extended exponent range we can generate some really large 
   // numbers here (4.02387260077093773543702433923004111e+2564):
   std::cout << boost::math::tgamma(float128(1000)) << std::endl;
   //
   // We can declare constants using GCC or Intel's native types, and the Q suffix,
   // these can be declared constexpr if required:
   constexpr float128 pi = 3.1415926535897932384626433832795028841971693993751058Q;
   return 0;
}


[3] На 64-битном Ubuntu 11.10, GCC-4.8.0, Intel Core 2 Duo T5800.


PrevUpHomeNext

Статья float128 раздела Chapter 1. Boost.Multiprecision floating-point Numbers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: floating-point Numbers ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:43:04/0.0088388919830322/1