logo

NaN (geen getal) in Java

Op Java de betekenis van NaN is Geen nummer en het is aanwezig in java.lang.Dubbel En java.lang.Float klassen. Het is een speciale waarde die een ongedefinieerde numerieke waarde vertegenwoordigt. We kunnen NAN tegenkomen in wiskundige berekeningen waarbij het resultaat ongedefinieerd is.

  • Als we proberen de vierkantswortel van een negatief Math.sqrt(-1) te berekenen, wordt NaN geretourneerd omdat de vierkantswortel van een negatief getal niet gedefinieerd is.
  • Als we nul door nul proberen te delen, zal dit ook NaN opleveren.

Voorbeeld:

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

Uitvoer
NaN NaN NaN 

Soms wiskunde heeft geen zin, daarom bestaat NaN. In plaats van fouten te genereren, retourneert Java eenvoudigweg NaN om aan te geven dat er iets mis is.



Hoe NaN creëren?

Met de hulp van Dubbele of Vlot klassen kunnen we een NAN maken.

dubbel n = Dubbel.NaN; // Dubbel gebruiken

zweven n = Zweven.NaN; // Zweven gebruiken

Hoe NaN-waarden vergelijken?

NaN zijn ongeordend, dit betekent dat elke vergelijking met NaN onwaar zal opleveren. Als we NaN vergelijken met een andere NaN of als we relationele operatoren gebruiken, zal het resultaat altijd onwaar zijn. Nu gaan we bespreken hoe NaN in verschillende scenario's werkt.

1. Relationele operators en NaN

  • De numerieke vergelijkingsoperatoren< <= >en >= retourneert altijd false als een of beide operanden NaN zijn.
  • De gelijkheidsoperator == retourneert false als een van de operanden NaN is.
  • De ongelijkheidsoperator != retourneert waar als een van beide operanden NaN is.

Voorbeeld:

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

Uitvoer
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isN() broers

Deze methode wordt gebruikt om te controleren of een waarde NaN is.

Voorbeeld:

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

Uitvoer
NaN = true -Infinity = false 


3. Zwevend type levert geen uitzondering op bij het werken met wiskundige waarden

NaN volgt de IEEE 754 drijvende komma standaard. IEEE 754 Drijvende-kommagetallen kunnen positieve of negatieve oneindigheid en NaN vertegenwoordigen. Deze drie waarden komen voort uit berekeningen waarvan het resultaat niet gedefinieerd is of niet nauwkeurig kan worden weergegeven. Java volgt bekende wiskundige feiten. 1.0 / 0.0 is oneindig, maar de andere zijn onbepaalde vormen die Java vertegenwoordigt als NaN (geen getal).

Voorbeeld:

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

Uitvoer
Infinity -Infinity Infinity 
Quiz maken