c - 有人可以解释为什么 GMP mpz_sizeinbase 会返回 1 太大吗?
问题描述
我使用 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。
我只想知道为什么这个功能设计有这个泄漏?为什么不能准确?
我发现了一些类似的问题:
解决方案
mpz_sizeinbase 不查看整数,而只查看最高单词。然后它估计大小。问题是它可能正在查看 999999999 或 1000000000。要确切知道两者中的哪一个是数字的所有位,必须查看。mpz_sizeinbase 所做的是(以 word == digit 为例)计算 9xxxxxxxx 的大小。xxxxxxxx 部分被忽略,可能导致第一位数字溢出。所以大小增加一并返回。
这使您可以分配足够的空间来快速转换数字,在某些情况下只会产生最小的浪费。另一种方法是转换整数以获得大小,分配缓冲区,然后重新执行以实际存储结果。
推荐阅读
- pandas - 在拉取请求之前或之后,Github 将更改合并到 Master
- laravel - facebook回调laravel后会话重定向url不适用
- amazon-web-services - 调用 CreateTrainingJob 操作时出现 ValidationException 错误:您无法覆盖 Amazon SageMaker 算法的指标定义
- java - 如何在 Java Rest API 中获取真实路径 InputStream 文件
- oracle - ORA-24344: 尝试实现 holt Winter 过程时编译错误成功
- kotlin-coroutines - 从单个协程异步下载多个内容
- ios - How to store multiple back dates in a Swift Struct?
- ios - iOS swift Firestore 加载 gRPC-C++ 框架失败
- java - 在规则中使用 CountableValueRange
- java - 在 2 行上显示文本视图(任何字符串长度)