Duplicate possible:
Que signifie BigInteger sans limite?
La Javadoc pour BigInteger
ne définit pas de maximum ni de minimum. Cependant, cela dit:
(emphase ajoutée)
Immuable entiers à précision arbitraire
Existe-t-il un tel maximum, même en théorie? Ou bien la manière dont BigInteger
fonctionne-t-elle de manière fondamentalement différente, de sorte qu'il existe en réalité non maximum, à l'exception de la quantité de mémoire disponible sur l'ordinateur?
Le numéro est contenu dans un int[]
- la taille maximale d'un tableau est Integer.MAX_VALUE
. Donc, le maximum BigInteger est probablement (2 ^ 32) ^ Integer.MAX_VALUE
.
Certes, cela dépend de la mise en œuvre et ne fait pas partie de la spécification.
Dans Java 8, certaines informations ont été ajoutées à le BigInteger javadoc , donnant une plage minimale prise en charge et la limite réelle de l'implémentation actuelle:
BigInteger
doit prendre en charge les valeurs comprises dans la plage-2
Integer.MAX_VALUE
(exclusif) to+2
Integer.MAX_VALUE
(exclusif) et peuvent prendre en charge des valeurs situées en dehors de cette plage.Note d'implémentation:
BigInteger
constructeurs et opérations jettentArithmeticException
lorsque le résultat est en dehors de la plage prise en charge de-2
Integer.MAX_VALUE
(exclusif) to+2
Integer.MAX_VALUE
(exclusif).
BigInteger ne sera utilisé que si vous savez 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. BigInteger n'a pas de limite sur sa taille maximale (aussi grande que le RAM sur l'ordinateur peut contenir).
De ici .
Il est implémenté en utilisant 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 Wikipedia Arithmétique à précision arbitraire :
Plusieurs langages de programmation modernes prennent en charge les bignums, tandis que d'autres ont des bibliothèques disponibles pour les calculs entiers à précision arbitraire et les calculs à virgule flottante. Plutôt que de stocker des valeurs sous forme d'un nombre fixe de bits binaires liés à la taille du registre du processeur, ces implémentations utilisent généralement des tableaux de longueurs variables.
Le premier maximum que vous atteindriez est la longueur d’une chaîne qui est égale à 231-1 chiffres. C'est beaucoup plus petit que le maximum d'un BigInteger, mais à mon humble avis, il perd une grande partie de sa valeur s'il ne peut pas être imprimé.