Maximalwert für lange Ganzzahl

108

Wie kann ich einer Variablen den Maximalwert für eine lange Ganzzahl zuweisen, ähnlich wie bei C ++ LONG_MAX.

Sreevisakh
quelle
7
Ich bin nicht sicher, ob Python-Ganzzahlen überhaupt begrenzt sind. In dem Moment, in dem Sie sys.maxint kreuzen, ändert sich die interne Darstellung von int in long, was unbegrenzte Voraussagen hat.
Tchap
Ich fragte, weil ich einen Min-Wert unter einer Gruppe von Werten nacheinander finden muss. Zuerst muss ich einen großen Wert in einer Variablen speichern, damit ich ihn mit anderen vergleichen kann
Sreevisakh
2
Zu Ihrem Kommentar - ich habe empfohlen, die eingebaute Funktion min zu verwenden.
Jiri
5
Sie benötigen den Maximalwert nicht, wenn Sie nur versuchen, den Minimalwert zu finden, selbst wenn Sie in C ++ oder einer anderen Sprache programmieren. Wenn Sie ohnehin nur alle Elemente durchlaufen möchten, verwenden Sie einfach das erste Element als Startwert. (Aber besser, um die minFunktion zu verwenden, wenn Sie wirklich in Python programmieren möchten!)
John Y
3
@Sreevisakh: Verwenden Sie für den "großen Wert" unendlich , float("inf"). Oder nutzen Sie besser die eingebaute minFunktion.
Fred Foo

Antworten:

132

Lange ganze Zahlen:

Es gibt keine explizit definierte Grenze. Die Menge des verfügbaren Adressraums bildet eine praktische Grenze.
(Entnommen von dieser Seite). Lesen Sie die Dokumentation auf numerische Datentypen , wo Sie das sehen werden Long integers have unlimited precision. In Python 2 wechseln Ganzzahlen automatisch zu Longs, wenn sie ihre Grenzen überschreiten:

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


für ganze Zahlen haben wir

maxint und maxsize:

Der Maximalwert eines int kann in Python 2.x mit gefunden werden sys.maxint. Es wurde in Python 3 entfernt, sys.maxsizekann aber häufig verwendet werden. Aus dem Changelog :

Die Konstante sys.maxint wurde entfernt, da der Wert von Ganzzahlen nicht mehr begrenzt ist. Sys.maxsize kann jedoch als Ganzzahl verwendet werden, die größer ist als jede praktische Liste oder jeder Zeichenfolgenindex. Es entspricht der „natürlichen“ Ganzzahlgröße der Implementierung und entspricht normalerweise sys.maxint in früheren Versionen auf derselben Plattform (unter der Annahme derselben Erstellungsoptionen).

und für alle, die sich für den Unterschied interessieren (Python 2.x):

sys.maxint Die größte positive Ganzzahl, die vom regulären Ganzzahltyp von Python unterstützt wird. Dies ist mindestens 2 ** 31-1. Die größte negative ganze Zahl ist -maxint-1 - die Asymmetrie ergibt sich aus der Verwendung der 2-Komplement-Binärarithmetik.

sys.maxsize Die größte positive Ganzzahl, die vom Typ Py_ssize_t der Plattform unterstützt wird, und damit die Listen, Zeichenfolgen, Dikte und viele andere Container mit maximaler Größe.

Der Vollständigkeit halber hier die Python 3-Version :

sys.maxsize Eine Ganzzahl, die den Maximalwert angibt , den eine Variable vom Typ Py_ssize_t annehmen kann. Es ist normalerweise 2 ^ 31 - 1 auf einer 32-Bit-Plattform und 2 ^ 63 - 1 auf einer 64-Bit-Plattform.

schwimmt:

Es gibt float("inf")und float("-inf"). Diese können mit anderen numerischen Typen verglichen werden:

>>> import sys
>>> float("inf") > sys.maxsize
True
Keyser
quelle
Ich habe den gleichen Code ausprobiert, aber er zeigt immer noch den Typ int in Python 3 auf einem Windows 64-Bit-Computer. Jeder geschätzte Grund dafür.
ManojP
1
@ManojP Das liegt daran, dass die Größe von Ganzzahlen in Python 3 nicht mehr begrenzt ist. Siehe das erste Blockzitat. Ich werde bearbeiten, um zu verdeutlichen, dass das Beispiel Python 2
Keyser
39

