logo

NaN (ne skaičius) Java

Java reiškia NaN yra Ne Skaičius ir jis yra java.lang.Dvigubas ir java.lang.Float klases. Tai speciali reikšmė, kuri reiškia neapibrėžtą skaitinę reikšmę. Su NAN galime susidurti matematiniuose skaičiavimuose, kai rezultatas neapibrėžtas.

  • Jei bandysime apskaičiuoti neigiamo Math.sqrt(-1) kvadratinę šaknį, ji grąžins NaN, nes neigiamo skaičiaus kvadratinė šaknis neapibrėžta.
  • Jei bandysime padalyti nulį iš nulio, tai taip pat grąžins NaN.

Pavyzdys:

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

Išvestis
NaN NaN NaN 

Kartais matematikos nėra prasmės, todėl NaN egzistuoja. Vietoj klaidų, Java tiesiog grąžina NaN, kad parodytų, kad kažkas negerai.



Kaip sukurti NaN?

Su pagalba Dvigubas arba Plūduriuoti klasėse galime sukurti NAN.

dvigubas n = Double.NaN; // Naudojant Double

plūduriuoti n = plūduriuoti.NaN; // Naudojant plūdę

Kaip palyginti NaN vertes?

NaN yra netvarkingi, tai reiškia, kad bet koks palyginimas su NaN bus klaidingas. Jei lyginame NaN su kitu NaN arba naudojame reliacinius operatorius, rezultatas visada bus klaidingas. Dabar aptarsime, kaip NaN veikia įvairiose scenose.

1. Reliaciniai operatoriai ir NaN

  • Skaitinio palyginimo operatoriai< <= >ir >= visada grąžina false, jei vienas arba abu operandai yra NaN.
  • Lygybės operatorius == grąžina false, jei kuris nors operandas yra NaN.
  • Nelygybės operatorius != grąžina true, jei kuris nors operandas yra NaN.

Pavyzdys:

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

Išvestis
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isnN() Broliai

Šis metodas naudojamas patikrinti, ar vertė yra NaN.

Pavyzdys:

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

Išvestis
NaN = true -Infinity = false 


3. Plaukiojantis tipas nesudaro išimčių dirbant su matematinėmis reikšmėmis

NaN seka IEEE 754 slankiojo kablelio standartinis. IEEE 754 slankiojo kablelio skaičiai gali reikšti teigiamą arba neigiamą begalybę ir NaN. Šios trys reikšmės atsiranda atlikus skaičiavimus, kurių rezultatas neapibrėžtas arba negali būti tiksliai pateiktas. Java seka žinomus matematikos faktus. 1.0 / 0.0 yra begalybė, bet kitos yra neapibrėžtos formos, kurias Java reiškia kaip NaN (ne skaičių).

Pavyzdys:

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

Išvestis
Infinity -Infinity Infinity 
Sukurti viktoriną