💎 کلیدواژه NaN
🔆 کلید واژه نان (یا کلا هرجور که میخونیدش😁) مخفف Not a Number میباشد که نشاندهنده مقادیر تعریف نشده در عملیات های اعشاری ریاضی است.
🔰 برای مثال تمامی حالات زیر نتیجه NaN را در بردارد:
👈 تقسیم صفر بر صفر 0.0/0.0
👈 رادیکال یک عدد منفی با فرجه زوج Math.sqrt(-1)
👈 عملیات های مابین بینهایت (بینهایت - بینهایت/بینهایت * صفر)، ∞-∞ / ∞*0
👈 لگاریتم -1 و ... Math.log(-1)
⭕️ جاوا یکسری ثابت NaN برای هر دو نوع داده float و double تعریف کرده است که از طریق Float.NaN و Double.NaN قابل دستیابی هستند.
⚙️ مقایسه NaN ها:
💬 موقع نوشتن متد ها سعی کنید ورودی هارو کنترل کنید و از اونجا که NaN یک مقدار نامعتبره، بهتره چک بشه که مقدار داده ورودی NaN نباشه. ولی مورد اصلی اینجاست که NaN با هیچ مقدار دیگه ای قابل مقایسه نیست و هر مقایسه ای با NaN (حتی NaN== NaN) نتیجه فالس داره. البته بجز مقایسه != که مقدار ترو داره:
NaN == 1 = false
NaN > 1 = false
NaN < 1 = false
NaN != 1 = true
NaN == NaN = false
NaN > NaN = false
NaN < NaN = false
NaN != NaN = true
———
💡 در نتیجه از اونجا که نمیشه هیچ مقداری رو با NaN بوسیله == یا != مقایسه کرد، بهتره NaN رو بوسیله != فقط با خودش مقایسه کنیم! شاید کمی عجیب بنظر برسه ولی جواب میده:
Run! Its NaN
Everything is Fine :)
💡 در واقع x != x (با فرض اینکه x یه داده اعشاری باشه) فقط برای NaN مقدار ترو داره.
💡البته لزومی به تعریف یک تابع جداگانه برای بررسی NaN نیست. بطور مستقیم میتوان از متد های Double.isNaN() و ()Float.isNaN هم استفاده کرد:
خروجی True خواهد داشت.
#NaN #keywords
———
☕️@pieceJava
🔆 کلید واژه نان (یا کلا هرجور که میخونیدش😁) مخفف Not a Number میباشد که نشاندهنده مقادیر تعریف نشده در عملیات های اعشاری ریاضی است.
🔰 برای مثال تمامی حالات زیر نتیجه NaN را در بردارد:
👈 تقسیم صفر بر صفر 0.0/0.0
👈 رادیکال یک عدد منفی با فرجه زوج Math.sqrt(-1)
👈 عملیات های مابین بینهایت (بینهایت - بینهایت/بینهایت * صفر)، ∞-∞ / ∞*0
👈 لگاریتم -1 و ... Math.log(-1)
⭕️ جاوا یکسری ثابت NaN برای هر دو نوع داده float و double تعریف کرده است که از طریق Float.NaN و Double.NaN قابل دستیابی هستند.
⚙️ مقایسه NaN ها:
💬 موقع نوشتن متد ها سعی کنید ورودی هارو کنترل کنید و از اونجا که NaN یک مقدار نامعتبره، بهتره چک بشه که مقدار داده ورودی NaN نباشه. ولی مورد اصلی اینجاست که NaN با هیچ مقدار دیگه ای قابل مقایسه نیست و هر مقایسه ای با NaN (حتی NaN== NaN) نتیجه فالس داره. البته بجز مقایسه != که مقدار ترو داره:
System.out.println("NaN == 1 = " + (NAN == 1));
System.out.println("NaN > 1 = " + (NAN > 1));
System.out.println("NaN < 1 = " + (NAN < 1));
System.out.println("NaN != 1 = " + (NAN != 1));
System.out.println("NaN == NaN = " + (NAN == NAN));
System.out.println("NaN > NaN = " + (NAN > NAN));
System.out.println("NaN < NaN = " + (NAN < NAN));
System.out.println("NaN != NaN = " + (NAN != NAN));
——OUTPUT:NaN == 1 = false
NaN > 1 = false
NaN < 1 = false
NaN != 1 = true
NaN == NaN = false
NaN > NaN = false
NaN < NaN = false
NaN != NaN = true
———
💡 در نتیجه از اونجا که نمیشه هیچ مقداری رو با NaN بوسیله == یا != مقایسه کرد، بهتره NaN رو بوسیله != فقط با خودش مقایسه کنیم! شاید کمی عجیب بنظر برسه ولی جواب میده:
public class Ithooloo {
//Telegram: @pieceJava
public static void main(String[] args) {
checkNaN(Double.NaN);
checkNaN(1.1);
}
public static void checkNaN(double input){
if(input!=input)
System.out.println("Run! Its NaN");
else
System.out.println("Everything is Fine :)");
}
}
—OUTPUT—Run! Its NaN
Everything is Fine :)
💡 در واقع x != x (با فرض اینکه x یه داده اعشاری باشه) فقط برای NaN مقدار ترو داره.
💡البته لزومی به تعریف یک تابع جداگانه برای بررسی NaN نیست. بطور مستقیم میتوان از متد های Double.isNaN() و ()Float.isNaN هم استفاده کرد:
System.out.println(Double.isNaN(0.0/0.0));خروجی True خواهد داشت.
#NaN #keywords
———
☕️@pieceJava
👍5