logo

NaN (Not a Number) v Javě

V Javě význam NaN je Ne Číslo a je přítomen v java.lang.Double a java.lang.Float třídy. Je to speciální hodnota, která představuje nedefinovanou číselnou hodnotu. S NAN se můžeme setkat v matematických výpočtech, kde je výsledek nedefinovaný.

  • Pokud se pokusíme vypočítat druhou odmocninu záporného Math.sqrt(-1), vrátí NaN, protože druhá odmocnina záporného čísla není definována.
  • Pokud se pokusíme vydělit nulu nulou, vrátí také NaN.

Příklad:

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));  } } 

Výstup
NaN NaN NaN 

Někdy matematika nedává smysl, proto existuje NaN. Místo házení chyb Java jednoduše vrací NaN, aby ukázala, že něco není v pořádku.



Jak vytvořit NaN?

S pomocí Dvojnásobek nebo Plovák tříd můžeme vytvořit NAN.

double n = Double.NaN; // Použití Double

float n = Float.NaN; // Použití Float

Jak porovnat hodnoty NaN?

NaN jsou neuspořádané, to znamená, že jakékoli srovnání s NaN vrátí hodnotu false. Pokud porovnáme NaN s jiným NaN nebo použijeme relační operátory, výsledek bude vždy nepravdivý. Nyní budeme diskutovat o tom, jak NaN funguje v různých scénách.

1. Relační operátoři a NaN

  • Operátory numerického porovnávání< <= >a >= vždy vrátí hodnotu false, pokud jeden nebo oba operandy jsou NaN.
  • Operátor rovnosti == vrátí hodnotu false, pokud je některý z operandů NaN.
  • Operátor nerovnosti != vrátí hodnotu true, pokud je některý z operandů NaN.

Příklad:

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);  } } 

Výstup
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isN() Bratři

Tato metoda se používá ke kontrole, zda je hodnota NaN.

Příklad:

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());    } }  

Výstup
NaN = true -Infinity = false 


3. Plovoucí typ nevytváří výjimku při provozu s matematickými hodnotami

NaN následuje IEEE 754 s plovoucí desetinnou čárkou norma. IEEE 754 čísla s plovoucí desetinnou čárkou mohou představovat kladné nebo záporné nekonečno a NaN. Tyto tři hodnoty pocházejí z výpočtů, jejichž výsledek není definován nebo jej nelze přesně vyjádřit. Java se řídí známými matematickými fakty. 1,0 / 0,0 je nekonečno, ale ostatní jsou neurčité formy, které Java představuje jako NaN (nikoli číslo).

Příklad:

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);  } } 

Výstup
Infinity -Infinity Infinity 
Vytvořit kvíz