strictfp
كلمة strictfp هي كلمة محجوزة قديمة وغير ضرورية في لغة برمجة جافا . [ 1 ] [ 2 ] سابقًا، كانت هذه الكلمة تُستخدم كمُعدِّل لتقييدحسابات الفاصلة العائمة وفقًا لدلالات معيار IEEE 754 لضمان قابلية النقل. أُضيفت كلمة strictfp إلى جافا مع إصدار آلة جافا الافتراضية (JVM) 1.2، وأُزيلت وظيفتها في إصدار JVM 17. [ 2 ] بدءًا من جافا 17، أصبح استخدام دلالات معيار IEEE 754 إلزاميًا، وبالتالي فإن استخدام هذه الكلمة لا يُحدث أي فرق.
أساس
يحدد معيار IEEE 754 طريقة قياسية لكل من حسابات الفاصلة العائمة وتخزين قيم الفاصلة العائمة بتنسيقات مختلفة، بما في ذلك الدقة الفردية (32 بت، المستخدمة في Java ) floatأو الدقة المزدوجة (64 بت، المستخدمة في Java double).
توفر بعض الأجهزة أيضًا صيغًا ذات دقة موسعة تُتيح دقة أعلى و/أو نطاقًا أوسع للأسس. في هذه البنى، قد يكون من الأنسب حساب النتائج الوسيطة باستخدام هذه الصيغ الموسعة. قد يُجنّب ذلك أخطاء التقريب ، وحالات تجاوز السعة ، وحالات نقص السعة التي قد تحدث لولا ذلك، ولكنه قد يُؤدي إلى إنتاج البرامج لمخرجات مختلفة على هذه البنى. كان تجنب استخدام الدقة الموسعة مكلفًا للغاية على أجهزة x86 ذات بنية الفاصلة العائمة التقليدية x87 . على الرغم من سهولة التحكم في دقة الحساب، إلا أن تقييد نطاق الأسس للنتائج الوسيطة تطلب تعليمات إضافية مكلفة.
قبل إصدار JVM 1.2، كان يُشترط أن تكون حسابات الفاصلة العائمة دقيقة للغاية؛ أي أن جميع نتائج الفاصلة العائمة الوسيطة كان يجب أن تتصرف كما لو كانت ممثلة باستخدام دقة IEEE المفردة أو المزدوجة. وقد جعل هذا الأمر مكلفًا على الأجهزة الشائعة القائمة على معمارية x87 لضمان حدوث تجاوزات عند الحاجة.
ابتداءً من JVM 1.2، سُمح افتراضيًا للعمليات الحسابية الوسيطة بتجاوز نطاقات الأسس القياسية المرتبطة بتنسيقات IEEE 32 بت و64 بت. وبدلاً من ذلك، سُمح بتمثيلها كعنصر من مجموعة قيم "الأسس الموسعة". على منصات مثل x87، قد لا تحدث حالات تجاوز السعة أو نقصها في المواضع المتوقعة، مما ينتج عنه نتائج قد تكون أكثر دلالة، ولكنها أقل قابلية للتكرار.
بما أن معالجة الفاصلة العائمة x87 لم تعد ضرورية على معالجات x86 التي تدعم SSE2 ، فقد جعلت Java 17 جميع عمليات الفاصلة العائمة صارمة مرة أخرى، مما أعاد فعليًا دلالات ما قبل الإصدار 1.2. [ 2 ]
كيف يعمل؟
في حال عدم وجود تجاوز أو نقص في البيانات، لا يوجد فرق في النتائج مع أو بدون استخدام مُعدِّل strictfp. إذا كانت قابلية التكرار ضرورية، يُمكن استخدام مُعدِّل strictfp لضمان حدوث التجاوز والنقص في البيانات في نفس المواضع على جميع المنصات. بدون مُعدِّل strictfp، قد تستخدم النتائج الوسيطة نطاقًا أوسع للأس. [ 3 ]
يقوم المُعدِّل strictfpبذلك عن طريق تمثيل جميع القيم الوسيطة كقيم IEEE أحادية الدقة ومزدوجة الدقة، كما حدث في الإصدارات السابقة من JVM. [ 4 ]
الاستخدام
يمكن للمبرمجين استخدام المُعدِّل strictfpلضمان إجراء العمليات الحسابية كما في الإصدارات السابقة؛ أي باستخدام أنواع IEEE أحادية وثنائية الدقة فقط. يضمن استخدام strictfp أن تكون نتائج العمليات الحسابية ذات الفاصلة العائمة متطابقة على جميع المنصات.
يمكن استخدامه على الأصناف والواجهات والأساليب غير المجردة . [ 5 ] عند تطبيقه على أسلوب، فإنه يجعل جميع العمليات الحسابية داخله تستخدم حسابات الفاصلة العائمة الصارمة. وعند تطبيقه على صنف، فإن جميع العمليات الحسابية داخله تستخدم حسابات الفاصلة العائمة الصارمة. يجب أن تستخدم تعابير الثوابت في وقت الترجمة دائمًا سلوك الفاصلة العائمة الصارم. [ 6 ]
أمثلة
public strictfp class MyFPclass { // ... محتويات الفئة هنا ... }مراجع
- ↑ "مواصفات لغة جافا - الفصل 3. البنية المعجمية" .
- 1 2 3 "JEP 306: استعادة دلالات الفاصلة العائمة الصارمة دائمًا" .
- ↑ جوسلينج، جيمس؛ جوي، بيل؛ ستيل، جاي إل. الابن؛ براخا، جلعاد؛ باكلي، أليكس؛ سميث، دانيال (2017). "4.2.3 أنواع الأعداد العشرية، وتنسيقاتها، وقيمها". مواصفات لغة جافا، إصدار جافا SE 9. أديسون-ويسلي بروفيشنال . تم الاطلاع عليه بتاريخ 6 أكتوبر 2017 .
- ↑ فلانغان، ديفيد (مارس 2005). جافا باختصار ( الطبعة الخامسة). أورايلي ميديا . ISBN 978-0-596-00773-7تم الاطلاع عليه بتاريخ 2010-03-03 .
- ↑ شيلدت، هربرت (2007). جافا: دليل المبتدئين ( الطبعة الرابعة). شركة ماكجرو هيل. ISBN 978-0-07-226384-8.
- ↑ جوسلينج، جيمس؛ جوي، بيل؛ ستيل، جاي إل. الابن؛ براخا، جلعاد (2005). "15.4 تعابير FP-strict". مواصفات لغة جافا، الطبعة الثالثة . أديسون-ويسلي بروفيشنال. ص 411. ISBN 0-321-24678-0تم الاطلاع عليه بتاريخ 22-03-2016 .
- جافا (لغة برمجة)
