在Python中处理非常大的数字

问题描述 投票:119回答:5

我一直在考虑使用Python进行快速手牌评估。在我看来,加快处理速度的一种方法是将所有牌面和西服表示为素数,然后将它们相乘以表示手牌。白衣:

class PokerCard:
    faces = '23456789TJQKA'
    suits = 'cdhs'
    facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61]
    suitPrimes = [2, 3, 5, 7]

AND

    def HashVal(self):
      return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]

这将为每只手提供一个数值,通过取模可以告诉我手中有多少个国王或有多少个心。例如,任何有五个或更多球杆的手都会平均除以2 ^ 5;任何有四位国王的手都会平均除以59 ^ 4,依此类推。

问题是,像AcAdAhAsKdKhKs这样的七张牌手的散列值约为62.7万亿次,这将需要超过32位才能在内部进行表示。有没有一种方法可以在Python中存储如此大的数字,从而允许我对其执行算术运算?

python optimization largenumber
5个回答
157
投票

Python支持“ bignum”整数类型,该整数类型可以处理任意大数。在Python 2.5+中,此类型称为long,与int类型分开,但是解释器将自动使用更合适的那个。在Python 3.0+中,int类型已被完全删除。

不过,这只是实现细节,只要您具有2.5或更高版本,就只需执行标准数学运算,任何超出32位数学界限的数字都会自动(透明地)转换为bignum。] >

您可以在PEP 0237中找到所有血腥细节。


56
投票

python自然支持[任意


29
投票

您可以这样做很有趣,但是除此之外,这不是一个好主意。它不会加快我能想到的任何速度。


25
投票

python自然支持任意大整数:


0
投票

Python解释器将为您处理它,您只需执行操作(+,-,*,/),它将正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.