Maximale en minimale waarden voor ints

Ik ben op zoek naar minimum- en maximumwaarden voor gehele getallen in python. Voor bijvoorbeeld Java hebben we Integer.MIN_VALUE en Integer.MAX_VALUE. Is er zoiets in python?


Antwoord 1, autoriteit 100%

Python 3

In Python 3 is deze vraag niet van toepassing. Het gewone int type is onbegrensd.

Het kan echter zijn dat u eigenlijk op zoek bent naar informatie over het woord van de huidige tolk size, wat in de meeste gevallen gelijk zal zijn aan de woordgrootte van de machine. Die informatie is nog steeds beschikbaar in Python 3 als sys.maxsize, wat de maximale waarde is die kan worden weergegeven door een ondertekend woord. Evenzo is het de grootte van de grootst mogelijke lijst of in-memory volgorde.

Over het algemeen is de maximale waarde die kan worden weergegeven door een woord zonder teken sys.maxsize * 2 + 1, en het aantal bits in een woord is math.log2(sys.maxsize * 2 + 2). Zie dit antwoord voor meer informatie.

Python 2

In Python 2 is de maximale waarde voor gewone int-waarden beschikbaar als sys.maxint:

>>> sys.maxint
9223372036854775807

Je kunt de minimumwaarde berekenen met -sys.maxint - 1 zoals weergegeven hier.

Python schakelt naadloos over van gewone naar lange gehele getallen zodra u deze waarde overschrijdt. Dus meestal hoef je het niet te weten.


Antwoord 2, autoriteit 33%

Als je alleen een getal nodig hebt dat groter is dan alle andere, kun je

float('inf')

op dezelfde manier, een aantal kleiner dan alle andere:

float('-inf')

Dit werkt in zowel python 2 als 3.


Antwoord 3, autoriteit 24%

De sys.maxint constante is verwijderd vanaf Python 3.0 en verder, gebruik in plaats daarvan sys.maxsize.

Gehele getallen

  • PEP 237: In wezen lang hernoemd naar int. Dat wil zeggen, er is slechts één ingebouwd integraaltype, genaamd int; maar het gedraagt ​​zich meestal als de
    oud lang type.
  • PEP 238: Een expressie zoals 1/2 retourneert een float. Gebruik 1//2 om het afkapgedrag te krijgen. (De laatste syntaxis bestaat al jaren, bij
    minst sinds Python 2.2.)
  • De constante sys.maxint is verwijderd, omdat er geen limiet meer is voor de waarde van gehele getallen. sys.maxsize kan echter worden gebruikt als een
    geheel getal groter dan elke praktische lijst of tekenreeksindex. Het voldoet aan
    de natuurlijke gehele grootte van de implementatie en is meestal hetzelfde
    als sys.maxint in eerdere releases op hetzelfde platform (ervan uitgaande dat de
    dezelfde bouwopties).
  • De repr() van een lang geheel getal bevat de laatste L niet meer, dus code die dat teken onvoorwaardelijk verwijdert, zal de
    laatste cijfer in plaats daarvan. (Gebruik in plaats daarvan str().)
  • Octale letterlijke waarden hebben niet langer de vorm 0720; gebruik in plaats daarvan 0o720.

Raadpleeg: https://docs.python.org/3/whatsnew/ 3.0.html#integers


Antwoord 4, autoriteit 8%

In Python zullen gehele getallen automatisch overschakelen van een int representatie met een vaste grootte naar een long weergave zodra u de waarde sys.maxint, ofwel 231 – 1 of 263 – 1 afhankelijk van uw podium. Let op de L die hier wordt toegevoegd:

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L

Uit de Python-handleiding:

Getallen worden gemaakt door numerieke letterlijke waarden of als resultaat van ingebouwde functies en operators. Onopgesmukte letterlijke gehele getallen (inclusief binaire, hexadecimale en octale getallen) leveren gewone gehele getallen op, tenzij de waarde die ze aanduiden te groot is om te worden weergegeven als een geheel getal, in welk geval ze een lang geheel getal opleveren. Gehele letterlijke getallen met een achtervoegsel 'L' of 'L' leveren lange gehele getallen op ('L' heeft de voorkeur omdat 1l lijkt teveel op elf!).

Python doet zijn uiterste best om te doen alsof zijn gehele getallen wiskundige gehele getallen zijn en onbegrensd. Het kan bijvoorbeeld gemakkelijk een googol berekenen:

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

Antwoord 5, autoriteit 6%

Voor Python 3 is het

import sys
max = sys.maxsize
min = -sys.maxsize - 1

Antwoord 6, autoriteit 2%

U kunt ‘inf’ als volgt gebruiken:

import math
bool_true = 0 < math.inf
bool_false = 0 < -math.inf

Zie: wiskunde Wiskundige functies


Antwoord 7

Als u de max wilt voor array- of lijstindexen (gelijk aan size_t in C/C++), kunt u numpy:

gebruiken

np.iinfo(np.intp).max

Dit is hetzelfde als sys.maxsize, maar het voordeel is dat je hiervoor geen importsys nodig hebt.

Als je max wilt voor native int op de machine:

np.iinfo(np.intc).max

Je kunt andere beschikbare typen bekijken in doc.

Voor floats kun je ook sys.float_info.max gebruiken.


Antwoord 8

Ik vertrouw sterk op dit soort commando’s.

python -c 'import sys; print(sys.maxsize)'

Max int geretourneerd: 9223372036854775807

Voor meer referenties voor ‘sys’ moet u naar

. gaan

https://docs.python.org/3/library/sys.html

https://docs.python.org/3/library /sys.html#sys.maxsize


Antwoord 9

sys.maxsize is niet de daadwerkelijke maximale integerwaarde die wordt ondersteund. Je kunt de maximale grootte verdubbelen en met zichzelf vermenigvuldigen en het blijft een geldige en correcte waarde.

Als u echter sys.maxsize ** sys.maxsize probeert, zal uw machine gedurende een aanzienlijke tijd vastlopen. Zoals velen hebben opgemerkt, lijken de byte- en bitgrootte niet relevant omdat deze praktisch niet bestaat. Ik denk dat python gewoon graag zijn gehele getallen uitbreidt wanneer het meer geheugenruimte nodig heeft. Dus over het algemeen is er geen limiet.

Als je het hebt over het op een veilige manier verpakken of opslaan van gehele getallen waar ze later met integriteit kunnen worden opgehaald, dan is dat natuurlijk relevant. Ik ben echt niet zeker van het inpakken, maar ik weet dat de pickle-module van python die dingen goed afhandelt. Tekenreeksrepresentaties hebben duidelijk geen praktische limiet.

Dus eigenlijk komt het erop neer: wat is de limiet voor uw toepassingen? Wat heeft het nodig voor numerieke gegevens? Gebruik die limiet in plaats van Python’s vrij onbestaande geheeltallige limiet.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

fifteen − twelve =

Other episodes