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

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

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

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

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

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

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

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

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

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

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