logo

NaN (ليس رقمًا) في Java

في جافا معنى نان يكون ليس رقما وهو موجود في 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.

مجموعة في السلسلة

مزدوج ن = Double.NaN؛ // استخدام مزدوج

تعويم n = Float.NaN; // استخدام تعويم

كيفية مقارنة قيم NaN؟

NaN غير مرتبة، وهذا يعني أن أي مقارنة مع NaN ستعرض خطأ. إذا قارنا NaN بـ NaN آخر أو كنا نستخدم عوامل علائقية، فستكون النتيجة خاطئة دائمًا. سنناقش الآن كيفية عمل NaN في سيناريوهات مختلفة.

1. العوامل العلائقية وNaN

  • عوامل المقارنة العددية< <= >و>= يُرجع دائمًا خطأ إذا كان أحد المعاملين أو كليهما NaN.
  • يُرجع عامل المساواة == خطأ إذا كان أي من المعاملين 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.isN() الاخوة

يتم استخدام هذه الطريقة للتحقق من أن القيمة 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 النقطة العائمة معيار. إيي 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 
إنشاء اختبار