2

正如我们所知,GMP 是处理大型整数的最流行工具......我有两个关于 GMP 的问题:

  1. GMP库中的内部计算是如何完成的?假设一个两个字节的整数和另一个三个字节的整数,对这些原始位内部执行的操作是什么!??
  2. GMP 的性能速度比其他通用库高多少!?

提前致谢。对我来说,了解这些对我的项目来说非常重要。

4

2 回答 2

1

此页面 ( http://gmplib.org/manual/Algorithms.html ) 描述了 GMP 用于其操作的算法。

此外,GMP 库是开源的,因此您可以下载并自行查找。

于 2010-01-24T04:18:13.947 回答
0

GMP 使用本机整数算术来执行所有多精度算术运算。浮点运算太混乱而无法完全信任,这就是为什么 GNU MPFR 依赖 GMP 来进行多精度浮点运算的原因。原因是 IEEE 浮点标准 754/854/等。太麻烦了,从来没有完全实现过,而且实现方式因平台而异。

  1. 所有 GMP 整数和有理函数都依赖于mpn_...函数,它们是对自然数的低级运算。mpz_...例如,函数使用符号-幅度表示并处理符号,然后使用mpn_...函数进行幅度操作。基本的 GMP 数字类型是在mp_limb_t中定义的类型,gmp.h所有 GMP 操作都在该类型上完成,取决于平台,它可以是unsigned intunsigned long int、 。unsigned long long int在几乎所有平台上,所提供的示例,具有 2 和 3 字节的整数,将适合unsigned int类型,因此 GMP 将在一次拍摄中使用本机整数运算来执行最基本的算术。当您计算的数字大于肢体时,GMP 将分配多个肢体来进行多精度计算并适当地处理进位(例如参见本书)。请参阅GMP 手册条目,了解库如何在肢体上单独运行。

  2. 这就是GMP被广泛使用的原因,它既准确快速,同时具有广泛的便携性。GMP 的mpn/目录包含基本算术运算的特定每个处理器实现,每个最常用处理器的高度优化代码:x86、ARM、CRAY、IA64、mips、powerpcs、sparcs 等。每个基本操作都以最好的方式实现机器代码中的可能方式,并且 GMP 提供的 Autotools(Autoconf 和 A​​utomake)将知道哪一个链接到您编译 GMP 的特定目标的更高级别的函数。请注意,您还可以在编译之前将 GMP调整到您的机器,以便它可以为您计算的许多不同整数大小使用最佳算法(请参阅此处)。

于 2021-12-18T00:32:16.270 回答