Как я могу реализовать библиотеку GMP.mpz для генерации больших чисел в Pike?

Когда я ввожу команду:

пау (9,999999);

Я получаю следующее:

Bad argument 1 to pow(). Exponent too large.
Unknown program: pow(Gmp.mpz(999999))
-:1: 9->pow(@0=Gmp.mpz(999999))
HilfeInput:1: HilfeInput()->___HilfeWrapper()

Кто-нибудь мог бы указать мне, как эффективно реализовать библиотеку GMP.mpz, например, для вычисления 9 ^ 999999 или факториала 500000. Заранее большое спасибо за вашу помощь.

С наилучшими пожеланиями


person WerthJK    schedule 28.09.2017    source источник


Ответы (2)


Прошло 15 лет с тех пор, как я использовал щуку, поэтому это единственный возможный ответ:

1) возможно, вам нужна сборка pike с поддержкой bignum: https://pike.lysator.liu.se/docs/man/chapter_3.html#1, а затем вы можете использовать
pow() с произвольными целыми числами.

2) В качестве альтернативы можно использовать математический модуль.

person Gnudiff    schedule 16.06.2018

Похоже, это ограничение жестко запрограммировано в исходниках Pike: static void mpzmod_pow(INT32 args) в src/modules/Gmp/mpz_glue.c. Источники, доступные здесь: Исходники Pike

person Yyttsa    schedule 29.06.2018
comment
pike --info дает информацию о сборке. Моя щука среди прочего говорит: Features......auto_bignum и проблема все равно возникает. - person Yyttsa; 29.06.2018
comment
Также модуль Math, похоже, не предназначен для возведения в степень. - person Yyttsa; 29.06.2018