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 InfinityVytvořit kvíz