【问题标题】:BigInteger in C?C语言中的大整数?
【发布时间】:2010-10-08 14:04:33
【问题描述】:

在 C 中处理大量数字的最简单方法是什么?我需要将值存储在区域1000^900,或者以更易于阅读的形式10^2700

有没有人知道一个简单的方法来做到这一点?任何帮助将不胜感激!

【问题讨论】:

  • 1000^900 真的很大,由于内存限制,它可能会给 Big Integers 带来问题。您可能需要一些进行符号计算的东西,这样您就可以保持 1000^900 的值。
  • @jww 1000^900 并没有那么大。我蹩脚的自制多精度库毫不费力地计算了它,所用的时间比我测量的要短。这是一个 8,970 位的数字,几乎不会占用内存。

标签: c variables data-storage bigint


【解决方案1】:

使用libgmp:

GMP 是一个免费的任意精度算术库,对有符号整数、有理数和浮点数进行运算。除了运行 GMP 的机器中的可用内存所暗示的精度之外,精度没有实际限制......

自第 6 版起,GMP 在双重许可下分发,GNU LGPL v3GNU GPL v2...

GMP 的主要目标平台是 Unix 类型的系统,例如 GNU/Linux、Solaris、HP-UX、Mac OS X/Darwin、BSD、AIX 等。众所周知,它还可以在 32 位的 Windows 上工作和 64 位模式...

【讨论】:

  • GMP可以处理1000^900这么大的数字吗?
  • 我没有测试过,但它显示“除了可用内存所暗示的精度外,精度没有实际限制”。快速估计是 1000⁹⁰⁰
【解决方案2】:

有几个库可以帮助您做到这一点(任意精度数学):

假设这与工作无关(即您这样做是为了好玩,或者它是一种爱好,或者只是一个学习某些东西的机会),为任意精度数学编写一个库是一个相对有趣的项目。但是,如果您需要完全依赖它并且对具体细节不感兴趣,只需使用库即可。

【讨论】:

    【解决方案3】:

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

    您可以查看该任务的 Python 内置代码。

    您可以查看该任务的 Perl 扩展。

    您可以在 OpenSSL 中查看该任务的代码。

    您可以查看 GNU MP(多精度)库 - 如 kmkaplan 所述。

    【讨论】:

    • 如果我不应该使用任何外部库并且只允许使用 GCC 怎么办。现在,要实际存储 BIGINTs 或对它们执行任何计算,我该怎么办?
    • 阅读高德纳?我的意思是,TAOCP — 计算机编程的艺术(Volume 2, Semi-Numerical Algorithms;第 4.3 节多精度算术适用)。或任何涵盖多精度算术的类似书籍。
    【解决方案4】:
    猜你喜欢
    • 2012-05-28
    • 2021-07-20
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2020-05-12
    • 2016-03-25
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多