x86 और x64 के बीच फ़्लोटिंग पॉइंट अंकगणितीय विसंगति
विज़ुअल स्टूडियो 2010 में, x86 और x64 बिल्ड के बीच फ़्लोटिंग-पॉइंट अंकगणित में एक उल्लेखनीय अंतर कुछ अभिव्यक्तियों के मूल्यों की तुलना करते समय उत्पन्न होता है। यह असमानता निम्नलिखित कोड में प्रकट होती है:
float a = 50.0f; float b = 65.0f; float c = 1.3f; float d = a * c; bool bLarger1 = dx86 और x64 आर्किटेक्चर दूसरी अभिव्यक्ति, bLarger2 को अलग तरीके से संभालते हैं। x86 बिल्ड में, bLarger2 सत्य का मूल्यांकन करता है, जबकि x64 बिल्ड में, यह गलत का मूल्यांकन करता है। यह असमानता फ्लोटिंग-पॉइंट ऑपरेशंस में अभिव्यक्ति (ए * सी) की गणना में निहित है। दो आर्किटेक्चर द्वारा उपयोग की जाने वाली फ़्लोटिंग-पॉइंट इकाइयाँ: x86 के लिए x87 और x64 के लिए SSE। दोनों इकाइयों के बीच मूलभूत अंतर उनकी परिशुद्धता है। x87 इकाई डिफ़ॉल्ट रूप से एकल परिशुद्धता (आमतौर पर दोहरी परिशुद्धता) से अधिक नियोजित करती है, जबकि एसएसई इकाई विशेष रूप से एकल परिशुद्धता में काम करती है।
विसंगति को दूर करना
हल करने के लिए विसंगति, x87 इकाई की सटीकता को एसएसई इकाई से मेल खाने के लिए मैन्युअल रूप से कॉन्फ़िगर किया जा सकता है। इसे निम्नलिखित क्रियान्वित करके 32-बिट कोड में प्राप्त किया जा सकता है:
_controlfp(_PC_24, _MCW_PC);परिशुद्धता को एकल परिशुद्धता पर सेट करके, (a * c) का मूल्यांकन bLarger2 अभिव्यक्ति x64 बिल्ड के साथ संरेखित होगी, जिसके परिणामस्वरूप bLarger1 और bLarger2 दोनों को सेट किया जाएगा गलत।
निष्कर्ष_controlfp(_PC_24, _MCW_PC);x86 और x64 बिल्ड के बीच फ़्लोटिंग-पॉइंट अंकगणित में अंतर x87 और एसएसई फ़्लोटिंग-पॉइंट इकाइयों के विशिष्ट सटीक स्तरों से उत्पन्न होता है। एसएसई इकाई से मेल खाने के लिए x87 इकाई की सटीकता को मैन्युअल रूप से नियंत्रित करके, दोनों आर्किटेक्चर में अभिव्यक्तियों के लगातार मूल्यांकन को सुनिश्चित करते हुए, विसंगति को समाप्त किया जा सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3