En Java, qu'est-NaN veux dire?
J'ai un programme qui essaie de réduire un double
vers le bas pour un nombre désiré. La sortie que je vous est NaN
.
Ce n' NaN
dire en Java?
- Il y a une bonne description de NaN et de les écueils les plus courants lors de l'utilisation de NaN en Java: ppkwok.blogspot.co.royaume-uni/2012/11/...
- Si vous posez la question "à quoi bon, NaN?" en Java (ou toute autre langue), je peux vous donner un cas d'utilisation où il est très pratique: quand j'ai un tableau 2d de flotteurs, mais mon calcul n'est pas valable pour une certaine partie de ce tableau 2d, je vais remplir cette valeur avec "NaN". Ceci peut être utilisé pour signaler aux utilisateurs en aval de mon calcul (comme quand il est transformé en une image raster) "ne pas prêter attention à la valeur à ce point". Très utile!
- BTW, ce qui, exactement -- signifie "réduire" un double? Curieux...
Vous devez vous connecter pour publier un commentaire.
Prises de cette page:
NaN
a la propriété intéressante d'être le seul "nombre", ce qui n'est pas le même que lui-même quand on les compare. Par conséquent, une commune (et dans de nombreuses langues la seule) de tester si un nombrex
estNaN
est la suivante:boolean isNaN(x){return x != x;}
isNaN(...)
ne fonctionne pas comme @quazgar de la fonction. Au lieu de cela, elle même renvoietrue
lors du passage d'un non-nombre, comme une primitive de la chaîne, un objet, ouundefined
. Dans ces cas,x !== x
rendementsfalse
à la place. Donc, quazgar version joliment vérifie six
est un NaN nombre. (Je sais que la question est à propos de Java, pas de JavaScript.)i
et certains langages comme le python, le face très bien avec elle... C'est peut-être pas le cas dansjava
tuNaN
signifie “Pas un Nombre” et est essentiellement une représentation d'un groupe spécial de valeur à virgule flottante dans le IEE 754 virgule flottante standard. NaN signifie généralement que la valeur est quelque chose qui ne peut pas être exprimé avec une pièce nombre à virgule flottante.Une conversion de cette valeur, lorsque la valeur convertie est quelque chose d'autre, par exemple lors de la conversion d'une chaîne qui ne représente pas un nombre.
NaN
signifie "Pas un Nombre" et est le résultat de indéfinie des opérations sur des nombres à virgule flottante comme par exemple la division zéro par zéro. (Note que pendant la division d'un nombre différent de zéro par zéro est aussi généralement pas défini dans les mathématiques, il ne donne pas de résultat NaN mais en positif ou négatif de l'infini).NaN
signifie "Pas un nombre". C'est une valeur à virgule flottante qui signifie que le résultat d'une opération n'a pas été définie ou non représentable comme un nombre réel.Voir ici pour plus d'explication de cette valeur.
NaN ne représente Pas un Nombre. Il est utilisé pour indiquer une valeur qui est mathématiquement pas défini. Comme divisant par 0.0 0.0.
Vous pouvez regarder ici pour plus d'informations: https://web.archive.org/web/20120819091816/http://www.concentric.net/~ttwang/tech/javafloat.htm
Poster votre programme ici si vous avez besoin de plus d'aide.
NaN = Pas un Nombre.
Signifie Pas un Nombre.
C'est une représentation commune d'un impossible valeur numérique dans de nombreux langages de programmation.
Pas un Java gars, mais en JS et d'autres langues que j'utilise c'est "Pas un Nombre", ce qui signifie une opération causé à devenir non pas un nombre valide.
Il signifie littéralement "Pas un Nombre". Je soupçonne que quelque chose est incorrect avec votre processus de conversion.
Découvrez le Pas Un Numéro de section à cette référence
Pas valide en valeur à virgule flottante (par exemple, le résultat de la division par zéro)
http://en.wikipedia.org/wiki/NaN
Minimum praticable exemple
La première chose que vous devez savoir, c'est que le concept de NaN est mis en œuvre directement sur le matériel de PROCESSEUR.
Tous les principaux Processeurs modernes semblent suivre La norme IEEE 754 qui spécifie floating point format, et NaNs, qui sont un peu spéciaux valeurs flottantes, font partie de la norme.
Par conséquent, le concept sera très similaire dans n'importe quelle langue, y compris Java, qui émet juste à virgule flottante code directement dans le PROCESSEUR.
Avant de procéder, vous pouvez d'abord lire les réponses que j'ai écrit:
Maintenant, pour certains, Java action. La plupart des fonctions d'intérêt qui ne sont pas dans le langage de base vivent à l'intérieur de
java.lang.Float
.Nan.java
GitHub en amont.
Exécuter avec:
De sortie:
Donc à partir de cela, nous apprenons quelques petites choses:
bizarre flottant opérations qui n'ont pas de n'importe quelle suite donner à NaN:
0.0f /0.0f
sqrt(-1.0f)
log(-1.0f)
générer un
NaN
.En C, il est effectivement possible de demander des signaux à être posées sur de telles opérations avec
feenableexcept
de les détecter, mais je ne pense pas qu'il est exposé dans Java: Pourquoi la division entière par zéro 1/0 donner d'erreur mais à virgule flottante 1/0.0 renvoie "Inf"?bizarre opérations qui sont à la limite de plus ou moins l'infini, toutefois, ne donnent +- infini au lieu de NaN
1.0f /0.0f
log(0.0f)
0.0
tombe presque dans cette catégorie, mais le problème, c'est que cela soit plus ou moins l'infini, de sorte que NaN.si NaN est l'entrée d'un flottant de fonctionnement, la sortie a également tendance à être NaN
il y a plusieurs valeurs possibles pour NaN
0x7fc00000
,0x7fc00001
,0x7fc00002
, bien que x86_64 semble générer seulement0x7fc00000
.NaN et l'infini sont similaires représentation binaire.
Examinons quelques-uns d'entre eux:
À partir de ce que nous confirment ce que IEEE754 spécifie:
NaNs peut être positif ou négatif (en haut bits), bien que cela n'a aucun effet sur les opérations normales de
Testé sous Ubuntu 18.10 amd64, OpenJDK 1.8.0_191.