स्ट्रिक्टएफपी

From Vigyanwiki

स्ट्रिक्टएफपी जावा (प्रोग्रामिंग लैंग्वेज) में अप्रचलित और अप्रयुक्त आरक्षित शब्द है।[1][2], इस कीवर्ड का उपयोग संशोधक के रूप में किया जाता था जो पोर्टेबिलिटी सुनिश्चित करने के लिए फ़्लोटिंग-पॉइंट गणनाओं को IEEE 754 शब्दार्थ तक सीमित करता था। स्ट्रिक्टएफपी कीवर्ड को जावा वर्चुअल मशीन (जेवीएम) संस्करण 1.2 के साथ जावा में प्रस्तुत किया गया था और इसकी कार्यक्षमता जेवीएम संस्करण 17 में हटा दी गई थी।[2] जावा 17 के अनुसार, IEEE 754 शब्दार्थ की आवश्यकता है, इस प्रकार इस कीवर्ड का उपयोग करने से कोई प्रभाव नहीं पड़ता है।

आधार

IEEE मानक IEEE 754 फ़्लोटिंग-पॉइंट गणना और विभिन्न स्वरूपों में फ़्लोटिंग-पॉइंट मानों के संग्रहण दोनों के लिए मानक विधि निर्दिष्ट करता है, एकल (32-बिट, जावा में प्रयुक्त) सहित float) या डबल (64-बिट, जावा में प्रयुक्त double) शुद्धता का उपयोग किया जाता है।

कुछ हार्डवेयर विस्तारित स्पष्टता प्रारूप भी प्रदान करते हैं जो उच्च स्पष्टता और/या बड़ी घातांक सीमा प्रदान करते हैं। ऐसे आर्किटेक्चर पर ऐसे विस्तारित प्रारूपों का उपयोग करके मध्यवर्ती परिणामों की गणना करना अधिक कुशल हो सकता है। इससे राउंड-ऑफ त्रुटियों, अंकगणितीय अतिप्रवाह और अंकगणितीय अंडरफ्लो से बचा जा सकता है जो अन्यथा घटित होते हैं, किन्तु ऐसे आर्किटेक्चर पर प्रोग्राम को अलग-अलग आउटपुट उत्पन्न करने का कारण बन सकते हैं। पारंपरिक x87 फ्लोटिंग-पॉइंट आर्किटेक्चर के साथ x86 मशीनों पर विस्तारित स्पष्टता के उपयोग से बचना विशेष रूप से महंगा था। यद्यपि गणना स्पष्टता को नियंत्रित करना सरल था, मध्यवर्ती परिणामों के लिए घातांक सीमा को सीमित करने के लिए अतिरिक्त महंगे निर्देशों की आवश्यकता थी।

जेवीएम 1.2 से पहले, फ़्लोटिंग-पॉइंट गणनाओं को सख्त होना आवश्यक था; अर्थात्, सभी मध्यवर्ती फ़्लोटिंग-पॉइंट परिणामों को ऐसे व्यवहार करना आवश्यक था जैसे कि IEEE एकल या दोहरे स्पष्टता का उपयोग करके दर्शाया गया है। इससे सामान्य x87-आधारित हार्डवेयर पर यह सुनिश्चित करना महंगा हो गया कि जहां आवश्यकता होती है इस प्रकार वहां ओवरफ्लो होता है।

जेवीएम 1.2 के बाद से, मध्यवर्ती गणनाओं को, डिफ़ॉल्ट रूप से, IEEE 32 बिट और 64 बिट प्रारूपों से जुड़े मानक घातांक सीमाओं को पार करने की अनुमति है। इसके अतिरिक्त उन्हें विस्तारित-घातांक मान सेट के सदस्य के रूप में दर्शाया जा सकता है। इस प्रकार x87 जैसे प्लेटफ़ॉर्म पर, ओवरफ़्लो और अंडरफ़्लो अपेक्षित समिष्ट पर नहीं हो सकते हैं, जिसके परिणामस्वरूप संभवतः अधिक सार्थक, किन्तु कम दोहराए जाने वाले परिणाम उत्पन्न होते हैं।

