79 votes

Existe-t-il une limite supérieure à BigInteger ?

Duplicata possible :
Que signifie "BigInteger sans limite" ?

La Javadoc pour BigInteger ne définit pas de maximum ou de minimum. Cependant, elle précise :

(accentuation ajoutée)

Immuable Précision arbitraire nombres entiers

Un tel maximum existe-t-il, même en théorie ? Ou est-ce que la façon BigInteger fonctionne de manière fondamentalement différente, de sorte qu'il y a en réalité pas de maximum, sauf pour la quantité de mémoire disponible sur l'ordinateur ?

74voto

assylias Points 102015

Le numéro est conservé dans un int[] - la taille maximale d'un tableau est Integer.MAX_VALUE . Donc le maximum de BigInteger est probablement (2 ^ 32) ^ Integer.MAX_VALUE .

Certes, cela dépend de l'implémentation et ne fait pas partie des spécifications.


Dans Java 8, certaines informations ont été ajoutées à la javadoc de BigInteger donnant une gamme minimale supportée et la limite réelle de la mise en œuvre actuelle :

BigInteger doit prendre en charge des valeurs comprises dans la plage -2``Integer.MAX_VALUE (exclusif) à +2``Integer.MAX_VALUE (exclusif) et peut supporter des valeurs en dehors de cette plage.

Note de mise en œuvre : BigInteger les constructeurs et les opérations lancent ArithmeticException lorsque le résultat est en dehors de la plage supportée de -2``Integer.MAX_VALUE (exclusif) à +2``Integer.MAX_VALUE (exclusif).

20voto

embedded.kyle Points 3135

BigInteger n'est utilisé que si l'on sait qu'il ne s'agira pas d'une décimale et qu'il est possible que le type de données long ne soit pas assez grand. il est possible que le type de données longues ne soit pas assez grand. BigInteger n'a pas de limite de taille maximale (aussi grande que la RAM de l'ordinateur peut l'ordinateur peut contenir).

De aquí .

Il est mis en œuvre à l'aide d'un int[] :

  110       /**
  111        * The magnitude of this BigInteger, in <i>big-endian</i> order: the
  112        * zeroth element of this array is the most-significant int of the
  113        * magnitude.  The magnitude must be "minimal" in that the most-significant
  114        * int ({@code mag[0]}) must be non-zero.  This is necessary to
  115        * ensure that there is exactly one representation for each BigInteger
  116        * value.  Note that this implies that the BigInteger zero has a
  117        * zero-length mag array.
  118        */
  119       final int[] mag;

De la source

Extrait de l'article de Wikipedia Arithmétique à précision arbitraire :

Plusieurs langages de programmation modernes ont un support intégré pour bignums, et d'autres disposent de bibliothèques pour les calculs de précision arbitraire. et les mathématiques à virgule flottante. Plutôt que de stocker des valeurs sous la forme d'un nombre fixe de bits binaires lié à la taille du registre du processeur, ces implémentations utilisent généralement des tableaux de chiffres de longueur variable.

12voto

Peter Lawrey Points 229686

Le premier maximum que vous rencontrerez sera la longueur d'une chaîne de caractères, soit 2. 31 -1 chiffres. C'est beaucoup plus petit que le maximum d'un BigInteger mais, à mon avis, il perd beaucoup de sa valeur s'il ne peut pas être imprimé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X