note.nkmk.me

Python3の整数int型に最大値はない(上限なし)

Date: 2018-10-09 / tags: Python

Python2の整数型にはintlongの2つの型があったが、Python3のintはPython2のlongに相当し、最大値の上限がなくなった。メモリの許す限り大きな値を扱うことが可能。

ここでは以下の内容について説明する。

  • Python2の整数int型と長整数long
  • Python3の整数int

浮動小数点数float型の取りうる範囲(最大値・最小値)については以下の記事を参照。

スポンサーリンク

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

print(hex(sys.maxsize))
# 0x7fffffffffffffff

上の例で使っているhex()は整数値を16進数の文字列に変換する関数。

sys.maxsizeint型の最大値(上限)ではなく、メモリの許す限りさらに大きな値を扱うことが可能。

i = 10**100

print(i)
# 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

print(i > sys.maxsize)
# True

なお、浮動小数点数float型には無限大を表すinfがあり、比較した場合はint型のどの値よりも大きいとみなされる。

print(float('inf'))
# inf

print(i > float('inf'))
# False

無限大infについては以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事