Преобразование наддува: многоточное действительное число в целое

Я пытаюсь преобразовать boost::multiprecision::cpp_dec_float_x к boost::multiprecision::uintx_t, Таким образом, в основном это повышение от bigreal до повышение bigint, что касается памяти, необходимой для того, чтобы это преобразование не было с потерями.
Учтите следующее:

boost::multiprecision::cpp_dec_float_100 myreal(100); /* bigreal */
boost::multiprecision::uint256_t myint; /* bigint */

Проектирование распределения памяти

Я хочу сделать преобразование из первого в последнее. Учтите, что я учел количество битов, необходимых для этого. Начиная с 256-битного целого числа, мне нужно число с плавающей запятой, способное хранить от 0 до 2 ^ 256-1. Сколько цифр мне нужно для этого? Именно так 256*log_10(2) ~= 77, Так что 100-значное число более чем достаточно. Поэтому, если я сохраню свое действительное число ниже 2 ^ 256, я могу преобразовать его в 256-разрядное целое число.

Как я могу сделать преобразование, учитывая, что convert_to<> может использоваться только со встроенными типами и static_cast<> поднять ошибки (что ожидается, учитывая, что форсировать документацию не упоминается такой контекст)? Спасибо

Не заботиться о потере данных

Меня не волнует потеря данных. Для моей цели я буду хранить (в большой переменной) целое число (без десятичной части). Так что я в порядке!

3

Решение

Я не знаю, если это вы ищете, попробуйте …

cpp_dec_float_100 myreal(100);
cpp_dec_float_100 int_part = myreal.backend().extract_integer_part();

Тип по-прежнему cpp_dec_float_100, но содержит только целую часть.
Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector