NaN
در رایانش از نظر نوع داده، NaN (مختصر شدهٔ not a number) به معنی عدد نیست یا ناعدد یک مقدار عددی است که در ممیز شناور نشاندهندهٔ مقدار غیرقابل نمایش، یا بدون تعریف است.
NaNها در سال ۱۹۸۵ توسط استاندارد IEEE ۷۵۴ همراه با تعریف بینهایت معرفی شد. NaNها به دو نوع NaNهای آرام و NaNهای سیگنالدهی دستهبندی میشوند.
NaNهای آرام برای انتشار خطاهای ناشی از عملیات یا مقادیر نامعتبر مورد استفاده قرار میگیرند، در حالی که NaNهای سیگنالدهی میتواند از ویژگیهای پیشرفته مثل مخلوط کردن عددی و محاسبات نمادین در حساب ممیز شناور پشتیبانی کند. مثلاً ۰/۰ یک بدون تعریف است که به عنوان عدد حقیقی تعیین میشود در نتیجه با NaN نشان داده میشود و ریشه دوم عدد منفی یک عدد موهومی است که به عنوان یک عدد ممیز شناور واقعی نمایش داده نمیشود و با NaN نشان داده میشود. از NaN برا نمایش نبود مقدار در رایانش استفاده میشود.
مقایسه با NaN
یک مقایسه با یک nan همیشه یک نتیجه نامنظم را بازمیگرداند، حتی زمانی که با خودش مقایسه میشود. نتیجهٔ مقایسه بر روی NaN آرام به صورت سیگنالدار یا بدون سیگنال میشود.
در مواردی که منجر به NaN سیگنالدار شود، به عنوان نامعلوم شناخته میشوند ولی تشخیص یکسان بودن یا نبودن x با NaN، یک NaN آرام است و میتوان برای تشخیص اینکه x برابر با NaN هست استفاده شود. دستور isNaN(x) تعریف شدهاست تا اگر x یک NaN باشد عملیات شامل استثنا (exception) نشود.
مقایسه | NaN ≥ x | NaN ≤ x | NaN> x | NaN <x | NaN = x یا NaN == x | NaN ≠ x یا NaN !== x یا NaN <> x |
---|---|---|---|---|---|---|
نتیجه | همیشه False | همیشه False | همیشه False | همیشه False | همیشه False | همیشه True |
عملیاتهایی که NaN تولید میکنند
سه نوع عملیات وجود دارد که میتوانند NaN را بازگردانند:
- عملکردهای دارای یک NaN با یک عملگر
- شکل نامعلوم :
- تقسیم (±۰) / (±۰) و (±∞) / (±∞).
- ضرب (±۰) × (±∞) و (±∞) × (±۰).
- جمع (+∞) + (−∞)، (−∞) + (+∞) و تفریق (+∞) − (+∞) و (−∞) − (−∞).
- به توان رساندن:
- توابعی که تعریف ۰⁰ داشته باشند، 1 و ∞⁰ به عنوان 1.
- تابع powr که همه سه شکل نامشخص را به عنوان عملیات نامعتبر و پس از آن تعریف میکند NaN بازمیگرداند.
- عملیاتی که نتیجهاش عدد مختلط میشود مانند:
- ریشه دوم عدد منفی.
- لگاریتم عدد منفی.
- معکوس سینوس یا کسینوس عددی است که کمتر از ۱- یا بیشتر از ۱ است.
از NaN برای نبود متغیر هم استفاده میشود که در گذشته پیش از استاندارد IEEE برنامهنویسها از اعداد ویژه مانند ۹۹۹۹۹۹۹۹- برای موارد بدون مقدار استفاده میکردند که روش مناسبی برای نمایش دادهها نبود.
تولید NaN لزوماً فقط به دلیل وجود یکی از شرایط فوق نیست و ممکن است گاهی به دلیل رخ دادن شرایط استثنا (exception) در برنامه، ممکن است خروجی NaN باشد.
جستارهای وابسته
منابع
- ↑ David Goldberg. "What Every Computer Scientist Should Know About Floating-Point".
- ↑ "Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture". April 2008. pp. 118–125, 266–267, 334–335.