Em Java o significado de NaN é Não é um número e está presente em java.lang.Double e java.lang.Float aulas. É um valor especial que representa um valor numérico indefinido. Podemos encontrar NAN em cálculos matemáticos onde o resultado é indefinido.
- Se tentarmos calcular a raiz quadrada de um Math.sqrt(-1) negativo, ele retornará NaN porque a raiz quadrada de um número negativo é indefinida.
- Se tentarmos dividir zero por zero também retornará NaN.
Exemplo:
Java// Java Program to demonstrates NAN // Define a class public class Geeks { // main method public static void main(String[] args) { System.out.println(2.0 % 0.0); System.out.println(0.0 / 0.0); System.out.println(Math.sqrt(-1)); } }
Saída
NaN NaN NaN
Às vezes matemática não faz sentido, é por isso que o NaN existe. Em vez de gerar erros, o Java simplesmente retorna NaN para mostrar que algo está errado.
Como criar NaN?
Com a ajuda de Dobro ou Flutuador classes, podemos criar uma NAN.
duplo n = Duplo.NaN; //Usando Duplo
float n = Float.NaN; //Usando Flutuador
Dhanashree Verma
Como comparar valores NaN?
NaN não são ordenados, significa que qualquer comparação com NaN retornará falso. Se compararmos NaN com outro NaN ou estivermos usando operadores relacionais o resultado será sempre falso. Agora vamos discutir como o NaN funciona em diferentes cenários.
1. Operadores Relacionais e NaN
- Os operadores de comparação numérica< <= >e >= sempre retorna falso se um ou ambos os operandos forem NaN.
- O operador de igualdade == retorna falso se um dos operandos for NaN.
- O operador de desigualdade! = retorna verdadeiro se um dos operandos for NaN.
Exemplo:
Java// Java program to test relational operator on NaN public class Geeks { public static void main(String[] args) { // comparing NaN constant field defined in // Float Class System.out.print('Check if equal :'); System.out.println(Float.NaN == Float.NaN); System.out.print('Check if unequal: '); System.out.println(Float.NaN != Float.NaN); // comparing NaN constant field defined in Double Class System.out.print('Check if equal: '); System.out.println(Double.NaN == Double.NaN); System.out.print('Check if unequal: '); System.out.println(Double.NaN != Double.NaN); // More Examples double NaN = 2.1 % 0; System.out.println((2.1%0) == NaN); System.out.println(NaN == NaN); } }
Saída
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false
2. isN() Irmãos
Este método é usado para verificar se um valor é NaN.
Exemplo:
Java// Demonstrating isNaN() import java.lang.*; // Created a class public class Geeks { // main method public static void main(String[] args) { Double x = new Double(-2.0/0.0); Double y = new Double(0.0/0.0); // returns false if this Double value is not a Not-a-Number (NaN) System.out.println(y + ' = ' + y.isNaN()); // returns true if this Double value is a Not-a-Number (NaN) System.out.println(x + ' = ' + x.isNaN()); } }
Saída
NaN = true -Infinity = false
3. O tipo flutuante não produz exceção ao operar com valores matemáticos
NaN segue o Ponto flutuante IEEE 754 padrão. IEEE 754 números de ponto flutuante podem representar infinito positivo ou negativo e NaN. Esses três valores surgem de cálculos cujo resultado é indefinido ou não pode ser representado com precisão. Java está seguindo fatos matemáticos conhecidos. 1,0/0,0 é infinito, mas os outros são formas indeterminadas que Java representa como NaN (não um número).
Exemplo:
Java// Demonstrating output of floating // point number operations public class Geeks { public static void main(String[] args) { System.out.println(2.0 / 0); System.out.println(-2.0 / 0); System.out.println(9.0E234 / 0.1E-234); } }
Saída
Infinity -Infinity InfinityCriar questionário