Giá trị lớn nhất cho số nguyên dài


108

Làm cách nào để tôi có thể gán giá trị lớn nhất cho một số nguyên dài cho một biến, ví dụ: tương tự, cho C ++ LONG_MAX.


7
Tôi không chắc số nguyên Python bị giới hạn chút nào. Tại thời điểm bạn vượt qua sys.maxint, nó thay đổi biểu diễn bên trong từ int thành long, có giá trị đặt trước không giới hạn.
tchap

Tôi hỏi, vì tôi cần phải tìm một giá trị tối thiểu trong một nhóm các giá trị từng người một Vì vậy, đầu tiên tôi cần phải lưu trữ một giá trị lớn cho một biến để tôi có thể so sánh nó với những người khác
Sreevisakh

2
Theo nhận xét của bạn - tôi khuyên bạn nên sử dụng hàm min tích hợp sẵn.
Jiri

5
Bạn không cần giá trị lớn nhất nếu bạn chỉ đang cố gắng tìm giá trị tối thiểu, ngay cả khi bạn đang lập trình bằng C ++ hoặc bất kỳ ngôn ngữ nào khác. Nếu bạn chỉ định lặp lại tất cả các phần tử, chỉ cần sử dụng phần tử đầu tiên làm giá trị bắt đầu của bạn. (Nhưng tốt hơn để sử dụng các minchức năng, nếu bạn thực sự muốn chương trình bằng Python!)
John Y

3
@Sreevisakh: đối với "giá trị lớn", hãy sử dụng vô cực , float("inf"). Hoặc tốt hơn, sử dụng minchức năng được tích hợp sẵn .
Fred Foo

Câu trả lời:


132

Số nguyên dài:

Không có giới hạn được xác định rõ ràng. Số lượng không gian địa chỉ có sẵn tạo thành một giới hạn thực tế.
(Lấy từ trang này ). Xem tài liệu về Loại số bạn sẽ thấy điều đó Long integers have unlimited precision. Trong Python 2, Số nguyên sẽ tự động chuyển sang độ dài khi chúng phát triển vượt quá giới hạn của chúng:

>>> import sys
>>> type(sys.maxsize)
<type 'int'>
>>> type(sys.maxsize+1)
<type 'long'>


đối với số nguyên chúng tôi có

maxint và maxsize:

Giá trị lớn nhất của một int có thể được tìm thấy trong Python 2.x với sys.maxint. Nó đã bị loại bỏ trong Python 3, nhưng sys.maxsizethường có thể được sử dụng thay thế. Từ bảng thay đổi :

Hằng số sys.maxint đã bị xóa, vì không còn giới hạn cho giá trị của số nguyên. Tuy nhiên, sys.maxsize có thể được sử dụng như một số nguyên lớn hơn bất kỳ danh sách hoặc chỉ mục chuỗi thực tế nào. Nó tuân theo kích thước số nguyên "tự nhiên" của triển khai và thường giống với sys.maxint trong các bản phát hành trước trên cùng một nền tảng (giả sử các tùy chọn xây dựng giống nhau).

và đối với bất kỳ ai quan tâm đến sự khác biệt (Python 2.x):

sys.maxint Số nguyên dương lớn nhất được hỗ trợ bởi kiểu số nguyên thông thường của Python. Đây ít nhất là 2 ** 31-1. Số nguyên âm lớn nhất là -maxint-1 - kết quả không đối xứng từ việc sử dụng số học nhị phân phần bù của 2.

sys.maxsize Số nguyên dương lớn nhất được hỗ trợ bởi kiểu Py_ssize_t của nền tảng và do đó danh sách kích thước tối đa, chuỗi, dicts và nhiều vùng chứa khác có thể có.

và để hoàn thiện, đây là phiên bản Python 3 :

sys.maxsize Một số nguyên cho giá trị lớn nhất mà một biến kiểu Py_ssize_t có thể nhận. Nó thường là 2 ^ 31 - 1 trên nền tảng 32 bit và 2 ^ 63 - 1 trên nền tảng 64 bit.

nổi:

float("inf")float("-inf"). Chúng có thể được so sánh với các loại số khác:

>>> import sys
>>> float("inf") > sys.maxsize
True

Tôi đã thử mã tương tự nhưng nó vẫn hiển thị kiểu int trong python 3 trên máy windows 64 bit. Bất kỳ lý do có giá trị cho nó.
ManojP

1
@ManojP Đó là bởi vì không còn giới hạn về kích thước của số nguyên trong Python 3. Hãy xem phần trích dẫn khối đầu tiên. Tôi sẽ chỉnh sửa để làm rõ rằng ví dụ đó là Python 2
keyer

