عدد دون المستوى الطبيعي

في علوم الحاسوب ، تُعرف الأعداد دون الطبيعية بأنها مجموعة فرعية من الأعداد غير الطبيعية (تُسمى أحيانًا بالأعداد اللاطبيعية ) التي تملأ فجوة التدفق السفلي حول الصفر في حسابات الفاصلة العائمة . أي عدد غير صفري ذي قيمة مطلقة أصغر من أصغر عدد طبيعي موجب يُعتبر عددًا دون طبيعي ، بينما يُمكن أن يُشير مصطلح "لا طبيعي" أيضًا إلى الأعداد التي تقع خارج هذا النطاق.
مصطلحات
في بعض الوثائق القديمة (وخاصةً وثائق المعايير مثل الإصدار الأولي لمعيار IEEE 754 (1985) وأول إصدار قياسي للغة C (1989) )، يُستخدم مصطلح "غير طبيعي" للإشارة حصراً إلى الأعداد دون الطبيعية. ولا يزال هذا الاستخدام سائداً في العديد من وثائق المعايير، لا سيما عند مناقشة الأجهزة غير القادرة على تمثيل أي أعداد غير طبيعية أخرى، ولكن النقاش هنا يستخدم مصطلح "دون الطبيعية" تماشياً مع مراجعة IEEE 754 لعام 2008. وفي النقاشات غير الرسمية، غالباً ما يُستخدم مصطلحا " دون الطبيعية " و "غير الطبيعي " بشكل متبادل، ويعود ذلك جزئياً إلى عدم وجود أعداد ثنائية غير طبيعية في معيار IEEE خارج نطاق الأعداد دون الطبيعية.
يُستخدم مصطلح "العدد" هنا بشكل فضفاض لوصف سلسلة محددة من الأرقام، وليس كمفهوم رياضي مجرد؛ راجع قسم "الحسابات ذات الفاصلة العائمة" للاطلاع على تفاصيل العلاقة بين الأعداد الحقيقية وتمثيلاتها في نظام الفاصلة العائمة. ويمكن استخدام مصطلح "التمثيل" بدلاً من "العدد" عند الحاجة إلى توضيح المعنى.
تعريف
يمكن تقريب الأعداد الحقيقية الرياضية باستخدام تمثيلات متعددة للفاصلة العائمة. يُعرَّف أحد هذه التمثيلات بأنه طبيعي ، بينما تُعرَّف التمثيلات الأخرى بأنها دون الطبيعية ، أو غير الطبيعية ، أو غير الطبيعية، وذلك بحسب علاقتها بالطبيعية .
في قيمة الفاصلة العائمة العادية ، لا توجد أصفار بادئة في الجزء الدال (المعروف أيضًا باسم المانتيسا)؛ بل تُزال الأصفار البادئة عن طريق تعديل الأس (على سبيل المثال، يُكتب العدد 0.0123 على النحو التالي:1.23 × 10⁻² ). في المقابل، تحتوي قيمة الفاصلة العائمة غير المُعَيَّرة على جزء دال يبدأ برقم صفر. ومن بين هذه القيم، تمثل الأعداد غير الطبيعية قيمًا لو تم تطبيعها لكانت أسسها أقل من أصغر أس قابل للتمثيل (حيث يكون نطاق الأس محدودًا) .
الجزء الدال (أو المانتسا) في عدد الفاصلة العائمة وفقًا لمعيار IEEE هو الجزء الذي يمثل الأرقام المعنوية . بالنسبة لعدد موجب مُعَيَّر، يمكن تمثيله على النحو التالي: m₀ . m₁ m₂ m₃ ... mₚ⁻² mₚ⁻¹ ( حيث يمثل m رقمًا معنويًا، و p هي الدقة) مع m₀ غير الصفرية . لاحظ أنه في النظام الثنائي ، يكون الرقم الثنائي الأول دائمًا 1. في العدد شبه الطبيعي، نظرًا لأن الأس يكون في أصغر قيمة ممكنة، فإن الصفر هو الرقم المعنوي الأول (0. m₁ m₂ m₃ ... mₚ⁻² mₚ⁻¹ ) ، مما يسمح بتمثيل أعداد أقرب إلى الصفر من أصغر عدد طبيعي . يمكن اعتبار عدد الفاصلة العائمة شبه طبيعي عندما يكون أسه هو أصغر قيمة ممكنة .
بملء فجوة التدفق السفلي بهذه الطريقة، تُفقد بعض الأرقام المعنوية، ولكن ليس بنفس سرعة فقدانها عند استخدام أسلوب " المسح إلى الصفر عند التدفق السفلي " (حيث تُحذف جميع الأرقام المعنوية عند الوصول إلى التدفق السفلي). ولذلك، يُطلق على إنتاج عدد دون المستوى الطبيعي أحيانًا اسم " التدفق السفلي التدريجي" لأنه يسمح للحساب بفقدان الدقة تدريجيًا عندما تكون النتيجة صغيرة.
يدعم معيار IEEE 754-2008 الأعداد غير الطبيعية في كلٍ من النظامين الثنائي والعشري. في نظام التبادل الثنائي، تُشفّر الأعداد غير الطبيعية بمعامل أسّي متحيز يساوي صفرًا، ولكن تُفسّر بقيمة أصغر معامل أسّي مسموح به، وهو أكبر بواحد (أي كما لو كانت مُشفّرة بالرقم 1). أما في نظام التبادل العشري، فلا تتطلب هذه الأعداد أي تشفير خاص لأن النظام يدعم الأعداد غير الطبيعية مباشرةً.
رياضياً، تتوزع الأعداد العشرية المعيارية ذات الإشارة المعينة بشكل لوغاريتمي تقريباً ، ولذلك لا يمكن لأي عدد عشري معياري ذي حجم محدود أن يتضمن الصفر . أما الأعداد العشرية شبه المعيارية فهي مجموعة من القيم موزعة خطياً، وتغطي الفجوة بين الأعداد العشرية المعيارية السالبة والموجبة.
خلفية
تضمن الأعداد غير الطبيعية عدم حدوث تجاوز في عمليات جمع وطرح الأعداد العشرية؛ إذ يكون الفرق بين عددين عشريين متجاورين دائمًا غير صفري وقابل للتمثيل. وبدون التجاوز التدريجي، قد يحدث تجاوز في عملية الطرح a − b ، مما ينتج عنه صفر حتى وإن لم تكن القيمتان متساويتين. وهذا بدوره قد يؤدي إلى أخطاء القسمة على صفر ، وهي أخطاء لا يمكن أن تحدث عند استخدام التجاوز التدريجي. [ 1 ]
تم تطبيق الأعداد غير الطبيعية في معالج Intel 8087 أثناء كتابة معيار IEEE 754. وكانت هذه الأعداد، بلا شك، الميزة الأكثر إثارة للجدل في اقتراح تنسيق KCS الذي تم اعتماده لاحقًا [ 2 ] ، إلا أن هذا التطبيق أثبت إمكانية دعم الأعداد غير الطبيعية عمليًا. بعض تطبيقات وحدات الفاصلة العائمة لا تدعم الأعداد غير الطبيعية مباشرةً في مكوناتها المادية، بل تعتمد على نوع من الدعم البرمجي. ورغم أن هذا قد يكون غير مرئي للمستخدم، إلا أنه قد يؤدي إلى إبطاء العمليات الحسابية التي تُنتج أو تستهلك أعدادًا غير طبيعية بشكل ملحوظ مقارنةً بالعمليات الحسابية المماثلة التي تستخدم الأعداد الطبيعية.
معهد مهندسي الكهرباء والإلكترونيات (IEEE)
في تنسيقات الفاصلة العائمة الثنائية IEEE ، تُمثَّل الأعداد شبه الطبيعية بحقل أُسِّي صفري وحقل دلالي غير صفري. [ 3 ] في هذا المعيار، يسمح وجود الأعداد شبه الطبيعية بتمثيل بعض القيم غير الصفرية بقيمة مطلقة منللـ binary32 ، ومنللـ binary64 .
لا توجد أرقام غير طبيعية أخرى في تنسيقات الفاصلة العائمة الثنائية IEEE، ولكنها موجودة في بعض التنسيقات الأخرى، بما في ذلك تنسيقات الفاصلة العائمة العشرية IEEE.
مشاكل الأداء
تتعامل بعض الأنظمة مع القيم غير الطبيعية في مكوناتها المادية، بنفس طريقة تعاملها مع القيم الطبيعية. بينما تترك أنظمة أخرى معالجة القيم غير الطبيعية لبرمجيات النظام ("المساعدة")، حيث تقتصر على معالجة القيم الطبيعية والصفر في المكونات المادية. وتؤدي معالجة القيم غير الطبيعية في البرمجيات دائمًا إلى انخفاض ملحوظ في الأداء. وعندما تُحسب القيم غير الطبيعية بالكامل في المكونات المادية، توجد تقنيات تنفيذ تسمح بمعالجتها بسرعات مماثلة للأعداد الطبيعية. [ 4 ] ومع ذلك، تبقى سرعة الحساب منخفضة بشكل ملحوظ في العديد من معالجات x86 الحديثة؛ ففي الحالات القصوى، قد تستغرق التعليمات التي تتضمن معاملات غير طبيعية ما يصل إلى 100 دورة ساعة إضافية، مما يؤدي إلى تشغيل أسرع التعليمات ببطء يصل إلى ستة أضعاف. [ 5 ] [ 6 ]
قد يُشكل هذا التفاوت في السرعة خطرًا أمنيًا. فقد أظهرت الأبحاث أنه يوفر قناة جانبية زمنية تسمح لموقع ويب خبيث باستخراج محتوى صفحة من موقع آخر داخل متصفح الويب. [ 7 ]
تتطلب بعض التطبيقات تضمين تعليمات برمجية لتجنب القيم غير الطبيعية، إما للحفاظ على الدقة، أو لتجنب انخفاض الأداء في بعض المعالجات. على سبيل المثال، في تطبيقات معالجة الصوت ، تمثل القيم غير الطبيعية عادةً إشارةً خافتةً للغاية خارج نطاق السمع البشري. لهذا السبب، يتمثل أحد الإجراءات الشائعة لتجنب القيم غير الطبيعية في المعالجات التي قد تؤدي إلى انخفاض الأداء في قطع الإشارة إلى الصفر بمجرد وصولها إلى مستويات غير طبيعية، أو مزجها بإشارة ضوضاء خافتة للغاية. [ 8 ] تشمل الطرق الأخرى لمنع القيم غير الطبيعية إضافة إزاحة تيار مستمر ، وتكميم الأرقام، وإضافة إشارة نايكويست، وما إلى ذلك. [ 9 ] منذ إضافة امتداد معالج SSE2 ، وفرت إنتل هذه الوظيفة في وحدة المعالجة المركزية، والتي تقوم بتقريب القيم غير الطبيعية إلى الصفر. [ 10 ]
تعطيل الأعداد العشرية غير الطبيعية على مستوى الكود
تقنية Intel SSE
تُفعّل مُجمّعات لغة C و Fortran من Intel علامتي DAZ(denormals-are-zero) و FTZ(flush-to-zero) لتقنية SSE افتراضيًا لمستويات التحسين الأعلى من -O011. [ 11 ] تتمثل وظيفة DAZ11 في التعامل مع وسائط الإدخال غير الطبيعية لعمليات الفاصلة العائمة على أنها أصفار، بينما تتمثل وظيفة 21 FTZفي إرجاع الصفر بدلًا من عدد عشري غير طبيعي للعمليات التي قد تُنتج عددًا عشريًا غير طبيعي، حتى لو لم تكن وسائط الإدخال نفسها غير طبيعية. تختلف الحالات الافتراضية في Clang و GCC باختلاف النظام الأساسي ومستوى التحسين.
فيما يلي طريقة غير متوافقة مع معيار C99 لتفعيل DAZالعلامات على الأجهزة التي تدعم SSE، ولكنها غير مدعومة على نطاق واسع. ومن المعروف أنها تعمل على نظام التشغيل Mac OS X منذ عام 2006 على الأقل. [ 12 ]FTZ
#include <fenv.h> #pragma STDC FENV_ACCESS ON // يُفعّل DAZ وFTZ، مُلغيًا إعدادات CSR الأخرى. fesetenv ( FE_DFL_DISABLE_SSE_DENORMS_ENV ); // fesetenv(FE_DFL_ENV) // يُعطّل كليهما، مُلغيًا إعدادات CSR الأخرى.بالنسبة لمنصات x86-SSE الأخرى التي لم تقم مكتبة C بتنفيذ هذا العلم بعد، قد ينجح ما يلي: [ 13 ]
#include <xmmintrin.h> _mm_setcsr ( _mm_getcsr () | 0x0040 ); // DAZ _mm_setcsr ( _mm_getcsr () | 0x8000 ); // FTZ _mm_setcsr ( _mm_getcsr () | 0x8040 ); // كلاهما _mm_setcsr ( _mm_getcsr () & ~ 0x8040 ); // تعطيل كليهماتُغلّف وحدات الماكرو _MM_SET_DENORMALS_ZERO_MODEو _MM_SET_FLUSH_ZERO_MODEواجهةً أكثر قابلية للقراءة للكود أعلاه. [ 14 ]
// لتفعيل DAZ #include <pmmintrin.h> _MM_SET_DENORMALS_ZERO_MODE ( _MM_DENORMALS_ZERO_ON ); // لتفعيل FTZ #include <xmmintrin.h> _MM_SET_FLUSH_ZERO_MODE ( _MM_FLUSH_ZERO_ON );معظم المترجمات توفر الماكرو السابق افتراضيًا، وإلا يمكن استخدام مقتطف الشفرة التالي (تعريف FTZ مماثل):
#define _MM_DENORMALS_ZERO_MASK 0x0040 #define _MM_DENORMALS_ZERO_ON 0x0040 #define _MM_DENORMALS_ZERO_OFF 0x0000#define _MM_SET_DENORMALS_ZERO_MODE(mode) _mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (mode)) #define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)يتم فرض سلوك إلغاء التطبيع الافتراضي بواسطة ABI ، وبالتالي يجب على البرامج ذات السلوك الجيد حفظ واستعادة وضع إلغاء التطبيع قبل العودة إلى المتصل أو استدعاء التعليمات البرمجية في المكتبات الأخرى.
ذراع
في معمارية ARM، تعتمد معالجة الأعداد العشرية غير الطبيعية على تكوين وحدة الفاصلة العائمة، حيث تدعم بعض التطبيقات التدفق السفلي التدريجي في الأجهزة بينما تعتمد تطبيقات أخرى على سلوك التفريغ إلى الصفر افتراضيًا لأسباب تتعلق بالأداء. [ 15 ]
تستخدم وحدة معالجة الفاصلة العائمة (FPU) في معمارية AArch32 NEON (SIMD) دائمًا وضع التصفير التلقائي، [ 16 ] وهو نفس الوضع FTZ + DAZ. أما بالنسبة لوحدة معالجة الفاصلة العائمة العددية (scalar FPU) وفي معمارية AArch64 SIMD، فإن سلوك التصفير التلقائي اختياري ويتم التحكم فيه بواسطة FZبت سجل التحكم - FPSCR في معمارية Arm32 وFPCR في معمارية AArch64. [ 17 ]
إحدى طرق القيام بذلك هي:
#if defined(__arm64__) || defined(__aarch64__) uint64_t fpcr ; asm ( "mrs %0, fpcr" : "=r" ( fpcr )); // تحميل سجل FPCR asm ( "msr fpcr, %0" :: "r" ( fpcr | ( 1 << 24 ) )); // ضبط البت 24 (FTZ) إلى 1 #endifتحتوي بعض معالجات ARM على معالجة الأجهزة للحالات غير الطبيعية.
انظر أيضاً
ملحوظات
- ↑ لا تحتوي الأعداد العشرية الثنائية IEEE إلا على أعداد غير طبيعية، لأن جميع الأعداد التي ليست غير طبيعية تحتوي على 1 ضمنيًافي الجزء الكسري، مما يضمن أنها طبيعية . جميع الترميزات التي تستخدم أكثر من بت واحد لكل رقم سيكون لها بعض الأرقام غير الطبيعية خارج أي نطاق دون الطبيعي؛ على سبيل المثال، جميع ترميزات الفاصلة العائمة العشرية IEEE تحتوي على 4 بتات لكل رقم، مما يسمح بأن يكون الرقم الأول 0 لأي قيمة أسية.
مراجع
- ↑ ويليام كاهان. "محضر اجتماع IEEE 754R، 2002" . مؤرشف من الأصل في 15 أكتوبر 2016. تم الاطلاع عليه في 29 ديسمبر 2013 .
- ↑ سيفرانس، تشارلز (20 فبراير 1998). "مقابلة مع رائد الحساب النقطي العائم" . المُحاوَر: ويليام كاهان . جامعة كاليفورنيا، بيركلي.
- ↑ "الأعداد غير المعيارية" . كالدرا إنترناشونال . تم الاطلاع عليه بتاريخ 11 أكتوبر 2023 .(لاحظ أن وثائق XenuOS تستخدم مصطلح denormal بينما يستخدم معيار IEEE 754 مصطلح subnormal .)
- ↑ شوارتز، إي إم؛ شموكيلر، إم؛ سون داو ترونغ (يوليو 2005). "تطبيقات وحدة الفاصلة العائمة مع الأعداد غير المُعَيَّرة" (ملف PDF) . معاملات IEEE في الحوسبة . 54 (7): 825-836 . doi : 10.1109/TC.2005.118 . S2CID 26470540 .
- ↑ دولي، إسحاق؛ كالي، لاكشميكانت (12 سبتمبر 2006). "قياس التداخل الناتج عن قيم الفاصلة العائمة دون المستوى الطبيعي" (ملف PDF) . تم الاطلاع عليه بتاريخ 30 نوفمبر 2010 .
- ↑ فوغ، أغنر. "جداول التعليمات: قوائم زمن استجابة التعليمات، ومعدلات النقل، وتفاصيل العمليات الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا" (ملف PDF) . تم الاطلاع عليه بتاريخ 25 يناير 2011 .
- ↑ أندريسكو، مارك؛ كولبرينر، ديفيد؛ مويري، كيتون؛ جالا، رانجيت؛ ليرنر، سورين؛ شاشام، هوفاف. "حول الأعداد العشرية ذات الفاصلة العائمة دون المستوى الطبيعي والتوقيت غير الطبيعي" (ملف PDF) . تم الاطلاع عليه بتاريخ 5 أكتوبر 2015 .
- ↑ سيريس، جون (16 أبريل 2002). "انخفاض مستوى الإشارة في معالج بنتيوم 4: ارتفاعات مفاجئة في استخدام وحدة المعالجة المركزية في تطبيقات الصوت" . مؤرشف من الأصل في 25 فبراير 2012. تم الاطلاع عليه في 29 أبريل 2015 .
- ↑ دي سوراس، لوران (19 أبريل 2005). "الأعداد غير الطبيعية في تطبيقات معالجة الإشارات ذات الفاصلة العائمة" (PDF) .
- ↑ كيسي، شون (16 أكتوبر 2008). "مساعدات الفاصلة العائمة x87 وSSE في IA-32: Flush-To-Zero (FTZ) وDenormals-Are-Zero (DAZ)" . تم الاطلاع عليه في 3 سبتمبر 2010 .
- ↑ "مكتبة Intel® MPI - الوثائق" . Intel.
- ↑ "ردًا على: مشكلة في أداء جهاز ماك بوك برو" . شركة آبل. مؤرشف من الأصل بتاريخ 26 أغسطس 2016.
- ↑ "ردًا على: تغيير حالة الفاصلة العائمة (كان: أداء double مقابل float)" . شركة آبل. مؤرشف من الأصل في 15 يناير 2014. تم الاطلاع عليه في 24 يناير 2013 .
- ↑ "دليل مستخدم مُجمِّع لغة C++ لأنظمة Linux*" . إنتل.
- ↑ "دليل مرجعي لهندسة معمارية Arm - سلوك الفاصلة العائمة" . شركة Arm المحدودة.
- ↑ "الوثائق - مطور Arm" . developer.arm.com . تم الاطلاع عليه بتاريخ 20 يوليو 2025 .
- ↑ "سجلات Aarch64" . Arm.
للمزيد من القراءة
- إريك شوارتز، مارتن شموكيلر، وسون داو ترونغ (يونيو 2003). "تطبيقات الأجهزة للأعداد غير المعيارية" (ملف PDF) . وقائع الندوة السادسة عشرة لمعهد مهندسي الكهرباء والإلكترونيات حول الحساب الحاسوبي (Arith16) . الندوة السادسة عشرة لمعهد مهندسي الكهرباء والإلكترونيات حول الحساب الحاسوبي . جمعية الحاسبات التابعة لمعهد مهندسي الكهرباء والإلكترونيات . الصفحات 104-111 . ISBN 0-7695-1894-X.
- انظر أيضًا إلى أوراق بحثية متنوعة على موقع ويليام كاهان الإلكترونيللاطلاع على أمثلة توضح كيف تساعد الأرقام دون الطبيعية في تحسين نتائج العمليات الحسابية.
- الحساب الحاسوبي
