При этом<gmp_int>используется как<boost::multiprecision::mpz_int>. Он действует как тонкая обертка вокругGMP<mpz_t>, чтобы обеспечить целочисленный тип, который является заменой для родных C++ целочисленных типов, но с неограниченной точностью.
Как и обычные преобразования из арифметических и струнных типов, тип<mpz_int>является копируемым и присваиваемым из:
<number<T>>, которые являются обертками вокруг этих типов:<number<gmp_float<N>>>,<number<gmp_rational>>.
Также можно получить доступ к базовой функции<mpz_t>через функцию<data()>члена<gmp_int>.
Что вы должны знать при использовании этого типа:
Никаких изменений в глобальных настройках GMP-библиотеки не вносится, поэтому вы можете безопасно смешать этот тип с существующим кодом, который используетGMP.
По умолчанию построенные<gmp_int>s имеют нулевое значение (это поведение GMP по умолчанию).
Форматированный IO для этого типа не поддерживает октальную или шестидесятичную нотацию для отрицательных значений, в результате выполнения отформатированного вывода по этому типу, когда аргумент является отрицательным и любой из флагов<std::ios_base::oct>или<std::ios_base::hex>установлен, приведет к тому, что<std::runtime_error>будет брошен.
Преобразование из строки приводит к тому, что<std::runtime_error>бросается, если строка не может быть интерпретирована как действительное целое число.
В результате деление на ноль приводит к выбросу<std::overflow_error>.
Хотя этот тип обертки вокругGMP, он будет одинаково хорошо работать сMPIR.[] [[]] [[]] [[]]] [[]]] [[]]] [[]]] [[]]] [[]]] [[[]]] [[[[]]]]] [[[]]]] [[[[]]]]] [[[[]]]]] [[[[]]]]] [[[[[]]]]]] [[[[]]]]] [[[[[]]]]][[[[]]]]][[[[]]]]][[[[]]]]][[[[[]]]]][[[[]]]]][[[[]]]]][[[[]]]]][[[[]]]]][[[[]]]]][[[[]]]][[[[]]]]
Этот бэкэнд поддерживает rvalue-ссылки и является Move-Aware, делая инстанциации<number>на этом бэкэнд-движении осведомленными.
#include<boost/multiprecision/gmp.hpp>#include<iostream>intmain(){usingnamespaceboost::multiprecision;mpz_intv=1;// Do some arithmetic:for(unsignedi=1;i<=1000;++i)v*=i;std::cout<<v<<std::endl;// prints 1000!// Access the underlying representation:mpz_tz;mpz_init(z);mpz_set(z,v.backend().data());mpz_clear(z);return0;}
Статья gmp_int раздела Chapter 1. Boost.Multiprecision Integer Types может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.