namespaceboost{namespacemultiprecision{typedefunspecified-typelimb_type;enumcpp_integer_type{signed_magnitude,unsigned_magnitude};enumcpp_int_check_type{checked,unchecked};template<unsignedMinDigits=0,unsignedMaxDits=0,cpp_integer_typeSignType=signed_magnitude,cpp_int_check_typeChecked=unchecked,classAllocator=std::allocator<limb_type>>classcpp_int_backend;//// Expression templates default to et_off if there is no allocator://template<unsignedMinDigits,unsignedMaxDigits,cpp_integer_typeSignType,cpp_int_check_typeChecked>structexpression_template_default<cpp_int_backend<MinDigits,MaxDigits,SignType,Checked,void>>{staticconstexpression_template_optionvalue=et_off;};typedefnumber<cpp_int_backend<>>cpp_int;// arbitrary precision integertypedefrational_adaptor<cpp_int_backend<>>cpp_rational_backend;typedefnumber<cpp_rational_backend>cpp_rational;// arbitrary precision rational number// Fixed precision unsigned types:typedefnumber<cpp_int_backend<128,128,unsigned_magnitude,unchecked,void>>uint128_t;typedefnumber<cpp_int_backend<256,256,unsigned_magnitude,unchecked,void>>uint256_t;typedefnumber<cpp_int_backend<512,512,unsigned_magnitude,unchecked,void>>uint512_t;typedefnumber<cpp_int_backend<1024,1024,unsigned_magnitude,unchecked,void>>uint1024_t;// Fixed precision signed types:typedefnumber<cpp_int_backend<128,128,signed_magnitude,unchecked,void>>int128_t;typedefnumber<cpp_int_backend<256,256,signed_magnitude,unchecked,void>>int256_t;typedefnumber<cpp_int_backend<512,512,signed_magnitude,unchecked,void>>int512_t;typedefnumber<cpp_int_backend<1024,1024,signed_magnitude,unchecked,void>>int1024_t;// Over again, but with checking enabled this time:typedefnumber<cpp_int_backend<0,0,signed_magnitude,checked>>checked_cpp_int;typedefrational_adaptor<cpp_int_backend<0,0,signed_magnitude,checked>>checked_cpp_rational_backend;typedefnumber<checked_cpp_rational_backend>checked_cpp_rational;// Checked fixed precision unsigned types:typedefnumber<cpp_int_backend<128,128,unsigned_magnitude,checked,void>>checked_uint128_t;typedefnumber<cpp_int_backend<256,256,unsigned_magnitude,checked,void>>checked_uint256_t;typedefnumber<cpp_int_backend<512,512,unsigned_magnitude,checked,void>>checked_uint512_t;typedefnumber<cpp_int_backend<1024,1024,unsigned_magnitude,checked,void>>checked_uint1024_t;// Fixed precision signed types:typedefnumber<cpp_int_backend<128,128,signed_magnitude,checked,void>>checked_int128_t;typedefnumber<cpp_int_backend<256,256,signed_magnitude,checked,void>>checked_int256_t;typedefnumber<cpp_int_backend<512,512,signed_magnitude,checked,void>>checked_int512_t;typedefnumber<cpp_int_backend<1024,1024,signed_magnitude,checked,void>>checked_int1024_t;}}// namespaces
Шаблон класса<cpp_int_backend>соответствует всем требованиям для типаBackend. Его члены и функции, не являющиеся членами, намеренно не документируются: они считаются деталями реализации, которые могут быть изменены.
Аргументы шаблона:
MinBits
Определяет количество битов для хранения непосредственно внутри объекта, прежде чем прибегнуть к динамическому выделению памяти. При нуле это поле определяется автоматически на основе того, сколько битов может храниться в союзе с динамическим заголовком хранилища: установка большего значения может улучшить производительность, поскольку большие целые значения будут храниться внутри до того, как потребуется выделение памяти.
MaxBits
Определяет максимальное количество битов, подлежащих хранению в типе: в результате получается фиксированный тип точности. Когда это значение такое же, как у MinBits, то параметр Allocator игнорируется, так как никакого динамического выделения памяти никогда не будет выполнено: в этой ситуации параметр Allocator должен быть настроен на тип<void>. Обратите внимание, что этот параметр не должен использоваться просто для предотвращения больших выделений памяти, не только потому, что роль лучше выполняется распределителем, но и фиксированные целые числа имеют тенденцию выделять все MaxBits памяти чаще, чем можно было бы ожидать.
SignType
Определяет, подписан ли полученный тип или нет. Обратите внимание, что длятипов произвольной точностиэтот параметр должен быть<signed_magnitude>. Для фиксированных типов точности этот тип может быть либо<signed_magnitude>, либо<unsigned_magnitude>.
Checked
Этот параметр имеет два значения:<checked>или<unchecked>. См.учебникдля получения дополнительной информации.
Allocator
Распределитель для использования для динамического распределения памяти, или тип<void>, если MaxBits == MinBits.
Более подробную информацию об этом типе можно найти вучебнике.
Статья cpp_int раздела Chapter 1. Boost.Multiprecision Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.