logo

NaN (לא מספר) ב-Java

בג'אווה המשמעות של NaN הוא לא מספר והוא קיים ב java.lang.Double ו java.lang.Float שיעורים. זהו ערך מיוחד המייצג ערך מספרי לא מוגדר. אנו עלולים להיתקל ב-NAN בחישובים מתמטיים שבהם התוצאה אינה מוגדרת.

  • אם ננסה לחשב את השורש הריבועי של Math.sqrt(-1) שלילי הוא יחזיר NaN כי השורש הריבועי של מספר שלילי אינו מוגדר.
  • אם ננסה לחלק אפס באפס זה יחזיר גם NaN.

דוּגמָה:

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

תְפוּקָה
NaN NaN NaN 

לִפְעָמִים מָתֵימָטִיקָה לא הגיוני וזו הסיבה ש-NaN קיים. במקום לזרוק שגיאות Java פשוט מחזירה NaN כדי להראות שמשהו לא בסדר.



איך ליצור NaN?

בעזרת לְהַכפִּיל אוֹ לָצוּף כיתות נוכל ליצור NAN.

כפול n = Double.NaN; // באמצעות Double

float n = Float.NaN; // באמצעות Float

כיצד להשוות ערכי NaN?

NaN אינם מסודרים זה אומר שכל השוואה עם NaN תחזיר שקר. אם נשווה את NaN ל-NaN אחר או שאנו משתמשים באופרטורים יחסיים, התוצאה תמיד תהיה שקר. עכשיו אנחנו הולכים לדון איך NaN עובד בסצנות שונות.

1. מפעילי קשרים ו-NaN

  • אופרטורי ההשוואה המספרית< <= >ו->= תמיד מחזירים false אם אחד האופרנדים או שניהם הם NaN.
  • אופרטור השוויון == מחזיר false אם אחד מהאופרנדים הוא NaN.
  • אופרטור האי-שוויון != מחזיר אמת אם אחד מהאופרנדים הוא NaN.

דוּגמָה:

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

תְפוּקָה
Check if equal :false Check if unequal: true Check if equal: false Check if unequal: true false false 


2. isnN() אחים

שיטה זו משמשת כדי לבדוק אם הערך הוא NaN.

דוּגמָה:

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

תְפוּקָה
NaN = true -Infinity = false 


3. סוג צף אינו מייצר חריגות בזמן פעולה עם ערכים מתמטיים

NaN עוקב אחר ה IEEE 754 נקודה צפה תֶקֶן. IEEE 754 מספרי נקודה צפה יכולים לייצג אינסוף חיובי או שלילי ו- NaN. שלושת הערכים הללו נובעים מחישובים שתוצאתם אינה מוגדרת או שאינה ניתנת לייצוג מדויק. Java עוקבת אחר עובדות מתמטיות ידועות. 1.0 / 0.0 הוא אינסוף אבל האחרים הם צורות בלתי מוגדרות ש-Java מייצגת כ-NaN (לא מספר).

דוּגמָה:

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

תְפוּקָה
Infinity -Infinity Infinity 
צור חידון