Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค่าสูงสุดของ Integer ใน Python คือเท่าไหร่?

ไม่เหมือน C/C++ ที่มี LONG_MAX Python 3 มี Integer แบบ Unlimited Precision (Arbitrary Precision) ไม่มีขีดจำกัดที่กำหนดไว้ชัดเจน ขีดจำกัดปฏิบัติคือ Available Memory (Address Space)

Python 2 vs Python 3

Python 2 (Legacy)

มี int (C Long, จำกัด) และ long (Arbitrary Precision) แยกกัน

>>> import sys
>>> sys.maxint
2147483647          # 2^31 - 1 (32-bit) หรือ 9223372036854775807 (64-bit)
>>> type(sys.maxint)
<type 'int'>
>>> type(sys.maxint + 1)
<type 'long'>     # Auto-promote เป็น long

Python 3 (Current)

int และ long รวมกันเป็น int แบบ Arbitrary Precision sys.maxint ถูกลบ ใช้ sys.maxsize แทน (Max Size ของ Container เช่น List, String)

>>> import sys
>>> sys.maxsize
9223372036854775807    # 2^63 - 1 (64-bit Platform)
>>> type(sys.maxsize)
<class 'int'>
>>> type(sys.maxsize + 1)
<class 'int'>        # ยังคงเป็น int ไม่เปลี่ยน Type

ทดสอบ Integer ขนาดใหญ่ใน Python 3

# Python 3 จัดการ Big Integer ได้โดยอัตโนมัติ
huge = 10 ** 10000        # 1 ตามด้วย 10,000 ศูนย์
print(len(str(huge)))     # 10001

factorial_100 = 1
for i in range(1, 101):
    factorial_100 *= i
print(factorial_100)      # 9332621... (158 digits)

sys.int_info (Python 3)

>>> import sys
>>> sys.int_info
sys.int_info(bits_per_digit=30, sizeof_digit=4)
# ภายใน Python ใช้ Base 2^30 = 1,073,741,824 ต่อ Digit

Float Limits (IEEE 754 Double Precision)

Integer ไม่มี Limit แต่ Float มี:

>>> sys.float_info
sys.float_info(
    max=1.7976931348623157e+308,    # ~2^1024
    max_exp=1024,
    max_10_exp=308,
    min=2.2250738585072014e-308,   # ~2^-1022
    min_exp=-1021,
    min_10_exp=-307,
    dig=15,                         # Decimal Precision
    mant_dig=53,                    # Binary Precision (53 bits)
    epsilon=2.220446049250313e-16,  # Machine Epsilon
    radix=2,
    rounds=1
)

สรุป

VersionInteger LimitNote
Python 2sys.maxint (Platform-dependent)Auto-promote to long
Python 3No Limit (Memory Only)int = Arbitrary Precision
Bothsys.maxsizeMax Container Size, Not Integer Value

Bottom Line: ใน Python 3 คุณสามารถใช้ Integer ใหญ่เท่าไหร่ก็ได้ ตราบใดที่ RAM พอ