【发布时间】:2012-02-29 13:33:37
【问题描述】:
我遇到了一个有趣的数学问题,这将需要我做一些曲法,其中数字有超过2个 81 sup>数字。我知道它不可能将这个数字与每个数字有一个存储器单元的系统来表示一个数字,但是想知道是否有任何方法。
我最初的想法是使用非常大的基数而不是基数 10(十进制)。经过一番思考,我相信(但无法验证)最佳基数将是位数的平方根(因此对于具有 281 位数的数字,您将使用基数 240ish),这是一个改进,但不能很好地扩展并且仍然不是很实用。
那么我有什么选择?我知道许多任意精度库,但是有没有支持这种算法的规模?
谢谢o7
编辑:在思考了更多之后,我意识到我可能完全错误地认为“最佳基数将是位数的平方根”但是 a)这就是我问的原因 b)我太累了,无法记住我最初的推理假设。
编辑 2:以 10 为基数的 1000,000 = 以 16 为基数的 F4240 = 以 8 为基数的 364110。在以 16 为基数的情况下,您需要 20 位来存储以 8 为基数的数字,您需要 21,所以看起来通过增加基数您规定所需的总位数。 (同样这可能是错误的)
【问题讨论】:
-
您将对这些数字执行哪些操作?
-
@templatetypedef 只是简单的加法/减法和乘法/除法(是的,我意识到即使使用 FFT 我也只会比线性慢一点)
-
“最佳基数将是位数的平方根”对于什么是最佳的?无论您使用何种基础,您需要存储的信息量都是相同的。
-
2^81 个十进制数字需要大约 2^269 位才能准确表示。我不认为有任何捷径,除非您知道数字的某些重要部分将为零。
-
关于编辑 2,无论您使用基数 8 还是基数 16 写出数字都不会影响它实际占用的位数,因为它们都以相同的方式转换回二进制,并且二进制是这些数字的实际存储方式。十六进制表示变为
1111 0100 0010 0100 0000,八进制表示变为011 110 100 001 001 000 000。后者有一个前导零,因为您选择对这些位进行分组,但不需要存储前导零。
标签: math base arbitrary-precision largenumber