Jaka jest maksymalna liczba zmiennoprzecinkowa w Pythonie?

172

Myślę, że maksymalna liczba całkowita w Pythonie jest dostępna przez wywołanie sys.maxint.

Jakie jest maksimum floatlub longw Pythonie?

ladyfafa
źródło
Nie ma sys.maxintw Pythonie 3.
David McCorrie

Odpowiedzi:

273

Dla floatrzucić okiem na sys.float_info:

>>> import sys
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2
250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsil
on=2.2204460492503131e-16, radix=2, rounds=1)

W szczególności sys.float_info.max:

>>> sys.float_info.max
1.7976931348623157e+308

Jeśli to nie jest wystarczająco duże, zawsze istnieje nieskończoność dodatnia :

>>> infinity = float("inf")
>>> infinity
inf
>>> infinity / 10000
inf

longTyp ma nieograniczonej precyzji , więc myślę, że jesteś ograniczony tylko pojemnością pamięci.

Dave Webb
źródło
1
właściwie stwierdziłem, że sys.maxint jest w zupełności wystarczający do mojej aplikacji
ladyfafa
Wydaje się, że sys.float_infojest dostępny od wersji 2.6. A co z wersją 2.3-5?
Aleksei Fedotov
1
Uwaga: sys.float_info.min jest zdefiniowany jako „minimalny dodatni znormalizowany float”. Możliwe są mniejsze wartości denormalne , aż do5e-324
Boba Steina
1
Fajnie, oba są bardzo przydatne. infdla wszystkich rzeczy w Pythonie i float_info.maxjako obejście, gdy wcześniejsza nie działa, na przykład time.sleep(float("inf"))jest niedozwolona :(
Dima Tisnek
2
@ladyfafa: sys.maxint zniknął w Pythonie 3, zobacz także komentarze w innej odpowiedzi i stackoverflow.com/questions/13795758/ ...
Joachim Wagner
16

sys.maxint nie jest największą liczbą całkowitą obsługiwaną przez Pythona. Jest to największa liczba całkowita obsługiwana przez zwykły typ liczby całkowitej w Pythonie.

GWW
źródło
10
+1 To jest ważne. W Py3k jest to prawie bez znaczenia - jest to punkt, w którym Python (w sposób przejrzysty!) Zmienia podstawowy typ danych na long.
Katriel
6
@katrielalex: sys.maxintnie jest nawet zdefiniowany w Pythonie 3, jest wywoływany sys.maxsize, co prawdopodobnie będzie preferowane również w Pythonie 2.
Scott Griffiths
14
@Scott Griffiths: Niezupełnie. sys.maxsize(wprowadzone w Pythonie 2.6) i sys.maxintto dwie różne rzeczy. Pierwsza podaje maksymalną liczbę obiektów dozwolonych w kolekcji (np. Maksymalny rozmiar listy, dykt itp.) I odpowiada podpisanej wersji size_ttypu C ; drugi punkt po czym inttyp włącza się longi jest maksymalna wartość C long. Na niektórych platformach te dwie wartości są różne: np. W 64-bitowym systemie Windows sys.maxsizejest 2**63-1i sys.maxintjest 2**31-1.
Mark Dickinson
@Mark Dickinson: Dzięki za korektę - nie zdawałem sobie sprawy, że mogą one kiedykolwiek być inne (z 64-bitowym Pythonem na Snow Leopardzie są oboje 2**63-1).
Scott Griffiths
7

Jeśli używasz numpy można użyć dtypefloat128 ” i uzyskać max pływak z 10e + 4931

>>> np.finfo(np.float128)
finfo(resolution=1e-18, min=-1.18973149536e+4932, max=1.18973149536e+4932, dtype=float128)
Aelfinn
źródło