如何知道GMP中声明的变量的大小?或者我们如何确定GMP中整数的大小?
mpz_random(temp,1);
在手册中给出了这个函数将1limb(=我的comp为32位)大小分配给“temp”.... 但它只有9位数字.. 所以我不认为32位大小的数字仅包含9位数字。
所以请帮助我知道GMP中整数变量的大小..
感谢adv ..
答案 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)