2017-02-22 2 views
1

De temps en temps mon code calcule un double et retourne Infini. Le code n'est pas bloqué et je peux même voir ces résultats dans un fichier .csv qui est enregistré par le code (le mot "Infinite" est écrit dans le fichier .csv).Comment vérifier si un résultat de calcul est Infini ou non?

Mais je veux éviter mon code pour utiliser davantage ce résultat infini, donc je dois détecter si le résultat est infini ou non. Comment puis-je faire ceci ?

J'ai essayé quelque chose comme

if(a==Infinite){ } 

ou

if(a.isInfinite()){ } 

mais aucun d'entre eux semblent être le bon code.

+0

@Tunaki La question que vous faites référence est pas infini, mais d'un double avec un nombre infini de chiffres après la virgule (quelque chose comme = 4/3 1.333333). J'ai trouvé cette question mais elle n'a pas résolu la mienne. – Veronique

+0

Non ce n'est pas, il s'agit d'une valeur double étant infinie, à laquelle la réponse est d'utiliser 'Double.isInfinite (double)', comme accepté ici. Il n'y a aucune mention d'une valeur double avec une représentation décimale infinie là. – Tunaki

+0

ok désolé, maintenant c'est. Soit je deviens fou ou tu as changé le lien. – Veronique

Répondre

9

Lire la Javadoc:

public static boolean isInfinite(double v) 

Renvoie true si le nombre spécifié est infiniment grand en grandeur, sinon false.

Donc, quelque chose comme:

if (Double.isInfinite(myValue)) { ... } 
+1

OP demande si le nombre est infini, pas si le nombre n'est pas fini. J'ai commenté votre réponse à cet effet. –

1

Si vous avez une double primitive puis utilisez

a == Double.POSITIVE_INFINITY || a == Double.NEGATIVE_INFINITY

comme le test pour l'infini. Notez que si votre infini est le résultat de la division flottante point par zéro, alors vous devriez également vérifier

Double.NAN

qui sera le résultat de 0.0/0.0. Malheureusement, tout compare false avec NaN (y compris NaN lui-même), donc vous devez utiliser Double.isNaN(a) pour cela.


Alors bin la chose et l'utilisation Double.isFinite(a), qui sera false pour Infinity +, -Infinity et NaN et true dans tous les autres cas.

+0

Je ne suis pas sûr si votre manipulation de 'NaN' est nécessaire ici. OP n'a pas dit que c'est; que ce soit parce qu'ils n'ont pas examiné le cas, ou ne veulent pas le gérer, n'est pas clair. –

+0

J'essaie juste d'être utile ;-) – Bathsheba

+0

Et je pense que vous êtes; Je dis simplement que vous ajoutez peut-être vos propres exigences ici. De plus, il ne sert à rien d'utiliser une comparaison explicite sur 'Double.isInfinite'. –