בג'אווה המשמעות של 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צור חידון