39

Python longcó thể lớn tùy ý. Nếu bạn cần một giá trị lớn hơn bất kỳ giá trị nào khác, bạn có thể sử dụng float('inf'), vì Python không gặp khó khăn gì khi so sánh các giá trị số của các kiểu khác nhau. Tương tự, đối với một giá trị nhỏ hơn bất kỳ giá trị nào khác, bạn có thể sử dụng float('-inf').


1
vì vậy nó trả về một giá trị rất lớn phải không?
Sreevisakh

4
Nó trả về vô cực dấu phẩy động, lớn hơn bất kỳ số hữu hạn nào.
Taymon

4
Tôi phải nói rằng, câu trả lời này chắc chắn là câu trả lời gần đúng nhất về cách trả lời câu hỏi tiêu đề của OP. Đó là, "làm thế nào để bạn nhận được giá trị sentinel trong Python sẽ lớn hơn tất cả đầu vào của bạn (hoặc ít nhất là không nhỏ hơn giá trị lớn nhất)?". Vì vậy, tôi đã ủng hộ câu trả lời này, nhưng tôi nghĩ sẽ tốt hơn nếu OP học cách suy nghĩ bằng Python.
John Y

Đã đồng ý. Điều đó nói rằng, tôi đã ở trong một tình huống mà đây là cách duy nhất để làm những gì tôi cần.
Taymon

21

Câu trả lời trực tiếp cho câu hỏi tiêu đề:

Số nguyên có kích thước không giới hạn và không có giá trị lớn nhất trong Python.

Trả lời địa chỉ nào đã nêu trường hợp sử dụng cơ bản:

Theo nhận xét của bạn về những gì bạn đang cố gắng làm, bạn hiện đang suy nghĩ điều gì đó dọc theo dòng

minval = MAXINT;
for (i = 1; i < num_elems; i++)
    if a[i] < a[i-1]
        minval = a[i];

Đó không phải là cách suy nghĩ bằng Python. Một bản dịch tốt hơn sang Python (nhưng vẫn không phải là tốt nhất) sẽ là

minval = a[0]  # Just use the first value
for i in range(1, len(a)):
    minval = min(a[i], a[i - 1])

Lưu ý rằng phần trên hoàn toàn không sử dụng MAXINT. Đó là một phần của giải pháp áp dụng cho bất kỳ ngôn ngữ lập trình nào: Bạn không cần biết giá trị cao nhất có thể chỉ để tìm giá trị nhỏ nhất trong một tập hợp.

Nhưng dù sao, những gì bạn thực sự làm trong Python chỉ là

minval = min(a)

Đó là, bạn không viết một vòng lặp nào cả. Việc xây dựng trong min()chức năng được tối thiểu của toàn bộ sưu tập.


8

longnhập bằng Python 2.x sử dụng số học chính xác tùy ý và không có giá trị lớn nhất có thể. Nó bị giới hạn bởi bộ nhớ có sẵn. Python 3.x không có kiểu đặc biệt cho các giá trị không thể được biểu diễn bằng số nguyên máy gốc - mọi thứ đều có intvà chuyển đổi được xử lý đằng sau hậu trường.


7

Không giống như C / C ++ Long trong Python có độ chính xác không giới hạn. Tham khảo phần Loại số trong python để biết thêm thông tin. Để xác định giá trị lớn nhất của số nguyên, bạn chỉ cần tham khảo sys.maxint. Bạn có thể biết thêm chi tiết từ tài liệu của sys .


1

Bạn có thể sử dụng: giá trị tối đa của float là

float('inf')

cho tiêu cực

float('-inf')

2
Tiêu đề là "Giá trị lớn nhất cho số nguyên dài" , không phải giá trị tối đa của float. Vì vậy, không có lời giải thích này trả lời câu hỏi như thế nào , tôi coi NAA này (không phải là một câu trả lời).
Sнаđошƒаӽ

0

Trong python3, bạn có thể gửi giá trị float vào hàm int để lấy số đó 1.7976931348623157e + 308 trong biểu diễn số nguyên.

import sys    
int(sys.float_info.max)

Điều này không làm bất cứ điều gì hữu ích cả. Để minh họa điều đó, hãy thử int (sys.float_info.max) +1 và bạn sẽ chỉ nhận được một số nguyên là một số khác, bởi vì như các nhận xét khác đã giải thích Python chỉ lưu trữ các số nguyên chính xác không giới hạn.
tialaramex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.