జావాలో, “NaN” అంటే “సంఖ్య కాదు”. ఇది ఒక రకమైన మినహాయింపు కాదు, ఆశ్చర్యకరంగా, NaN యొక్క డేటాటైప్ కూడా ఒక సంఖ్య. కానీ తరచుగా అనుభవం లేని ప్రోగ్రామర్లు అనుకోకుండా దానిని పొందినప్పుడు, వారు దానిని వారి గణనలలో ఉపయోగించుకుంటారు. అందువల్ల, జావాలోని అననుకూల డేటా రకాలు కలిసి ఉపయోగించినప్పుడు విసిరివేయదగిన లోపానికి కారణం కావచ్చు. ఇది కూడా సాధారణంగా
ఉదాహరణకు, కింది స్నిప్పెట్ను చూడండి.
java.lang.ArithmeticException: / by zero
NaN వలె పరిగణించబడుతుంది. అయితే, జావా వారిద్దరినీ వేర్వేరుగా చూస్తుంది. తగినంత గందరగోళంగా ఉందా? మీ సమగ్ర అవగాహన కోసం ఇవి ఒకదానికొకటి ఎలా భిన్నంగా ఉన్నాయో మేము విడదీస్తాము. ఈ కథనం ముగిసే సమయానికి, మీరు సంఖ్య (నాన్)ని ఉత్పత్తి చేసే సాధ్యం కార్యకలాపాల గురించి మరియు దానిని నిర్వహించడానికి కొన్ని సులభమైన మార్గాల గురించి తెలుసుకుంటారు.
NaN అంటే ఏమిటి?
కాబట్టి, NaN అంటే ఏమిటి? మీలో చాలామంది ఊహించినట్లుగా "NaN" జావాలో "సంఖ్య కాదు"ని సూచించడానికి ఉపయోగించబడుతుంది. ఇది ఓవర్ఫ్లోలు మరియు ఎర్రర్లను సూచించడానికి ఒక ప్రత్యేక ఫ్లోటింగ్ పాయింట్ విలువ. ఫ్లోటింగ్ పాయింట్ సంఖ్యను సున్నాతో విభజించినప్పుడు లేదా ప్రతికూల సంఖ్య యొక్క వర్గమూలం గణించబడినప్పుడు ఇది ఉత్పత్తి అవుతుంది.
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
}
}
అవుట్పుట్
NaN
NaN
NaN
ఎగువ స్నిప్పెట్లో, 3 సాధారణ కార్యకలాపాల ఫలితంగా NaN ఉత్పత్తి చేయబడిందని మీరు గమనించవచ్చు:
float / double
సున్నాని సున్నాతో భాగించడం .- ప్రతికూల సంఖ్య (Math.sqrt(-x)) యొక్క అండర్-రూట్ తీసుకోవడం. గణితంలో, ప్రతికూల సంఖ్య యొక్క వర్గమూలాన్ని తీసుకుంటే ఊహాత్మక సంఖ్య వస్తుంది . జావాలో NaNని తిరిగి ఇవ్వడం ద్వారా ఈ కేసు పరిష్కరించబడుతుంది.
- సున్నాతో సంఖ్య యొక్క మోడ్ని తీసుకుంటే, విలువను సున్నాతో భాగించిన తర్వాత మిగిలిన మొత్తాన్ని తిరిగి అందిస్తుంది. అందువల్ల, NaN తిరిగి ఇవ్వబడుతుంది.
NaN సానుకూల మరియు ప్రతికూల అనంతం నుండి ఎలా భిన్నంగా ఉంటుంది?
IEEE 754 స్పెసిఫికేషన్ ప్రకారం, సరిహద్దు కేసులను నిర్వహించడానికి మూడు ప్రత్యేక ఫ్లోటింగ్ పాయింట్ & డబుల్ విలువలు ఉన్నాయి:- సానుకూల అనంతం
- ప్రతికూల అనంతం
- NaN
నాన్ () పద్ధతి అంటే ఏమిటి?
isNaN()
ఇది NaN విలువ కాదా అని తనిఖీ చేయడానికి జావాలోని ప్రాథమిక పద్ధతుల్లో ఒకటి. మేము పైన మూడు కేసులను చర్చించినట్లుగా, isNaN() పద్ధతి +ఇన్ఫినిటీ , -ఇన్ఫినిటీ మరియు 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());
}
}
అవుట్పుట్
+Infinity.IsNaN() = false
-Infinity.IsNaN() = false
NaN.IsNaN() = true
NaN విలువలను ఎలా పోల్చాలి?
ప్రతి NaN విలువ విభిన్నంగా పరిగణించబడుతుంది. దీని అర్థం, ఒక్క NaN కూడా ఏ ఇతర NaNతో సమానం కాదు. ఈ సూత్రం ప్రకారం, మీరు ఒక విలువను మరొక దానితో పోల్చినట్లయితే, ఫలితం ఎల్లప్పుడూ ప్రతికూలంగా ఉంటుంది. NaN క్రమబద్ధీకరించబడలేదు కాబట్టి, ఒక NaNతో కూడిన సంఖ్యా పోలిక తప్పును అందిస్తుంది. జావా పోలికలను నిర్వహించడానికి రెండు తరగతులలో స్థిరమైన ఫీల్డ్ల కోసం Float.NaN మరియు Double.NaNలను అందిస్తుంది. మేము వీటిని రెండు వేర్వేరు దృశ్యాలలో వేరు చేయవచ్చు:- నిజం: సమానత్వం విషయంలో మాత్రమే (!=)
- తప్పు: అన్ని పోలిక ఆపరాండ్ల కోసం (==, <=, >=, <, >)
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
}
}
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));
}
}
అవుట్పుట్:
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
GO TO FULL VERSION