Python longkann beliebig groß sein. Wenn Sie einen Wert benötigen, der größer als jeder andere Wert ist, können Sie ihn verwenden float('inf'), da Python keine Probleme hat, numerische Werte verschiedener Typen zu vergleichen. Ebenso können Sie für einen Wert, der kleiner als jeder andere Wert ist, einen Wert verwenden float('-inf').

Taymon
quelle
1
es gibt also einen sehr großen Wert zurück, oder?
Sreevisakh
4
Es gibt eine Gleitkomma-Unendlichkeit zurück, die größer als jede endliche Zahl ist.
Taymon
4
Ich muss sagen, dass diese Antwort in Bezug auf die Beantwortung der Titelfrage des OP definitiv am ehesten zu korrigieren ist. Das heißt: "Wie erhalten Sie einen Python-Sentinel-Wert, der größer ist als alle Ihre Eingaben (oder zumindest nicht kleiner als der größte Wert)?". Ich habe diese Antwort positiv bewertet, aber ich denke, es ist besser, wenn das OP lernt, stattdessen in Python zu denken.
John Y
Einverstanden. Trotzdem war ich in einer Situation, in der dies der einzige Weg war, das zu tun, was ich brauchte.
Taymon
21

Direkte Antwort auf die Titelfrage:

Ganzzahlen sind unbegrenzt groß und haben in Python keinen Maximalwert.

Beantworten Sie, welche Adressen den zugrunde liegenden Anwendungsfall angegeben haben:

Entsprechend Ihrem Kommentar zu dem, was Sie versuchen, denken Sie derzeit etwas in der Art von

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

So kann man in Python nicht denken. Eine bessere Übersetzung nach Python (aber immer noch nicht die beste) wäre

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

Beachten Sie, dass in den oben genannten Fällen MAXINT überhaupt nicht verwendet wird. Dieser Teil der Lösung gilt für jede Programmiersprache: Sie müssen nicht den höchstmöglichen Wert kennen, um den kleinsten Wert in einer Sammlung zu finden.

Aber was Sie in Python wirklich tun, ist einfach

minval = min(a)

Das heißt, Sie schreiben überhaupt keine Schleife. Die eingebaute min()Funktion erhält das Minimum der gesamten Sammlung.

John Y.
quelle
8

longTyp in Python 2.x verwendet Arithmetik mit beliebiger Genauigkeit und hat keinen maximal möglichen Wert. Es ist durch den verfügbaren Speicher begrenzt. Python 3.x hat keinen speziellen Typ für Werte, die nicht durch die native Maschinen-Ganzzahl dargestellt werden können - alles ist intund die Konvertierung erfolgt hinter den Kulissen.

rkhayrov
quelle
7

Im Gegensatz zu C / C ++ haben Long in Python eine unbegrenzte Genauigkeit. Weitere Informationen finden Sie im Abschnitt Numerische Typen in Python. Um den Maximalwert der Ganzzahl zu bestimmen, können Sie einfach darauf verweisen sys.maxint. Weitere Informationen finden Sie in der Dokumentation von sys .

Abhijit
quelle
1

Sie können verwenden: Maximaler Wert von float ist

float('inf')

für negativ

float('-inf')
Ramazan
quelle
2
Der Titel lautet "Maximalwert für lange Ganzzahl" , nicht Maximalwert von float. Ohne eine Erklärung, wie dies die Frage beantwortet , betrachte ich diese NAA (keine Antwort).
Sнаđо atƒаӽ
0

In Python3 können Sie den Gleitkommawert an die int-Funktion senden, um die Nummer 1.7976931348623157e + 308 in ganzzahliger Darstellung zu erhalten.

import sys    
int(sys.float_info.max)
Frédéric Jacques
quelle
Dies macht überhaupt nichts Nützliches. Um dies zu veranschaulichen, versuchen Sie es mit int (sys.float_info.max) +1, und Sie erhalten nur eine weitere Ganzzahl, da Python, wie in anderen Kommentaren erläutert, nur Ganzzahlen mit unbegrenzter Genauigkeit speichert.
Tialaramex