【问题标题】:Can some one explain why GMP mpz_sizeinbase will return 1 too big?有人可以解释为什么 GMP mpz_sizeinbase 会返回 1 太大吗?
【发布时间】:2018-12-10 08:53:11
【问题描述】:

我用gmp库写了一个C之类的程序

len = mpz_sizeinbase(res, 10);

当 res = 9 时,它给了我 2。所以我检查了手册,它说

    size_t mpz_sizeinbase (mpz_t op, int base)

返回在给定基数中以位数测量的 op 大小。 base 可以在 2 到 62 之间变化。 op 的符号被忽略,只使用绝对值。结果将是精确的或 1 太大。如果 base 是 2 的幂,则结果总是准确的。如果 op 为零,则返回值始终为 1。

我只是想知道为什么这个函数设计有这个泄漏?为什么不能准确?

我发现了一些类似的问题:

GMP mpz_sizeinbase returns size 2 for 9 in base 10

Number of digits of GMP integer

【问题讨论】:

标签: c gmp


【解决方案1】:

mpz_sizeinbase 不看整数,而只看最高的单词。然后它估计大小。问题是它可能正在查看 999999999 或 1000000000。要确切知道两者中的哪一个是数字的所有位,必须查看。 mpz_sizeinbase 所做的是(以 word == digit 为例)计算 9xxxxxxxx 的大小。 xxxxxxxx 部分被忽略,可能导致第一位数字溢出。所以大小加一并返回。

这让您可以分配足够的空间来快速转换号码,而在某些情况下浪费最少。另一种方法是转换整数以获得大小,分配缓冲区,然后重新执行以实际存储结果。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多