Pythonで非常に大きな数値を扱う 質問する

Pythonで非常に大きな数値を扱う 質問する

私は、Python でポーカーのハンドを高速に評価することを検討してきました。このプロセスを高速化する 1 つの方法は、すべてのカードの面とスーツを素数として表し、それらを掛け合わせてハンドを表すことだと考えました。つまり、

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]

そして

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

これにより、各ハンドに数値が与えられ、モジュロによってハンドにキングが何枚あるか、またはハートが何枚あるかがわかります。たとえば、クラブが 5 枚以上あるハンドは 2^5 で均等に割り切れます。キングが 4 枚あるハンドは 59^4 で均等に割り切れます。

問題は、AcAdAhAsKdKhKs のような 7 枚のカードのハンドには約 62.7 京のハッシュ値があり、これを内部的に表現するには 32 ビットよりかなり多くのビットが必要になることです。このような大きな数値を Python に保存して、算術演算を実行できるようにする方法はあるでしょうか?

ベストアンサー1

Python は、任意の大きな数値を扱うことができる「bignum」整数型をサポートしています。Python 2.5 以降では、この型は と呼ばれlong、型とは別になっていますintが、インタープリタは自動的に適切な方を使用します。Python 3.0 以降では、このint型は完全に削除されました。

ただし、これは単なる実装の詳細です。バージョン 2.5 以上を使用している場合は、標準の数学演算を実行するだけで、32 ビット数学の境界を超える数値は自動的に (透過的に) bignum に変換されます。

詳細は以下をご覧くださいペップ0237

おすすめ記事