【问题标题】:Storing big numbers over 9,000 digits in Python在 Python 中存储超过 9,000 位的大数字
【发布时间】:2012-04-05 22:14:54
【问题描述】:

我打算在 Python 中使用非常大的数字,但想知道 Python 是否可以处理非常大的数字。这些数字将有多达 3,000 个零。

还有,带有 3,000 个零的 1 使用多少字节?

第三个问题,如何在 Python 中将一个整数作为整数保存到一个文件中而无需 str() 呢?

【问题讨论】:

  • 好吧,如果你假设一个有效数字,那么你需要做的就是存储指数,即。 3000. 一个整数很容易就足够大了。
  • 只是出于好奇,您正在解决的问题是什么? 10^3000 是一个相当大的数字(~ 10^2920 个宇宙中的原子数)。
  • @thg435 - 它一定是数学的一些晦涩的分支。我不知道有任何宇宙学(或亚原子学)需要这么多的零。

标签: python file integer long-integer


【解决方案1】:

Python 可以使用 long 类型存储任意长的整数,甚至允许您通过将 L 附加到它们来指定 long 文字(例如,0Llong 零,而不仅仅是 @987654326 @ 这是一个int)。更好的是,当计算结果太大而无法用int 表示时,它会自动将数字从ints“提升”到longs。 long 是成熟的数值类型,兼容所有 Python 数值运算。

如果您需要的不仅仅是整数,那么您需要 decimal 模块,它具有 Decimal 类型,可提供任意大小和精度的实数,而不会出现二进制浮点表示所固有的问题。

longDecimal 的缺点是它们分别比intfloat 慢,因为后者具有本机硬件支持。但是,对大数进行数学运算要比根本无法使用这些数字要慢。

至于大小,int 对象在 32 位 Python 中是 12 个字节。对于内部 32 位数量而言,这种看似很大的大小是由于 Python 的“一切都是对象”方法。 (我相信,但不要引用我的话,值有 4 个字节,从实例到类型的指针有 4 个字节,引用计数器有 4 个字节,用于确定对象何时可以是垃圾-collected。这些字段在 64 位版本的 Python 上可能更大。)

long 的大小会有所不同,因为它们会根据数量(加上对象开销)而有所不同,但任何long 值的大小都可以使用sys.getsizeof() 来确定。

【讨论】:

  • 自己试试吧:print int('3' + '0'*3000)
  • 谢谢,虽然它说的是 1356,但似乎有点高。
【解决方案2】:

做一个大数字:

x = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

看看它有多少字节:

print sys.getsizeof(x)

将其写入没有 str() 的文件:

fd = open("file.txt", "wb")
fd.write("%u" %x)
fd.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2013-04-13
    • 2020-03-10
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多