KodeGym/Blog Jawa/Acak/NaN ing Jawa
John Squirrels
tingkat
San Francisco

NaN ing Jawa

Diterbitake ing grup
Ing Jawa, "NaN" tegese "Not a Number". Iku dudu jinis pangecualian, nanging nggumunake, jinis data NaN uga minangka nomer. Nanging asring nalika programer anyar ora sengaja, dheweke luwih nggunakake ing petungan. Mula, jinis data sing ora cocog ing Jawa nalika digunakake bebarengan bisa nyebabake kesalahan sing bisa dibuang. Iku uga umum katon sing java.lang.ArithmeticException: / by zerodianggep padha karo NaN. Nanging, Jawa dianggep beda. Cukup bingung? Kanggo pangerten sing lengkap, kita bakal mbedakake kepiye bedane. Ing pungkasan artikel iki, sampeyan bakal sinau babagan kemungkinan operasi sing ora ngasilake nomer (nan), lan sawetara cara sing gampang kanggo nangani.

Apa NaN?

Dadi, apa NaN? "NaN" minangka akeh sing wis guessed, digunakake kanggo makili "Ora Nomer" ing Jawa. Iki minangka nilai floating point khusus kanggo nuduhake overflows lan kesalahan. Iki digawe nalika nomer floating point dipérang nol utawa yen akar kuadrat saka nomer negatif diitung. NaN ing basa Jawa - 1Contone, deleng cuplikan ing ngisor iki.
public class NaN
{
    public static void main(String[]args)
    {
        System.out.println(0.0 / 0.0);	  //zero divided by zero
        System.out.println(Math.sqrt(-1)); //take sqrt of negative number
        System.out.println(10.0 % 0);      //taking mod by zero
    }
}
Output
NaN
NaN
NaN
Ing cuplikan ing ndhuwur, sampeyan bisa mirsani yen NaN diprodhuksi minangka asil saka 3 operasi prasaja:
  • Dibagi float / doublenol karo nol.
  • Njupuk under-root saka nomer negatif (Math.sqrt(-x)). Ing matématika, njupuk akar kuadrat saka nomer negatif ngasilake nomer imajiner . Kasus iki ditangani kanthi mbalekake NaN ing basa Jawa.
  • Njupuk mod saka nomer karo nul, bakal bali seko sawise dibagi Nilai dening nul. Dadi, NaN bali.

Kepiye NaN Beda karo Infinity Positif lan Negatif?

Miturut spesifikasi IEEE 754, ana telung nilai floating-point & dobel khusus kanggo nangani kasus wates:
  • Positif tanpa wates
  • Negatif tanpa wates
  • NaN
Asil mbagi angka positif kanthi 0 yaiku tanpa wates positif. Kajaba iku, asil tanpa wates negatif minangka asil pamisah nomer negatif karo nol. Wigati dimangerteni manawa kabeh nilai floating point uga ditrapake kanggo jinis data kaping pindho. Presisi winates saka floats kadhangkala ora cukup. Nanging, kita bakal weruh cara kerja NaN kanggo ngambang lan kaping pindho ing bagean sabanjure.

Apa Metode NaN()?

isNaN()iku salah siji saka cara dhasar ing Jawa kanggo mriksa apa iku nilai NaN utawa ora. Nalika kita rembugan telung kasus ndhuwur, iku wektu kanggo nyoba carane isNaN () cara mbedakake antarane + infinity , -infinity lan nilai NaN.
public class isNaN
{ public static void main(String[]args)
  {
    Double posInfinity = +2.0 / 0.0;
    Double negInfinity = -3.5 / 0.0;
    Double nanVal = 50 % 0.0;


    System.out.println ("+" + posInfinity + ".IsNaN() = " + posInfinity.isNaN());
    System.out.println ( negInfinity + ".IsNaN() = " + negInfinity.isNaN());
    System.out.println ( nanVal +  ".IsNaN() = " + nanVal.isNaN());
  }
}
Output
+Infinity.IsNaN() = false
-Infinity.IsNaN() = false
NaN.IsNaN() = true

Kepiye Mbandhingake Nilai NaN?

