有哪些选项可以代表超过2 ^ 81位的数字?

时间:2012-02-08 04:27:33

标签: math base arbitrary-precision largenumber

我遇到了一个有趣的数学问题,需要我用数字超过2个 81 数字进行算术运算。我知道用一个系统代表一个这么大的数字是不可能的,每个数字都有一个内存单元,但是想知道是否有任何解决方法。

我最初的想法是使用一个非常大的基数而不是基数10(十进制)。经过一番思考后,我相信(但无法验证)最佳基数将是数字位数的平方根(因此,对于具有2 81 数字的数字,您将使用基数2 40 ish)这是一种改进,但是不能很好地扩展,但仍然不是很实用。

那么我有什么选择?我知道许多任意精度库,但有没有任何规模来支持这种算术?

谢谢o7

编辑:在思考了一些之后,我意识到我可能完全错误的“最佳基数将是数字位数的平方根”,但a)这就是为什么我要求和b)我太累了,不记得我最初的推理假设。

编辑2:基数10中的1000,000 =基数16中的F4240 =基数8中的364110.在基数16中,您需要20位来存储您需要的基数8中的数字21所以看起来通过增加基数规定所需的总位数。 (这可能是错的)

3 个答案:

答案 0 :(得分:3)

这实际上是一个假装成算术问题的压缩问题。如此大的数字可以完全取决于它的Kolmogorov complexity。如果你需要对如此大的数字进行计算,那么它显然不会以2 ^ 81个十进制数字到达;在这种情况下,Kolmogorov的复杂性太高了,你甚至无法在太阳出来之前读完输入。处理这样一个数字的最好方法是通过延迟评估和像Scheme这样的语言提供的符号理性类型。通过这种方式,程序可以回答有关数字计算结果的一些问题,而无需将所有这些数字写入内存。

答案 1 :(得分:1)

我认为你应该使用scientific notation。你将失去精确度,但你不能存储大而不失精度的数字,因为存储2 ^ 81位数将需要超过10 ^ 24位(大约千亿亿兆字节),这是你现在可以拥有的更多。

答案 2 :(得分:1)

  

超过2 ^ 81位数

具有2 ^ 81位的非小数,将需要3 * 10 ^ 11 太字节的数据。每个号码。

假设您希望每个数字和数据都不可压缩。

可以尝试压缩存储在某种稀疏数组中的数据,该稀疏数组仅为非零元素分配内存,但这并不能保证数据适合任何地方。

这种精确度在现代硬件上无用且无法处理。 2 ^ 81位将花费大量时间来简单地遍历数字(9584万亿年,假设1字节需要1毫秒),更不用说乘法/除法。我也想不出任何需要精确度的问题。

您唯一的选择是将精度降低到前N个有效数字并使用浮点数。由于数据不适合双倍,因此您必须使用具有浮点支持的bignum库,它提供极大的浮点数。由于您可以用位表示2 ^ 81(指数),因此可以使用非常大的浮点存储数字的开头。

  

十分之一的1000,000

无论您的基数如何,正数至少需要下限(log2(数字))+ 1位来存储它。如果base不是2,那么将需要多于floor(log2(number))+ 1位来存储它。数字库不会减少所需的位数。