Nie jestem pewien, czy liczby całkowite w Pythonie są w ogóle ograniczone. W momencie przekroczenia sys.maxint zmienia wewnętrzną reprezentację z int na long, która ma nieograniczoną presję.
tchap
Zapytałem, ponieważ muszę znaleźć minimalną wartość w grupie wartości jedna po drugiej Więc najpierw muszę zapisać dużą wartość w zmiennej, aby móc ją porównać z innymi
Sreevisakh
2
Do komentarza - polecam skorzystać z wbudowanej funkcji min.
Jiri
5
Nie potrzebujesz wartości maksymalnej, jeśli po prostu próbujesz znaleźć minimum, nawet jeśli programujesz w C ++ lub innym języku. Jeśli i tak zamierzasz przechodzić przez wszystkie elementy, po prostu użyj pierwszego elementu jako wartości początkowej. (Ale lepiej użyć tej minfunkcji, jeśli naprawdę chcesz programować w Pythonie!)
John Y
3
@Sreevisakh: dla „wielkiej wartości” użyj nieskończoności float("inf"). Lub lepiej, użyj wbudowanej minfunkcji.
Fred Foo,
Odpowiedzi:
132
Długie liczby całkowite:
Nie ma wyraźnie określonego limitu. Ilość dostępnej przestrzeni adresowej stanowi praktyczny limit.
(Zaczerpnięte z tej strony). Zobacz dokumentację dotyczącą typów liczbowych, w której to zobaczysz Long integers have unlimited precision. W Pythonie 2 liczby całkowite automatycznie przełączą się na długie, gdy przekroczą swój limit:
Maksymalną wartość int można znaleźć w Pythonie 2.x za pomocą sys.maxint. Został usunięty w Pythonie 3, ale sys.maxsizeczęsto można go zamiast tego używać. Z dziennika zmian :
Stała sys.maxint została usunięta, ponieważ nie ma już ograniczenia wartości liczb całkowitych. Jednak sys.maxsize może być używany jako liczba całkowita większa niż jakakolwiek praktyczna lista lub indeks ciągu. Jest on zgodny z „naturalnym” rozmiarem całkowitym implementacji i zazwyczaj jest taki sam, jak sys.maxint w poprzednich wersjach na tej samej platformie (zakładając te same opcje kompilacji).
a dla wszystkich zainteresowanych różnicą (Python 2.x):
sys.maxint Największa dodatnia liczba całkowita obsługiwana przez zwykły typ liczby całkowitej w Pythonie. To co najmniej 2 ** 31-1. Największa ujemna liczba całkowita to -maxint-1 - asymetria wynika z zastosowania arytmetyki binarnej dopełnienia do 2.
sys.maxsize Największa dodatnia liczba całkowita obsługiwana przez typ Py_ssize_t platformy, a tym samym maksymalne rozmiary list, ciągów znaków, dykt i wielu innych kontenerów.
sys.maxsize
Liczba całkowita określająca maksymalną wartość, jaką może przyjąć zmienna typu Py_ssize_t. Zwykle jest to 2 ^ 31 - 1 na platformie 32-bitowej i 2 ^ 63 - 1 na platformie 64-bitowej.
pływaki:
Jest float("inf")i float("-inf"). Można je porównać z innymi typami liczbowymi:
Wypróbowałem ten sam kod, ale nadal wyświetla typ jako int w Pythonie 3 na komputerze z systemem Windows 64-bitowym. Każdy cenny powód.
ManojP
1
@ManojP Dzieje się tak, ponieważ nie ma już ograniczenia rozmiaru liczb całkowitych w Pythonie 3. Zobacz pierwszy cytat z bloku.
Wyedytuję,
39
Python longmoże być dowolnie duży. Jeśli potrzebujesz wartości większej niż jakakolwiek inna wartość, możesz użyć float('inf'), ponieważ Python nie ma problemu z porównywaniem wartości liczbowych różnych typów. Podobnie, dla wartości mniejszej niż jakakolwiek inna wartość, możesz użyć float('-inf').
Zwraca nieskończoność zmiennoprzecinkową, która jest większa niż jakakolwiek liczba skończona.
Taymon,
4
Muszę powiedzieć, że ta odpowiedź jest zdecydowanie najbliższa poprawnej, jeśli chodzi o odpowiedź na tytułowe pytanie PO. To znaczy „jak uzyskać wartość wartowniczą Pythona, która będzie większa niż wszystkie dane wejściowe (lub przynajmniej nie mniejsza niż największa wartość)?”. Głosowałem więc za tą odpowiedzią, ale myślę, że lepiej, jeśli OP nauczy się myśleć w Pythonie.
John Y
Zgoda. To powiedziawszy, byłem w sytuacji, w której był to jedyny sposób, aby zrobić to, czego potrzebowałem.
Taymon
21
Bezpośrednia odpowiedź na tytułowe pytanie:
Liczby całkowite mają nieograniczony rozmiar i nie mają wartości maksymalnej w Pythonie.
Odpowiedz, które adresy wskazały podstawowe przypadki użycia:
Zgodnie z twoim komentarzem na temat tego, co próbujesz zrobić, obecnie myślisz o czymś podobnym
To nie jest sposób myślenia w Pythonie. Lepsze tłumaczenie na Pythona (ale nadal nie najlepsze) byłoby
minval = a[0]# Just use the first valuefor i in range(1, len(a)):
minval = min(a[i], a[i -1])
Zauważ, że powyższe w ogóle nie używa MAXINT. Ta część rozwiązania dotyczy każdego języka programowania: nie musisz znać najwyższej możliwej wartości, aby znaleźć najmniejszą wartość w kolekcji.
W każdym razie to, co naprawdę robisz w Pythonie, to po prostu
minval = min(a)
Oznacza to, że w ogóle nie piszesz pętli. Wbudowana min()funkcja pobiera minimum całej kolekcji.
longtyp w Pythonie 2.x używa arytmetyki z dowolną dokładnością i nie ma czegoś takiego jak maksymalna możliwa wartość. Jest ograniczona dostępną pamięcią. Python 3.x nie ma specjalnego typu dla wartości, które nie mogą być reprezentowane przez natywną liczbę całkowitą maszyny - wszystko jest inti konwersja jest obsługiwana za kulisami.
W przeciwieństwie do C / C ++ Long w Pythonie mają nieograniczoną precyzję. Aby uzyskać więcej informacji, zapoznaj się z sekcją Typy liczbowe w pythonie. Aby określić maksymalną wartość liczby całkowitej, możesz po prostu odwołać się sys.maxint. Więcej informacji można znaleźć w dokumentacji sys .
Tytuł to „Maksymalna wartość dla długiej liczby całkowitej” , a nie maksymalna wartość liczby zmiennoprzecinkowej. Tak więc, bez wyjaśnienia, jak to odpowiada na pytanie, uważam to NAA (nie za odpowiedź).
Sнаđошƒаӽ
0
W pythonie3 możesz wysłać wartość zmiennoprzecinkową do funkcji int, aby uzyskać tę liczbę 1.7976931348623157e + 308 w reprezentacji całkowitej.
To nie robi nic pożytecznego. Aby to zilustrować, spróbuj int (sys.float_info.max) +1, a otrzymasz liczbę całkowitą, która jest jeszcze jedna, ponieważ jak wyjaśniły inne komentarze, Python po prostu przechowuje liczby całkowite o nieograniczonej precyzji.
min
funkcji, jeśli naprawdę chcesz programować w Pythonie!)float("inf")
. Lub lepiej, użyj wbudowanejmin
funkcji.Odpowiedzi:
Długie liczby całkowite:
Nie ma wyraźnie określonego limitu. Ilość dostępnej przestrzeni adresowej stanowi praktyczny limit.
(Zaczerpnięte z tej strony). Zobacz dokumentację dotyczącą typów liczbowych, w której to zobaczysz
Long integers have unlimited precision
. W Pythonie 2 liczby całkowite automatycznie przełączą się na długie, gdy przekroczą swój limit:dla liczb całkowitych, które mamy
maxint i maxsize:
Maksymalną wartość int można znaleźć w Pythonie 2.x za pomocą
sys.maxint
. Został usunięty w Pythonie 3, alesys.maxsize
często można go zamiast tego używać. Z dziennika zmian :a dla wszystkich zainteresowanych różnicą (Python 2.x):
a dla kompletności, oto wersja Pythona 3 :
pływaki:
Jest
float("inf")
ifloat("-inf")
. Można je porównać z innymi typami liczbowymi:źródło
Python
long
może być dowolnie duży. Jeśli potrzebujesz wartości większej niż jakakolwiek inna wartość, możesz użyćfloat('inf')
, ponieważ Python nie ma problemu z porównywaniem wartości liczbowych różnych typów. Podobnie, dla wartości mniejszej niż jakakolwiek inna wartość, możesz użyćfloat('-inf')
.źródło
Bezpośrednia odpowiedź na tytułowe pytanie:
Liczby całkowite mają nieograniczony rozmiar i nie mają wartości maksymalnej w Pythonie.
Odpowiedz, które adresy wskazały podstawowe przypadki użycia:
Zgodnie z twoim komentarzem na temat tego, co próbujesz zrobić, obecnie myślisz o czymś podobnym
To nie jest sposób myślenia w Pythonie. Lepsze tłumaczenie na Pythona (ale nadal nie najlepsze) byłoby
Zauważ, że powyższe w ogóle nie używa MAXINT. Ta część rozwiązania dotyczy każdego języka programowania: nie musisz znać najwyższej możliwej wartości, aby znaleźć najmniejszą wartość w kolekcji.
W każdym razie to, co naprawdę robisz w Pythonie, to po prostu
Oznacza to, że w ogóle nie piszesz pętli. Wbudowana
min()
funkcja pobiera minimum całej kolekcji.źródło
long
typ w Pythonie 2.x używa arytmetyki z dowolną dokładnością i nie ma czegoś takiego jak maksymalna możliwa wartość. Jest ograniczona dostępną pamięcią. Python 3.x nie ma specjalnego typu dla wartości, które nie mogą być reprezentowane przez natywną liczbę całkowitą maszyny - wszystko jestint
i konwersja jest obsługiwana za kulisami.źródło
W przeciwieństwie do C / C ++ Long w Pythonie mają nieograniczoną precyzję. Aby uzyskać więcej informacji, zapoznaj się z sekcją Typy liczbowe w pythonie. Aby określić maksymalną wartość liczby całkowitej, możesz po prostu odwołać się
sys.maxint
. Więcej informacji można znaleźć w dokumentacji sys .źródło
Możesz użyć: maksymalna wartość float to
za negatywne
źródło
W pythonie3 możesz wysłać wartość zmiennoprzecinkową do funkcji int, aby uzyskać tę liczbę 1.7976931348623157e + 308 w reprezentacji całkowitej.
źródło