11
votes

BigInteger déborde-t-il jamais?

L'API Docs dit

Tous les détails de la spécification concernant le débordement sont ignorés, comme Les Bigintegers sont fabriqués aussi importants que nécessaire pour répondre aux résultats d'une opération.

Cela implique-t-il que BigInteger ne déborde jamais de supposer que vous avez suffisamment de mémoire disponible? Si oui, pourquoi laissons-nous un "type" débordement et certains ne le font pas?

Comme la langue évolue, cela favorisera-t-il les types qui cachent le mécanisme débordant des programmeurs?


0 commentaires

5 Réponses :


2
votes

BigInteger ne déborde jamais! Il est d'une taille arbitraire, il peut donc accueillir un nombre aussi important que votre mémoire (et votre tas Java) peut accueillir.


0 commentaires

5
votes

vous Lisez le droit , il ne débordera jamais. Bien que cela ne crée pas plus de RAM pour vous :)

Sémantique des opérations arithmétiques exactement imiter ceux de l'entier de Java opérateurs arithmétiques, tels que définis dans La spécification de langue java. Pour exemple, division par zéro jette un Arithméticepxception et division d'un négatif par un rendement positif a reste négatif (ou zéro) reste. Tous les détails de la spécification concernant Les débordements sont ignorés, comme des bigintegers sont faits aussi importants que nécessaire pour accueillir les résultats d'un opération.


0 commentaires

2
votes

Correct, BigInteger ne déborde jamais, il utilise des opérations logicielles et une allocation dynamique pour stocker des numéros de taille arbitraire.

Comme avec toutes choses dans l'informatique, "de la taille arbitraire" est une façon de dire "jusqu'à ce que vous manquiez de ressources sur le système sous-jacent".


0 commentaires

2
votes

si oui, pourquoi laissons-nous un "type" débordement et certains ne le font pas?

Cela dépend entièrement de la manière dont il est soutenu. Si c'est soutenu par exemple par exemple une primitive de vanille ordinaire int , il déborde évidemment sur integer.max_value . Les primitives ont des bordures de débordement claires, tandis que celles des objets dépend de la manière dont elles sont soutenues / programmées.


0 commentaires

14
votes

BigInteger ne déborde jamais de supposer que vous avez suffisamment de mémoire pour le gérer.

Pour répondre à votre question de savoir pourquoi nous laissons certains types débordement et non d'autres:

BigInteger n'est pas vraiment un type. C'est une classe. C'est une classe wrapper conçue pour vous donner la même fonctionnalité que l'INT, mais vous permet d'utiliser des nombres aussi importants que nécessaire sans vous inquiéter de débordement.

Types de débordement du débordement car ils sont simplement quelques octets (la quantité exacte dépend du type) de la mémoire, et une fois que la petite quantité de mémoire déborde, ainsi les chiffres.

Aucune classe "Overflers" sauf si elle est spécifiquement conçue pour le faire (ou si vous manquez de ressources). Une classe est définie avec suffisamment de mémoire pour tout ce qu'il contient, ce qui serait principalement des références à d'autres classes ou autres structures de données.


0 commentaires