2

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

mpz_random(temp,1);

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

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

谢谢你的建议。。

4

3 回答 3

4

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

于 2012-02-15T15:06:08.993 回答
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

一切都是正确的。

于 2010-03-22T01:25:02.390 回答
1

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

mpz_set_ui(温度,1073741824);//2^30, (_mp_size = 1)
mpz_mul(温度,温度,温度);//2^60 (_mp_size = 2)
mpz_mul(温度,温度,温度);//2^120 (_mp_size = 4)
于 2010-03-22T14:03:37.953 回答