Битовый размер переменной GMP - PullRequest
2 голосов
/ 22 марта 2010

Как узнать размер объявленной переменной в GMP ?? или как мы можем определить размер целого числа в GMP?

mpz_random(temp,1);

в руководстве дано, что эта функция выделяет размер 1limb (= 32бит для моего компа) для "temp" .... но он имеет только 9-значный номер .. Так что я не думаю, что 32-битный номер размера содержит только 9-значный номер ..

Поэтому, пожалуйста, помогите мне узнать размер целочисленной переменной в GMP.

спасибо в Adv ..

Ответы [ 3 ]

4 голосов
/ 15 февраля 2012

mpz_sizeinbase(num, 2) даст вам размер в «используемых» битах.

3 голосов
/ 22 марта 2010

32 бита (4 байта) действительно могут использоваться для хранения только 9 десятичных цифр

2^32 = 4 294 967 296

здесь только 9 полных десятичных цифр (десятый находится в интервале от 0 до 4, поэтому он не полон).

Вы можете пересчитать это с помощью логарифмов:

log_10(2^32)

давай спросим гугл

log base 10(2^32) = 9.63295986

Все правильно.

1 голос
/ 22 марта 2010

Вы можете проверить количество конечностей в отладчике. Целочисленное значение GMP имеет внутреннее поле '_mp_size', которое является количеством конечностей, используемых для хранения текущего значения переменной (0 - особый случай: оно представлено с _mp_size = 0) Вот пример, который я запускал в Visual C ++ (см. Мою статью Как установить и запустить GMP в Windows с помощью MPIR ):

mpz_set_ui(temp, 1073741824); //2^30, (_mp_size = 1)
mpz_mul(temp,temp,temp); //2^60 (_mp_size = 2)
mpz_mul(temp,temp,temp); //2^120 (_mp_size = 4)
...