web-dev-qa-db-fra.com

Que signifie BigInteger sans limite?

J'ai examiné cette question stackoverflow relative à Big Integer et en particulier je ne comprends pas cette ligne (les mots en italique):

Dans la classe BigInteger, Je n'ai pas de limites et il y a quelques fonctions utiles mais il est assez déprimant de convertir votre beau code pour travailler avec la classe BigInteger , spécialement lorsque les opérateurs primitifs n'y fonctionnent pas et que vous devez utiliser les fonctions de cette classe.

Je ne sais pas ce qui me manque, mais pour représenter quelque chose qui n'a pas de limite, il faudrait une mémoire infinie? Quel est le truc ici?

47
Geek

Il n'y a pas de limite théorique. La classe BigInteger alloue autant de mémoire qu'elle a besoin pour tous les bits de données qu'elle est invitée à contenir.

Il existe cependant certaines limites pratiques, dictées par la mémoire disponible. Et il y a d'autres limites techniques, bien que vous soyez très peu susceptible d'être affecté: certaines méthodes supposent que les bits sont adressables par des index int, donc les choses vont commencer à se casser lorsque vous allez au-dessus de Integer.MAX_VALUE morceaux.

81
Graham Borland

Graham a donné une excellente réponse à cette question. Je voudrais seulement ajouter que vous devez faire attention à la méthode valueOf car elle est créée en utilisant le paramètre long donc la valeur maximale est Long.MAX_VALUE.

17
Adam Sznajder

Oui, il est utilisé lorsque nous avons besoin de très grands nombres avec une précision arbitraire. Il est important de noter qu'une précision ou un nombre de chiffres "arbitraires" ne signifie pas "illimité": cela signifie que le nombre de chiffres dans un nombre ou un nombre de chiffres de précision dans un calcul est limité par la mémoire et/ou des limites définies de précision que nous précisons.

4
Eduard

Regardez le code source de la classe BigInteger, vous verrez (cela peut être fait avec NetBean). Un nombre sera représenté sous forme de tableaux int. Exemple, 10113 sera [1, 0, 1, 1, 3] (ce n'est pas exactement ce que fait la classe BigInteger, juste un exemple de fonctionnement du module de grand nombre). Donc, techniquement, sa seule limite sera votre mémoire.

3