पर जाने पर फ़्लोटिंग-पॉइंट परिशुद्धता मेरे पास एक ऐसा एप्लिकेशन है जो लिनक्स x86 32 बिट्स के लिए विकसित किया गया था। परिणामों के आधार पर बहुत सारे फ़्लोटिंग-पॉइंट ऑपरेशंस और बहुत सारे परीक्षण हैं। अब हम इसे x86_64 पर पोर्ट कर रहे हैं, लेकिन परीक्षण के परिणाम इस आर्किटेक्चर में अलग हैं। हम प्रत्येक वास्तुकला के परिणामों का एक अलग सेट नहीं रखना चाहते हैं।i386 से x86_64
लेख An Introduction to GCC - for the GNU compilers gcc and g++ समस्या के अनुसार कि x86_64 में जीसीसी मान लिया गया fpmath = SSE जबकि 86 fpmath = 387 मान लिया गया है। 387 एफपीयू सभी कार्यों के लिए 80 बिट आंतरिक परिशुद्धता उपयोग करता है और केवल एक दिया फ्लोटिंग प्वाइंट प्रकार (नाव, डबल या लंबी डबल) के परिणाम में परिवर्तित करते हुए SSE अपने आंतरिक परिशुद्धता निर्धारित करने के लिए ऑपरेंड के प्रकार उपयोग करता है।
मैं बल -mfpmath = 387 मेरे अपने कोड संकलन और मेरे सभी कार्यों को सही ढंग से काम करते हैं, लेकिन जब भी मैं कुछ पुस्तकालय समारोह (sin, cos, atan2, आदि) फोन परिणाम फिर से गलत हैं जब। मुझे लगता है कि यह इसलिए है क्योंकि libm fpmath ओवरराइड के बिना संकलित किया गया था।
मैं libm अपने आप (glibc) के निर्माण के लिए 387 अनुकरण उपयोग करने की कोशिश, लेकिन यह कारण होने वाले क्रैश का एक बहुत चारों ओर (अगर मैंने कुछ गलत किया था पता नहीं है)।
वहाँ x86_64 में 387 अनुकरण का उपयोग करने के लिए एक प्रक्रिया में सभी कोड के लिए मजबूर करने के लिए एक रास्ता है? या शायद कुछ लाइब्रेरी जो libm के समान मान लौटाती हैं दोनों आर्किटेक्चर पर करती है? कोई सुझाव?
के सवाल के बारे में मैं कहना है कि यह एक व्यक्ति के संचालन के लिए एक समस्या नहीं है है, "आप 80 बिट परिशुद्धता की आवश्यकता है"। इस साधारण मामले में अंतर वास्तव में छोटा है और इससे कोई फर्क नहीं पड़ता। कई परिचालनों को जोड़ते समय, त्रुटि उत्पन्न होती है और अंतिम परिणाम में अंतर अब इतना छोटा नहीं होता है और इससे कोई फर्क पड़ता है। तो मुझे लगता है मुझे 80 बिट परिशुद्धता की आवश्यकता है।
बिल्कुल सही। विस्तारित आंतरिक परिशुद्धता के आधार पर केवल दिल का दर्द हो सकता है। –
मैं ऐसे समाधान की तलाश में था जिसके लिए बहुत अधिक कोड बदलने और स्मृति आवश्यकताओं को दोगुनी करने की आवश्यकता नहीं होगी। लेकिन, जैसा कि आप कहते हैं, यह स्पष्ट रूप से समस्या को ठीक करेगा। –