C语言中的大整数?

32

如何在C语言中处理大量的数字?我需要存储类似于 1000^900 这样的值,或者更为易读的形式 10^2700

有没有简单的方法可以处理这个问题?非常感谢任何帮助!

4个回答

38

使用libgmp库:

GMP是一个自由的库,用于任意精度算术运算,支持有符号整数、有理数和浮点数。除了GMP运行的机器上可用的内存规定之外,它没有实际的精度限制...

自版本6以来,GMP以双重许可证分发,包括GNU LGPL v3GNU GPL v2...

GMP的主要目标平台是Unix类型系统,如GNU/Linux、Solaris、HP-UX、Mac OS X/Darwin、BSD和AIX等。它也被证明可以在32位和64位模式下运行于Windows系统之上...


GMP可以处理高达1000^900的大数吗? - jww
5
我尚未进行测试,但它的意思是“除了受可用内存所限制之外,精确度没有实际上的限制”。初步估计是1000⁹⁰⁰<1024⁹⁰⁰,也就是说只需不到9000位即可容纳。我认为这不会导致GMP出现问题。 - kmkaplan
@jww 它可以轻松处理,毫不费力。我的自制多精度库(相比像GMP这样真正复杂的东西,至少是一种耻辱)可以在不难的情况下计算1000^900,而且所用时间甚至比我能测量的还要短。这是一个8,970位数,几乎不会占用过多内存。(计算它也并不像听起来那么难,因为“二进制幂”非常容易实现,并且效率极高。) - Steve Summit

12

有一些库可帮助您进行任意精度数学计算:

假设这不是与工作相关的(即您只是为了好玩、爱好或学习而这样做),编写任意精度数学库是一个相对有趣的项目。但如果您需要绝对依赖它并且不感兴趣了解其底层原理,请使用库。


5

处理大量数字有许多库可供选择。你需要整数还是浮点算术运算?

你可以查看Python内置的代码来完成任务。

你可以查看Perl扩展来完成任务。

你可以查看OpenSSL中的代码来完成任务。

你可以查看GNU MP(多精度)库,就像kmkaplan提到的那样。


如果我不能使用任何外部库,只能使用GCC。那么,要实际存储BIGINT或对其执行任何计算,我该怎么做? - phougatv
2
读过 Knuth 吗?我的意思是 TAOCP - 计算机程序设计艺术(第2卷,半数值算法; 第4.3节多精度算术适用)。或者任何类似的覆盖多精度算术的书籍。 - Jonathan Leffler


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接