При этом<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>.
#include<boost/multiprecision/tommath.hpp>#include<iostream>intmain(){boost::multiprecision::tom_intv=1;// Do some arithmetic:for(unsignedi=1;i<=1000;++i)v*=i;std::cout<<v<<std::endl;// prints 1000!std::cout<<std::hex<<v<<std::endl;// prints 1000! in hex formattry{std::cout<<std::hex<<-v<<std::endl;// Ooops! can't print a negative value in hex format!}catch(conststd::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(conststd::runtime_error&e){std::cout<<e.what()<<std::endl;}return0;}
Статья tom_int раздела Chapter 1. Boost.Multiprecision Integer Types может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.