J'ai un int a
qui doit être égal à "l'infini". Cela signifie que si
int b = anyValue;
a>b
est toujours vrai.
Y a-t-il une fonctionnalité de C++ qui pourrait rendre cela possible ?
J'ai un int a
qui doit être égal à "l'infini". Cela signifie que si
int b = anyValue;
a>b
est toujours vrai.
Y a-t-il une fonctionnalité de C++ qui pourrait rendre cela possible ?
Valeurs min et max int
Int -2,147,483,648 / 2,147,483,647 Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
je suppose que vous pourriez définir a comme étant égal à 9 223 372 036 854 775 807 mais il faudrait que ce soit un int64
si vous voulez toujours que a soit plus grand que b, pourquoi avez-vous besoin de le vérifier ? il suffit de le définir comme étant toujours vrai.
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.
1 votes
Vous pouvez simplement utiliser
float
qui ont une valeur représentant l'infini.1 votes
@jozefg - Ok, donc ce n'est pas une vérification que l'utilisateur recherche, juste l'option
Max Value
la mise en œuvre de la langue.0 votes
@keyboardP Oui, ça y ressemble, je l'ai utilisé pour implémenter des algorithmes de minimisation.
4 votes
@jozefg Ha, j'ai compris que vous alliez implémenter A*. J'étais donc fermer !
0 votes
@Xeo : Si vous avez besoin de valeurs discrètes,
float
n'est pas la solution. Il est facile d'imaginer un type de données dont les valeurs sont-Infinity
,INT_MIN
, ..., 0, ...,INT_MAX
,+Infinity
. Il se trouve que le C++ ne fournit pas un tel type.2 votes
@jozefg - C'est logique. Je pensais que l'OP voulait réellement effectuer le
a>b
vérifier :)0 votes
Le C++ permet de définir assez facilement une classe présentant les caractéristiques requises. Pour éviter de limiter l'utilisation de l'outil réel qui peuvent être conservées dans l'entier "sous-jacent", il faudrait maintenir un indicateur d'état "la valeur est actuellement infinie", et le vérifier dans le code pour annuler les opérateurs de comparaison, copier/additionner des valeurs, etc. Il faudrait remplacer un grand nombre d'opérateurs, mais tout cela n'est que futilités répétitives.
0 votes
@FumbleFinger : et affecterait probablement les performances de manière significative. Je me souviens avoir lu un article l'année dernière où l'auteur se plaignait de l'absence de +/-inf et NaN pour les entiers qui seraient traités par la fonction matériel au lieu du comportement indéfini de sous-débit/surdébit que nous obtenons par défaut. Maintenant, si seulement je pouvais me rappeler où je l'ai lu...
0 votes
@Matthieu M : Ne me faites pas commencer ! Dans le monde réel, je pense que la demande de l'OP est potache. Les physiciens théoriques travaillent d'arrache-pied depuis des décennies pour essayer de se débarrasser des infinis dans leurs équations, mais cela s'avère très difficile. Et voilà qu'un type veut introduire l'infini dans la programmation - probablement parce qu'il ne sait pas comment, ou parce qu'il ne peut pas se donner la peine de concevoir son algorithme et son code de manière sensée.
0 votes
@FumbleFingers : quand même, ça ne vous dérange pas que
std::numeric_limits<int>::min() - 1 == std::numeric_limits<int>::max()
dans la plupart des implémentations (c'est techniquement indéfini) ? Personnellement, je préférerais qu'il soit égal àstd::numeric_limits<int>::minusinfinity()
et contaminer le reste de l'expression.0 votes
@Matthieu : Je n'ai jamais utilisé le limites_numériques mais je constate qu'il prend en charge des attributs tels que peut supporter l'infini y est limité . Si l'OP a vraiment besoin d'une variable capable de supporter l'infini, il aura besoin de quelque chose comme ça. Mais s'il pensait sérieusement pouvoir contourner le problème en utilisant un "int" standard, il serait probablement dépassé par ce niveau d'abstraction.
0 votes
@KeithThompson désolé de nécroser ce sujet mais juste pour clarifier car j'ai un problème similaire. Vous recommandez de résoudre ce problème en utilisant
a = INT_MAX;
pas vrai ? Ou faites-vous référence à une autre fonction ?1 votes
@Hikari : Non, je dis qu'il n'y a aucun moyen de représenter l'infini dans un type entier. Vous pourriez créer une classe avec des opérateurs surchargés.