logo

NaN (ei numero) Javassa

Javalla merkitys NaN on Ei numero ja se on läsnä java.lang.Double ja java.lang.Float luokat. Se on erityinen arvo, joka edustaa määrittelemätöntä numeerista arvoa. Saatamme kohdata NAN:ia matemaattisissa laskelmissa, joissa tulos on määrittelemätön.

  • Jos yritämme laskea negatiivisen Math.sqrt(-1) neliöjuuren, se palauttaa NaN, koska negatiivisen luvun neliöjuuri on määrittelemätön.
  • Jos yritämme jakaa nollan nollalla, se palauttaa myös NaN:n.

Esimerkki:

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

Lähtö
NaN NaN NaN 

Joskus matematiikka ei ole järkevää, siksi NaN on olemassa. Virheiden heittämisen sijaan Java yksinkertaisesti palauttaa NaN:n osoittamaan, että jotain on vialla.



ohjelmointimallit java

Kuinka luoda NaN?

Avulla Kaksinkertainen tai Kellua luokkiin voimme luoda NAN:in.

double n = Double.NaN; // Double

float n = Float.NaN; // Floatin käyttö

Kuinka vertailla NaN-arvoja?

NaN ovat järjestämättömiä, mikä tarkoittaa, että mikä tahansa vertailu NaN:iin palauttaa epätosi. Jos vertaamme NaN:ää toiseen NaN:ään tai käytämme relaatiooperaattoreita, tulos on aina epätosi. Nyt keskustelemme siitä, miten NaN toimii eri tilanteissa.

1. Relaatiooperaattorit ja NaN

  • Numeeriset vertailuoperaattorit< <= >ja >= palauttavat aina epätosi, jos jompikumpi tai molemmat operandit ovat NaN.
  • Tasa-arvooperaattori == palauttaa arvon false, jos jompikumpi operandi on NaN.
  • Epäyhtälöoperaattori != palauttaa tosi, jos jompikumpi operandi on NaN.

Esimerkki:

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

Lähtö
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isnN() Brothers

Tätä menetelmää käytetään tarkistamaan, onko arvo NaN.

Esimerkki:

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

Lähtö
NaN = true -Infinity = false 


3. Kelluva tyyppi ei tuota poikkeuksia käytettäessä matemaattisia arvoja

NaN seuraa IEEE 754 liukuluku standardi. IEEE 754 liukulukuluvut voivat edustaa positiivista tai negatiivista ääretöntä ja NaN. Nämä kolme arvoa syntyvät laskelmista, joiden tulos on määrittelemätön tai sitä ei voida esittää tarkasti. Java seuraa tunnettuja matemaattisia faktoja. 1.0 / 0.0 on ääretön, mutta muut ovat määrittelemättömiä muotoja, joita Java edustaa NaN:nä (ei numerona).

Esimerkki:

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

Lähtö
Infinity -Infinity Infinity 
Luo tietokilpailu