Language agnostic 你怎么能处理这么大的数字?

Language agnostic 你怎么能处理这么大的数字?,language-agnostic,bigdata,largenumber,Language Agnostic,Bigdata,Largenumber,在某些情况下,程序员需要或想要找到非常大的数字。它们通常太大,以至于程序员无法理解。我说的是(12978189位)和最近计算的数字 如何创建处理这些问题的程序?这远远超过了整数、long、double、BigInteger、BigDecimal或任何类型。这些发现这些数字的程序是如何创建的?如果不存在合适的数据类型,并且每个数据类型可能会消耗千兆字节的数据,那么您如何将它们存储在内存中呢?要介绍您的具体示例: 一个1200万位数的整数对于一个典型的“大整数”类来说并不是非常大。这应该能够存储在

在某些情况下,程序员需要或想要找到非常大的数字。它们通常太大,以至于程序员无法理解。我说的是(12978189位)和最近计算的数字


如何创建处理这些问题的程序?这远远超过了整数、long、double、BigInteger、BigDecimal或任何类型。这些发现这些数字的程序是如何创建的?如果不存在合适的数据类型,并且每个数据类型可能会消耗千兆字节的数据,那么您如何将它们存储在内存中呢?

要介绍您的具体示例:

  • 一个1200万位数的整数对于一个典型的“大整数”类来说并不是非常大。这应该能够存储在内存中

  • 要存储10万亿位π,可以使用磁盘文件和内存映射它。您需要一个64位操作系统和应用程序,但您只需在磁盘上创建一个10TB的文件(您可能需要一些磁盘和一个可以跨磁盘存储它的文件系统),然后将其映射到CPU地址空间。计算π(例如)的算法可以方便地一次计算一个十六进制数字,这非常适合半字节的内存

答案(摘要)是使用机器的本机类型编写算法,以产生您想要的结果。例如,当你在纸上手工对两个非常大的整数进行加法时,你需要的最大实际计算量只有9+9+1(进位是9+9+1)。当然,你需要足够大的纸,把两个数字写在第一位,并把答案也写下来。因此,只要这两个数字和答案可以存储在计算机的硬盘(纸)中,就可以编写一种算法,该算法使用的变量最多只需要19;因此,即使是
char
变量也能处理这个问题,更不用说
int
变量了


(具体的)答案是,真正优秀的程序员已经做到了这一点,甚至还有自由/开源软件库。一个很好的例子是GNU项目,它有很多函数来处理任意大小的整数运算和任意精度的浮点运算。因此,只要计算机能够存储计算过程中所需的信息,就可以完成计算。当然,您需要花时间阅读文档。

这肯定取决于您要处理的数字类型,因为有一些巧妙的数学技巧可以处理无限长的数字等。您是指具有精确值的大得离谱的整数吗(您指定了所有数字)?因为“大得离谱的实数”或“近似值的大得离谱的数字”是另一类疯狂的数字。@rbaryyoung好吧,我指的是整数和实数,但我没有意识到这需要截然不同的方法(看一看