Python3の整数int型に最大値はない(上限なし)
Python2の整数型にはint
とlong
の2つの型があったが、Python3にはint
しかない。Python3のint
はPython2のlong
に相当し、最大値の上限はなく、メモリの許す限り大きな値を扱うことが可能。
ここでは以下の内容について説明する。
- Python2の整数
int
型と長整数long
型 - Python3の整数
int
型- 浮動小数点数
float
との関係
- 浮動小数点数
浮動小数点数float
型の取り得る範囲(最大値・最小値)については以下の記事を参照。
なお、NumPyではint32
(32ビット整数型)やint64
(64ビット整数型)のようにビット数が固定のデータ型が用いられる。
Python2の整数int型と長整数long型
Python2では通常の整数型のint
型と長整数型のlong
型があった。
int
の取り得る最大値はsys.maxint
で取得可能。最小値(最大の負の数)は-sys.maxint-1
となる。
sys.maxint
は最低でも2**31-1
、64bit環境では2**63-1
となる。
long
型には最大値・最小値の制限はない。
Python3の整数int型
Python3のint
型はPython2のlong
型に相当し、最大値・最小値の制限はない。
整数の上限がなくなったため、sys.maxint 定数は削除されました。しかしながら、通常のリストや文字列の添え字よりも大きい整数として sys.maxsize を使うことができます。 sys.maxsize は実装の "自然な" 整数の大きさに一致し、同じプラットフォームでは (同じビルドオプションなら) 過去のリリースの sys.maxint と普通は同じです。
What's New In Python 3.0 - 整数 — Python 3.7.1rc1 ドキュメント
それに伴いsys.maxint
は削除され、代わりにsys.maxsize
が追加された。
sys.maxsize
はPython2でのsys.maxint
と同じく、32bit環境では2**31-1
、64bit環境では2**63-1
となる。
import sys
print(sys.maxsize)
# 9223372036854775807
print(type(sys.maxsize))
# <class 'int'>
print(sys.maxsize == 2**63 - 1)
# True
bin()
, hex()
で2進数および16進数の文字列に変換すると以下の通り。
print(bin(sys.maxsize))
# 0b111111111111111111111111111111111111111111111111111111111111111
print(hex(sys.maxsize))
# 0x7fffffffffffffff
sys.maxsize
はint
型の最大値(上限)ではなく、メモリの許す限りさらに大きな値を扱うことが可能。
i = 10**100
print(i)
# 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
print(i > sys.maxsize)
# True
浮動小数点数float型との関係
浮動小数点数float
型のとりうる最大値はsys.float_info.max
で取得できる。
print(sys.float_info.max)
# 1.7976931348623157e+308
int
型には上限がないため、float
型の最大値を超える値を扱うことができる。
i_e309 = 10**309
print(type(i_e309))
# <class 'int'>
print(i_e309 > sys.float_info.max)
# True
なお、float
型には特殊な値として無限大を表すinf
がある。無限大inf
は他のどの数値よりも大きいと判定される。
print(float('inf'))
# inf
print(float('inf') > sys.float_info.max)
# True
print(float('inf') > i_e309)
# True
inf
をint
型に変換しようとするとエラーOverflowError
になるので注意。
# int(float('inf'))
# OverflowError: cannot convert float infinity to integer
無限大inf
については以下の記事を参照。