चूंकि एसएसई2 का समर्थन करने वाले x86 प्रोसेसर पर x87 फ़्लोटिंग पॉइंट अब आवश्यक नहीं है, इस प्रकार जावा 17 ने सभी फ़्लोटिंग-पॉइंट ऑपरेशंस को फिर से सख्त बना दिया है, प्रभावी विधि से प्री-1.2 सिमेंटिक्स को बहाल कर दिया है।[2]

यह कैसे काम करता है

ओवरफ्लो या अंडरफ्लो की अनुपस्थिति में, स्ट्रिक्टएफपी के साथ या उसके बिना परिणामों में कोई अंतर नहीं होता है। यदि पुनरावृत्ति आवश्यक है, जिससे स्ट्रिक्टएफपी संशोधक का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि सभी प्लेटफार्मों पर ही समिष्ट पर ओवरफ्लो और अंडरफ्लो होता है। इस प्रकार स्ट्रिक्टएफपी संशोधक के बिना, मध्यवर्ती परिणाम बड़ी घातांक सीमा का उपयोग कर सकते हैं।[3]

strictfp e> संशोधक सभी मध्यवर्ती मानों को IEEE एकल स्पष्टता और दोहरे स्पष्टता मानों के रूप में प्रस्तुत करके इसे पूरा करता है, जैसा कि जेवीएम के पुराने संस्करणों में हुआ था।[4]

उपयोग

प्रोग्रामर संशोधक strictfp का उपयोग कर सकते हैं यह सुनिश्चित करने के लिए कि गणनाएँ पिछले संस्करणों की तरह ही की जाती हैं; अर्थात्, केवल IEEE सिंगल और डबल स्पष्टता प्रकारों का उपयोग किया जाता है। स्ट्रिक्टएफपी का उपयोग यह गारंटी देता है कि फ़्लोटिंग-पॉइंट गणना के परिणाम सभी प्लेटफ़ॉर्म पर समान हैं।

इसका उपयोग क्लास (कंप्यूटर विज्ञान), इंटरफ़ेस (कंप्यूटर विज्ञान) और गैर-सार विधि (कंप्यूटर विज्ञान) पर किया जा सकता है।[5] जब किसी विधि पर प्रयुक्त किया जाता है, जिससे यह विधि के अंदर सभी गणनाओं को सख्त फ़्लोटिंग-पॉइंट गणित का उपयोग करने का कारण बनता है। जब किसी कक्षा पर प्रयुक्त किया जाता है, जिससे कक्षा के अंदर की सभी गणनाएँ सख्त फ़्लोटिंग-पॉइंट गणित का उपयोग करती हैं। संकलन-समय स्थिर अभिव्यक्तियों को सदैव सख्त फ़्लोटिंग-पॉइंट व्यवहार का उपयोग करना चाहिए।[6]

उदाहरण

public strictfp class MyFPclass { 
    // ... contents of class here ...
}

संदर्भ

  1. "Java Language Specification - Chapter 3. Lexical Structure".{{cite web}}: CS1 maint: url-status (link)
  2. 2.0 2.1 2.2 "JEP 306: Restore Always-Strict Floating-Point Semantics".{{cite web}}: CS1 maint: url-status (link)
  3. Gosling, James; Joy, Bill; Steele, Guy L. Jr.; Bracha, Gilad; Buckley, Alex; Smith, Daniel (2017). "4.2.3 Floating-Point Types, Formats, and Values". The Java Language Specification, Java SE 9 Edition. Addison-Wesley Professional. Retrieved 2017-10-06.
  4. Flanagan, David (March 2005). संक्षेप में जावा (Fifth ed.). O'Reilly Media. ISBN 978-0-596-00773-7. Retrieved 2010-03-03.
  5. Schildt, Herbert (2007). Java: A Beginner's Guide (4 ed.). McGraw-Hill Companies. ISBN 978-0-07-226384-8.
  6. Gosling, James; Joy, Bill; Steele, Guy L. Jr.; Bracha, Gilad (2005). "15.4 FP-strict Expressions". जावा भाषा विशिष्टता, तीसरा संस्करण. Addison-Wesley Professional. p. 411. ISBN 0-321-24678-0. Retrieved 2016-03-22.