GMP变量的位大小

时间:2010-03-22 01:10:03

标签: gmp

如何知道GMP中声明的变量的大小?或者我们如何确定GMP中整数的大小?

mpz_random(temp,1);

在手册中给出了这个函数将1limb(=我的comp为32位)大小分配给“temp”.... 但它只有9位数字.. 所以我不认为32位大小的数字仅包含9位数字。

所以请帮助我知道GMP中整数变量的大小..

感谢adv ..

3 个答案:

答案 0 :(得分:4)

mpz_sizeinbase(num, 2)将为您提供“已使用”位的大小。

答案 1 :(得分:3)

32位(4字节)实际上只能用于存储9位十进制数

2^32 = 4 294 967 296

所以这里只有9个完整的十进制数字(第10个是从0到4的间隔,所以它不是满的。)

您可以通过对数重新计算:

log_10(2^32)

让我们问谷歌

log base 10(2^32) = 9.63295986

一切都是正确的。

答案 2 :(得分:1)

您可以检查调试器中的肢数。 GMP整数具有内部字段'_mp_size',它是用于保存变量当前值的肢数(0是特殊情况:它用_mp_size = 0表示)。这是我在Visual C ++中运行的一个示例(请参阅我的文章How to Install and Run GMP on Windows Using 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)