web-dev-qa-db-ja.com

Pythonの無限整数

Python 3にはfloat('inf')Decimal('Infinity')がありますが、int('inf')はありません。それでは、なぜ整数の無限セットを表す数字が言語に欠けているのでしょうか? int('inf')は不合理ですか?

51
Carlo Pires

ここから: https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

IEEE 754浮動小数点数は、正または負の無限大、およびNaN(非数値)を表すことができます

つまり、floatおよびDecimalの表現はこれらの特別な値を格納できます。ただし、基本型int内には同じものを保存できるものはありません。符号なし32ビット整数で2 ^ 32の制限を超えると、単純に再び0にロールオーバーします。

必要に応じて、無限値の可能性を特徴とする整数を含むクラスを作成できます。

11

整数の無限大が可能であり、Python標準に何も追加されていないことは正しいです。これはおそらく、math.infがほぼすべての場合に取って代わるためです(Martijnがコメントで述べたように)。

それまでの間、PyPIに 拡張整数 の実装を追加しました。

In [0]: from numbers import Integral, Real

In [0]: from extended_int import int_inf, ExtendedIntegral, Infinite

In [0]: i = int_inf

In [4]: float(i)
Out[4]: inf

In [5]: print(i)
inf

In [6]: i ** i

Out[6]: inf

In [7]: i
Out[7]: inf

In [9]: isinstance(i, Real)

Out[9]: True

In [10]: isinstance(i, Integral)

Out[10]: False

In [11]: isinstance(i, Infinite)

Out[11]: True

In [12]: isinstance(i, ExtendedIntegral)

Out[12]: True

In [13]: isinstance(2, ExtendedIntegral)

Out[13]: True

In [14]: isinstance(2, Infinite)

Out[14]: False
7
Neil G

python 2.の場合、非常に大きな整数が必要になる場合があります。たとえば、x [:n]を使用してサブアレイを作成したい場合があります。また、アレイ全体が作成されるようにnを値に設定したい場合があります。 nにはfloatを使用できないため(Pythonは整数が必要です)、「大きな整数」が必要です。これを行う良い方法は、利用可能な最大の整数sys.maxintを使用することです。以下に例を示します。

# MAX_SOURCES = sys.maxint # normal setting
MAX_SOURCES = 5 # while testing

# code to use an array ...
... sources[:MAX_SOURCES]

そのため、テスト中は、より小さなソースアレイを使用できますが、実稼働ではフルアレイを使用できます。

2
Jacques Sauvé