Question

Comment représenter des valeurs qui dépassent les valeurs maximales de tout type de données particulier (int, long)?

Je pense avoir un autre espace de stockage agissant comme un compteur. Une fois que la valeur maximale est franchie, les mises à jour de contre-à-dire, la variable a dépassé la limite pour le nombre « x » fois. Y at-il un autre moyen efficace de le faire?

Comment afficher nous la valeur exacte?

P.S. Juste une question hypothétique

Était-ce utile?

La solution

La première consiste à se tailler réellement l'une des valeurs à cet effet.

Par exemple, si vous avez un type intégral 16 bits qui peut représenter les valeurs de 0 à 65535 inclus, réduire la portée de 0 à 65534 et utiliser 65535 pour représenter la valeur « trop reprisés grand ».

vous devez être prudent de contrôler les opérations afin qu'ils ne produiraient pas cette valeur dans le cours normal des événements, mais qui est relativement facile si votre langue offre des capacités de classe.

Vous pouvez utiliser les prochains grands type de données telles que long pour int ou long long pour long et utiliser la gamme supplémentaire pour stocker des informations.

Et, si vous avez besoin de plus que cela, vous pouvez coder une bibliothèque bignum (ou utiliser celui qui existe déjà) afin qu'il n'y ait pas de limites artificielles imposées à vos chiffres.

Autres conseils

Je ne suis pas certain, mais je pense que vous devrez créer votre propre type de données (ou classe). Cela a été fait auparavant. En fait, certaines langues ont leur propre implémentation de ceci:

http://groups.csail.mit.edu/ mac / users / adams / BigInt / BigInt.html

Considérons une norme IEEE float-754 et les "Infinity" bit-modèles. On pourrait réserver un bit modèle similaire dans un int fixe / long à dire « Infinity ». Cependant, la CPU ne vous aidera pas sur les états de mathématiques / débordement comme la plupart FPU sera.

Quelques langages comme Ruby ou elisp déjà bits « de réserve » en nombres entiers (par exemple un Fixnum en Ruby est limitée à [-2 ^ ^ 29,2 29-1] parce que 2 bits sont utilisés pour le ménage de l'objet). L'utilisation d'un bit de bits modèle spécifique par rapport serait seulement retirer une valeur potentielle.

Si vous parlez des langues de niveau supérieur, disons, C #, il est facile à définir un type personnalisé:

struct IntWithStuff {
   int value;
   bool isTooBig;
}

Vous pouvez aussi surcharger les différents opérateurs et mettre en œuvre des moulages (explicites), mais je digresse ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top