logo

NaN (ni številka) v Javi

V Javi pomen NaN je Ni številka in je prisoten v java.lang.Double in java.lang.Float razredi. Je posebna vrednost, ki predstavlja nedefinirano številsko vrednost. Na NAN lahko naletimo pri matematičnih izračunih, kjer je rezultat nedefiniran.

  • Če poskušamo izračunati kvadratni koren negativnega Math.sqrt(-1), bo vrnil NaN, ker je kvadratni koren negativnega števila nedefiniran.
  • Če poskusimo deliti nič z nič, bo vrnil tudi NaN.

primer:

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

Izhod
NaN NaN NaN 

včasih matematika nima smisla, zato NaN obstaja. Namesto vrženja napak Java preprosto vrne NaN, da pokaže, da je nekaj narobe.



Kako ustvariti NaN?

S pomočjo Dvojno oz Lebdi razredov lahko ustvarimo NAN.

dvojno n = dvojno.NaN; // Uporaba Double

bash za zanko

float n = Float.NaN; // Uporaba Float

Kako primerjati vrednosti NaN?

NaN so neurejeni, kar pomeni, da bo vsaka primerjava z NaN vrnila napačno. Če NaN primerjamo z drugim NaN ali če uporabljamo relacijske operatorje, bo rezultat vedno napačen. Zdaj bomo razpravljali o tem, kako NaN deluje v različnih scenarijih.

1. Relacijski operatorji in NaN

  • Operatorji numerične primerjave< <= >in >= vedno vrneta false, če sta eden ali oba operanda NaN.
  • Operator enakosti == vrne false, če je kateri od operandov NaN.
  • Operator neenakosti != vrne true, če je kateri od operandov NaN.

primer:

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

Izhod
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isnN() Bratje

Ta metoda se uporablja za preverjanje, ali je vrednost NaN.

primer:

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

Izhod
NaN = true -Infinity = false 


3. Plavajoči tip ne povzroči izjem pri delu z matematičnimi vrednostmi

NaN sledi IEEE 754 s plavajočo vejico standard. IEEE 754 števila s plavajočo vejico lahko predstavljajo pozitivno ali negativno neskončnost in NaN. Te tri vrednosti izhajajo iz izračunov, katerih rezultat je nedefiniran ali ga ni mogoče natančno predstaviti. Java sledi znanim matematičnim dejstvom. 1.0 / 0.0 je neskončnost, druge pa so nedoločene oblike, ki jih Java predstavlja kot NaN (ne število).

primer:

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

Izhod
Infinity -Infinity Infinity 
Ustvari kviz