boost::multiprecision::pow с двумя значениями cpp_int

Есть ли способ использовать boost::multiprecision::pow с двумя значениями cpp_int в качестве параметров? Все, что я могу найти в документации, имеет параметры типа cpp_int для базы и int для экспоненты. Это кажется очень ограничивающим.


person Bob    schedule 19.04.2017    source источник
comment
Как это ограничивает? Будете ли вы повышать степень выше MAXINT? Как?   -  person sehe    schedule 19.04.2017
comment
Что значит "как"? Разве смысл библиотек с высокой точностью не в том, чтобы обрабатывать такие огромные числа?   -  person Bob    schedule 19.04.2017
comment
Интересно, что в расширении гипергеометрического ряда может быть ошибка: /a> — я просто оставлю это здесь на случай, если вы столкнетесь с этой проблемой и захотите сообщить об этом выше. Хотя я могу что-то упустить.   -  person sehe    schedule 20.04.2017
comment
Уточните, пожалуйста, какие из дополнительных функций вам нужны.   -  person Serg    schedule 13.11.2017


Ответы (2)


Комментарий: Как это ограничивает? Будете ли вы повышать степень выше MAXINT? Как?

Вопрос:
Что значит "как"? Разве смысл библиотек с высокой точностью не в том, чтобы обрабатывать такие огромные числа?

Нет. Такие огромные числа редко имеют смысл при точности без потерь.

Допустим, мы начинаем с достаточно небольшого числа, например 10. Наименьший показатель степени, который не помещается в 64-битное целое число, будет 2^64. Итак, число равно 10^(2^64), что примерно равно 18446744073709551617 десятичных цифр ≈ 1,84467×10^19 десятичных цифр.

Чтобы напечатать это, вам понадобится бумага весом примерно 1,4757 × 10 ^ 11 метрических тонн, если предположить, что 5000 цифр на 80-граммовой странице. Это примерно эквивалентно общей биомассе на Земле (≈ 8×10^13 кг).

Ну, конечно, ты не глупый и не напечатаешь! Вам нужно только поместить его в ОЗУ, поэтому вы начали краудфандинг для ваших 7,6598 экзабайт ОЗУ. Не говоря уже об источнике питания для него, потому что запитывает его за один час будет стоить около 7 гигаватт-часов, что сравнимо с половиной выхода энергии ядерной бомбы Little Boy.

Что ты можешь сделать

Boost Multiprecision действительно позволяет вам использовать точное и без потерь представление огромного целого числа, но ресурсы ваших систем ограничивают общую емкость.

Как показано, показатели степени, превышающие 64-битные целые числа, не имеют смысла для этих типов.

Конечно, вы можете использовать десятичное/двоичное представление с плавающей запятой с произвольной точностью (конечно, с учетом ограничений физики и экономики), например boost::multiprecision::mpf_float_1000.

person sehe    schedule 20.04.2017
comment
Как человек, знакомый с большими числами, я одобряю этот ответ. +1 - person Mysticial; 20.04.2017

Вы можете использовать boost::multiprecision::float и соответствующие реализации boost::multi Precision::pow.

person Serg    schedule 13.11.2017