【问题标题】:Specify Very large numbers use in C指定在 C 中使用的非常大的数字
【发布时间】:2016-01-30 01:48:23
【问题描述】:

我正在考虑使用大整数,我认为的一种方法是使用Gmplib,我处理的是小例子,但它可以处理像 2 ^ (2 ^ (2 ^ 1024)) 这样的数字吗??

我的问题是如何表示这个大数字,因为(不确定)计算器也可能会溢出。

【问题讨论】:

  • “我想做 X,一种方法是使用 FooLib。... 有任何库吗?” ……呃……什么?您刚刚回答了自己的问题!
  • 你需要 2^(2^1024) 位来存储这个数字。你有这么多比特吗?
  • 宇宙有多少个原子?一般规则是在发布问题之前先思考。
  • 位代表什么由程序员定义。可以表示02 ** (2 ** (2 ** 1024)) 的变量占用1 位。可以表示-128 * 2 ** (2 ** (2 ** 1024))128 * 2 ** (2 ** (2 ** 1024)) 范围内的任何数字的变量占用8 位。语言和 CPU 内置了对非常少量的表示形式的支持;但这只是一种不便,而不是限制。不便之处包括(例如)当编译器无法处理数字本身的表示时编写char myNumber = 1; // Represents 1 * 2 ** (2 ** (2 ** 1024))

标签: c bitvector


【解决方案1】:

我正在考虑使用大整数,我认为的一种方法是使用 Gmplib,我处理的是小例子,但它可以处理像 2 ^ (2 ^ (2 ^ 1024)) 这样的数字吗??

没有。 GMP有两种操作模式:大整数和大浮点数。第一个只能对整数值可以在内存中完全表示的数字进行操作;第二个仅限于可以在大约 64 位内表示的指数。您描述的数字不符合这些限制中的任何一个。 (仅指数太大,无法记忆!)

我的方法:我将尝试通过将它们存储为二进制数/位向量来减少噪音,因为它会让我摆脱 > 一个 2^ 步骤。

您在此处或下一段中要说的内容并不完全清楚,但您所描述的内容听起来像是典型的多精度整数实现。这与 GMP 存储大整数的做法没有什么不同,并且不适用于此应用程序。

您所描述的规模数字并不容易使用。无论您是找到一个与他们合作的库还是自己编写一个库,都可能需要专门设计用于对具有这种特定结构的数字进行操作的目的。它们太大了,无法做任何其他事情。

【讨论】:

  • 是的,我不确定某些东西是否已经存在。通过我的方法,我的意思不是指定选择 0 到 15 之间的数字,我可以表示与从 0000 到 1111 选择相同的规范或直接 *bitvector[4]。
  • @user2754673 您描述的方法已经是计算机存储整数的方式。这不是新的或不同的东西。
  • 没有。我什至没有任何建议。我只是在说明一种指定 1023 的方法,你可以只指定位向量 [10] 就可以逃脱。而已。我知道这就是计算机存储它们的方式。我只是问有没有办法以某种方式表示以某种方式处理溢出,因为如果我必须这样做,我必须将每个 32 位向量存储在一个不酷的数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
相关资源
最近更新 更多