【问题标题】:How do you handle extremely large values in python?你如何在 python 中处理非常大的值?
【发布时间】:2011-06-02 17:25:00
【问题描述】:

如何让 python 使用 1099511627776 位大(是的。137 GB)数量级的值?我需要一些实现这一点的东西(或者如果你能提出更好的方法来做到这一点,将改变方法)。显然,pgp 的新长度类型有 3 个部分而不是 2 个部分。现在它们是:长度类型、长度值类型和长度。长度类型为 2 位,转换为 191 字节、8383 字节、4294967296 字节或部分长度。然后长度以字节编码。如果我什至不能做1 << (4294967296 << 8),我将如何检查一个值是否小于 4294967296 字节?它太大了,放不下。

【问题讨论】:

  • ...哎呀!处理这么大的“数字”是不理智、不实际或不可取的。它需要被分解成碎片——例如50GB 的数据库一般不会一次加载。
  • 你碰巧知道pgp是怎么做的吗?
  • @calcrypto 如果它确实处​​理如此庞大的数字,我想它会以“压缩”形式存储它——就像primes.utm.edu/largest.html :-) 源可用吗?虽然,看看素数......最大的“只有”1200万位数长。
  • 嗯,我认为任何 pgp 块都没有那么大......是的,源代码是可用的,但是我在阅读其他人的代码方面很糟糕,所以我找不到这个部分,更不用说数字了他们做了什么
  • 我正在尝试设想一个精确到一千亿有效数字的数字的实际用途,但失败了。

标签: python math int long-integer openpgp


【解决方案1】:

它不仅太大而无法放入长篇中,而且太大而无法放入任何计算机的内存中。我想你误会了什么。

据我了解,最大键值为 4,294,967,295 字节。那是 4GB,而不是 137GB。您在内存中保存的密钥不是一个数字,而是一串字节。所以我不知道你从哪里得到一个 137 GB 大的数字。

如果 PGP 要求这样做,则无法实施。既然有实现,我敢肯定不是这样的。

(另外,我确信 Python 有 PGP 模块,但如果你这样做不是因为你需要它,而是为了练习并且因为你想学习,那就继续吧!)

【讨论】:

  • 4GB。哎呀。我可能在 wolfram alpha 中做了一些奇怪的事情。是的,我一次阅读 rfc4880 一个随机部分。我是那种想知道幕后情况的人,而不是仅仅使用给定的命令
【解决方案2】:

使用pow()的三参数形式。

【讨论】:

  • 什么? pow(2, 4294967296 << 8)?问题不在于计算价值。问题是存储值。而且我没有要修改的号码
  • @calccrypto:我认为 Ignacio 在这里的意思就像在数学中你不写 10.....0,1000 零你只是写了 10^1000,所以你的数字可以存储在这种形式:),我认为 Ignacio 给你的模式对计算也很有帮助,看看 RSA 算法,看看我的意思,这一切都基于算术,尤其是模运算符,想想看;为伊格纳西奥 +1。
【解决方案3】:

使用像GMPY 这样的大数字库。

【讨论】:

  • 不错的链接。但是,这并不能“解决”处理“需要”137GB 数据来存储的数字的问题 ;-)
【解决方案4】:

我对 RFC4880(2007 年 11 月)的解释不同。 3.2 节将多精度整数描述为具有 2 个八位字节长度,因此最大大小为 64KB。第 4.2.2 节描述了新的数据包格式和您所描述的比例的文档编号。但数据包格式与多精度整数格式不同。如果您有不同的解释,请使用您正在阅读的 RFC 的确切部分更新您的问题。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 2012-08-17
    • 2010-09-25
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多