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

tom_int

Boost , Chapter 1. Boost.Multiprecision , Integer 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

<#include<boost/multiprecision/tommath.hpp>>

namespace boost{ namespace multiprecision{
class tommath_int;
typedef number<tommath_int >         tom_int;
}} // namespaces

При этом<tommath_int>используется как<boost::multiprecision::tom_int>. Он действует как тонкая обертка вокругlibtommath<tom_int>, чтобы обеспечить целочисленный тип, который является заменой для родных C++ целочисленных типов, но с неограниченной точностью.

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

  • По умолчанию построенные объекты имеют нулевое значение (этолибтомматпо умолчанию).
  • Хотя<tom_int>в основном является заменой встроенных целочисленных типов, следует отметить, что это довольно странный зверь, поскольку это подписанный тип, который не является типом комплемента 2. В результате битовые операции<|&^>забросят<std::runtime_error>исключение, если один из аргументов будет отрицательным. Аналогичным образом оператор комплемента<~>намеренно не реализуется для этого типа.
  • Форматированный IO для этого типа не поддерживает октальную или шестидесятичную нотацию для отрицательных значений, в результате выполнения отформатированного вывода на этом типе, когда аргумент является отрицательным и любой из флагов<std::ios_base::oct>или<std::ios_base::hex>установлен, приведет к тому, что<std::runtime_error>будет брошен.
  • Преобразование из строки приводит к тому, что<std::runtime_error>бросается, если строка не может быть интерпретирована как действительное целое число.
  • В результате деление на ноль приводит к выпадению<std::overflow_error>.
Example:
#include <boost/multiprecision/tommath.hpp>
#include <iostream>
int main()
{
   boost::multiprecision::tom_int v = 1;
   // Do some arithmetic:
   for(unsigned i = 1; i <= 1000; ++i)
      v *= i;
   std::cout << v << std::endl; // prints 1000!
   std::cout << std::hex << v << std::endl; // prints 1000! in hex format
   try{
      std::cout << std::hex << -v << std::endl; // Ooops! can't print a negative value in hex format!
   }
   catch(const std::runtime_error& e)
   {
      std::cout << e.what() << std::endl;
   }
   try{
      // v is not a 2's complement type, bitwise operations are only supported
      // on positive values:
      v = -v & 2;
   }
   catch(const std::runtime_error& e)
   {
      std::cout << e.what() << std::endl;
   }
   return 0;
}

PrevUpHomeNext

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




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



:: Главная :: Integer Types ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:07:14/0.02807092666626/1