179 votes

Comment implémenter l'infini en Java ?

Est-ce que Java a quelque chose pour représenter l'infini pour chaque type de données numériques ?

Comment l'infini est-il implémenté de telle sorte que je puisse y effectuer des opérations mathématiques ?

Double myInf = Double.POSITIVE_INFINITY;
myInf + 5;
myInf*(-1);

Comment représenter au mieux l'infini dans mon code ?

11 votes

Il existe un nombre infini d'infinis, lequel voulez-vous modéliser ?

11 votes

Pourquoi -==0 être vrai ? Et aussi : Pourquoi avez-vous besoin d'une telle chose ?

245voto

Peter Lawrey Points 229686

double supporte Infinity

double inf = Double.POSITIVE_INFINITY;
System.out.println(inf + 5);
System.out.println(inf - inf); // same as Double.NaN
System.out.println(inf * -1); // same as Double.NEGATIVE_INFINITY

imprime

Infinity
NaN
-Infinity

note : Infinity - Infinity est Pas un numéro .

24 votes

J'évite d'utiliser float dans la mesure du possible, car sa précision est assez faible ;)

4 votes

La mise en œuvre d'algorithmes comme celui de Dijkstra me fait me demander si POSITIVE_INFINITY < POSITIVE_INFINITY.

63voto

JohnK Points 839

Je suppose que vous utilisez des maths entières pour une raison. Si c'est le cas, vous pouvez obtenir un résultat qui, d'un point de vue fonctionnel, est presque identique à celui de POSITIVE_INFINITY en utilisant le champ MAX_VALUE de la fonction Integer classe :

Integer myInf = Integer.MAX_VALUE;

(Et pour NEGATIVE_INFINITY, vous pourriez utiliser MIN_VALUE.) Il y aura bien sûr quelques différences fonctionnelles, par exemple, lors de la comparaison de myInf à une valeur qui se trouve être MAX_VALUE : il est clair que ce nombre n'est pas inférieur à myInf .

Il y a aussi une bibliothèque qui possède en fait des champs POSITIVE_INFINITY et NEGATIVE_INFINITY, mais qui ne sont en fait que de nouveaux noms pour MAX_VALUE et MIN_VALUE.

12 votes

Combien vaut Integer.MAX_VALUE + 5 ?

9 votes

Integer.MAX_VALUE + 5 s'enroule autour des entiers négatifs. Integer.MAX_VALUE + 5 = Integer.MIN_VALUE + 4 = -2147483644.

0 votes

Quelle est la différence entre utiliser Integer.MAX_VALUE comme l'infini plutôt que Double.POSITIVE_INFINITY vous avez dit qu'ils sont "fonctionnellement presque identiques", alors quelle est la différence ?

12voto

Rohit Jain Points 90368

Pour utiliser Infinity vous pouvez utiliser Double qui soutient Infinity : -

    System.out.println(Double.POSITIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY * -1);
    System.out.println(Double.NEGATIVE_INFINITY);

    System.out.println(Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY);

SORTIE : -

Infinity
-Infinity
-Infinity

Infinity 
NaN

7voto

Tudor Points 39539

Le site Double et Float Les types ont le POSITIVE_INFINITY constant.

0 votes

@user1753100 : Par défaut non, mais certaines bibliothèques, comme celle-ci : jscience.org le mettre en œuvre apparemment.

1 votes

Il semble arbitraire de limiter les valeurs infinies aux Doubles et aux Flottants. Leurs valeurs maximales sont plus proches de l'infini que la valeur maximale des entiers, mais pas beaucoup plus proches.

3 votes

Les types à virgule flottante @PatrickBrinich-Langlois (tels que double et float) sont généralement capables d'exprimer directement l'infini (c'est-à-dire qu'il existe un motif de bits qui signifie spécifiquement "infini", distinct de la valeur maximale du type). Double et Float ont MAX_VALUE, en commun avec Integer.

4voto

akoskm Points 3362

Je ne suis pas sûr que Java dispose de l'infini pour chaque type numérique, mais pour certains types de données numériques, la réponse est positive :

Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY

ou

Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY

Vous pouvez également trouver utile l'article suivant qui représente quelques opérations mathématiques impliquant +/- l'infini : Les complexités des nombres à virgule flottante de Java .

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