logo

NaN (não é um número) em Java

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 Infinity 
Criar questionário