Saben nilai NaN dianggep béda. Iki tegese, ora ana siji NaN sing padha karo NaN liyane. Miturut asas iki, Yen mbandhingaké siji nilai liyane asil tansah negatif. Wiwit, NaN unordered, supaya comparison numerik nglibatno malah siji NaN bali palsu. Jawa nyedhiyakake Float.NaN lan Double.NaN kanggo lapangan pancet ing loro kelas kanggo nindakake bandingaken. Kita bisa mbedakake iki ing rong skenario sing kapisah:
  • Bener: Mung ing kasus In-equality (!=)
  • Palsu: Kanggo kabeh operan perbandingan (==, <=, >=, <, >)
Iki minangka conto sing bisa digunakake kanggo sampeyan:
public class ComparingNaN
{ public static void main(String[] args)
  {
    // Comparing NaN values for Float constants
    System.out.println (Float.NaN != Float.NaN); // true
    System.out.println (Float.NaN == Float.NaN); // false
    System.out.println (Float.NaN < Float.NaN);  // false
    System.out.println (Float.NaN > Float.NaN);  // false
    System.out.println (Float.NaN <= Float.NaN); // false
    System.out.println (Float.NaN >= Float.NaN); // false

    // Comparing NaN values for Float constants
    System.out.println (Double.NaN != Double.NaN); // true
    System.out.println (Double.NaN == Double.NaN); // false
    System.out.println (Double.NaN < Double.NaN);  // false
    System.out.println (Double.NaN > Double.NaN);  // false
    System.out.println (Double.NaN <= Double.NaN); // false
    System.out.println (Double.NaN >= Double.NaN); // false
  }
}

Kepiye Cara Nggawe Nilai NaN?

Sadurunge mbungkus, ayo goleki sawetara conto umum kanggo entuk Ora Nomer (nan).
public class GenerateNaNValues {
  static final float ZERO = 0;
  public static void main (String[]args)
  {
    System.out.println("ZERO / ZERO = " + (ZERO / ZERO));
    System.out.println("+INFINITY - INFINITY = " +
    (Float.POSITIVE_INFINITY + Float.NEGATIVE_INFINITY));
    System.out.println("-INFINITY * ZERO = " + (Float.NEGATIVE_INFINITY * ZERO));
    System.out.println("+INFINITY * ZERO = " + (Float.POSITIVE_INFINITY * ZERO));
    System.out.println("log10(-10) = " +  Math.log(-10));
    System.out.println("√-10 = " + Math.sqrt(-10));
    System.out.println("NaN + 10 = " + (Float.NaN + 10));
    System.out.println("NaN - 10 = " + (Float.NaN - 10));
    System.out.println("NaN * 10 = " + (Float.NaN * 10));
    System.out.println("NaN / 10 = " + (Float.NaN / 10));
    System.out.println("NaN + NaN = " + (Float.NaN + Float.NaN));
    System.out.println("NaN - NaN = " + (Float.NaN - Float.NaN));
    System.out.println("NaN * NaN = " + (Float.NaN * Float.NaN));
    System.out.println("NaN / NaN = " + (Float.NaN / Float.NaN));
  }
}
Output:
ZERO / ZERO = NaN
+INFINITY - INFINITY = NaN
-INFINITY * ZERO = NaN
+INFINITY * ZERO = NaN
log10(-10) = NaN
√-10 = NaN
NaN + 10 = NaN
NaN - 10 = NaN
NaN * 10 = NaN
NaN / 10 = NaN
NaN + NaN = NaN
NaN - NaN = NaN
NaN * NaN = NaN
NaN / NaN = NaN

Kesimpulan

Sawise ndeleng akeh operasi sing ngasilake NaN, sampeyan kudu ngerti saiki. Sampeyan bisa uga teka-teki ing wiwitan, nanging ora ana sing rumit babagan iki. Kanthi ngembangaken pakulinan sethitik mriksa yen nilai ora NaN ing pindho / petungan titik ngambang bisa nylametaké panjenengan saka akèh alangan. Malah yen sampeyan lali iki pisanan, iku babar blas nggoleki. Sampeyan bisa tansah takon artikel iki kanggo ngatasi masalah cilik. Nggawe kompilasi, kode-gratis kesalahan bebarengan teka sawise taun pengalaman. Dadi ayo dadi reged kode, lan mbangun sing apik!
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar