उदाहरण में आप देते हैं, ऐसा लगता है कि दोनों प्रोग्रामों में समान फ़्लोटिंग-पॉइंट नंबर हैं। वे सिर्फ उन्हें अलग प्रिंट करते हैं। इस विशेष मुद्दे के आसपास सबसे सरल समाधान अपने स्वयं के फ़्लोटिंग-पॉइंट प्रिंटिंग फ़ंक्शन को लिखना है। यदि आप आउटपुट को बहुत अच्छा उम्मीद नहीं कर रहे हैं, तो आप फंक्शन here को सी में अपने स्वयं के लिखने के लिए छद्म कोड के रूप में उपयोग कर सकते हैं। यह सही ढंग से गोलाकार नहीं है, लेकिन यह इसके लिए क्या काम करता है (यानी, पुनरुत्पादित और पठनीय आउटपुट) के लिए काम करता है।
एक गहरी मुद्दा यह है कि आपके सवाल का संकेत आप का सामना कर रहे विभिन्न प्लेटफार्मों पर अलग अलग परिणाम देते फ्लोटिंग प्वाइंट संगणना है। यह सी मानक (ओं) का परिणाम है जो कंपाइलर्स को आईईईई 754 फ्लोटिंग-पॉइंट मानक को लागू करने के लिए मजबूर नहीं कर रहा है, विशेष रूप से, मध्यवर्ती परिणामों के लिए उच्च परिशुद्धता की अनुमति देता है। और सी मानक (ओं) की यह सापेक्ष उदारता कम से कम ऐतिहासिक x86 फ़्लोटिंग-पॉइंट निर्देशों के कारण होती है जो सटीक आईईईई 754 अर्थशास्त्र को लागू करने के लिए महंगा बनाती है।
लिनक्स पर, मानते हुए कि आप जीसीसी का उपयोग कर रहे हैं, -msse2
संकलन विकल्प आज़माएं। संपादित करें: ओपी ने टिप्पणी की कि -msse2 -mfpmath=sse
उसके लिए काम किया है। इससे जीसीसी आधुनिक एसएसई 2 निर्देश उत्पन्न करता है जो सटीक आईईईई 754 फ्लोटिंग-पॉइंट अर्थशास्त्र प्रदान करता है। यदि विंडोज़ पर आप जीसीसी का भी उपयोग कर रहे हैं, तो उसी विकल्प का उपयोग करें।
आप विज़ुअल सी उपयोग कर रहे हैं: विज़ुअल सी एक और चाल का उपयोग करता है आईईईई 754 अर्थ विज्ञान मैच के लिए ऐतिहासिक फ्लोटिंग प्वाइंट निर्देश मजबूर करने के लिए: यह आईईईई के रूप में केवल के रूप में कई significand बिट का उपयोग करने के लिए पुराने 80-बिट फ्लोटिंग प्वाइंट हार्डवेयर बताता है 754 डबल-परिशुद्धता है। इससे कुछ कोने के मामलों को छोड़कर, डबल-परिशुद्धता संख्याओं का सटीक सिमुलेशन मिलता है जिन्हें आप सामना नहीं करेंगे। इस मामले में यह मदद करेगा (*) यदि आपका प्रोग्राम केवल डबल-सटीक संख्याओं का उपयोग करता है (सी double
प्रकार)।
(*) विजुअल सी कंपाइलर सैद्धांतिक रूप से कोड उत्पन्न कर सकता है जो प्रत्येक इंटरमीडिएट परिणाम को डबल से सिंगल परिशुद्धता से गोल करके सटीक एकल-परिशुद्धता अंकगणित की गणना करता है, लेकिन यह महंगा होगा और मुझे संदेह है कि यह ऐसा करता है।
स्रोत
2012-11-26 22:00:00
प्रत्येक सिस्टम की अंतर्निहित वास्तुकला क्या है? – Mike
प्रयुक्त सी पुस्तकालयों के 'printf' कार्यान्वयन अलग-अलग हैं। विंडोज़ केवल 17 महत्वपूर्ण अंक प्रिंट करता है, और यदि अधिक अनुरोध किया जाता है तो शून्य के साथ भर जाता है। glibc प्रिंट सही ढंग से गोल मूल्य मुद्रित करता है। –
लेकिन मेरे लिए ऐसा नहीं लगता है कि यह प्रिंटिंग का एक मुद्दा है, मेरा संख्यात्मक एल्गोरिदम भी थोड़ा अलग परिणाम देता है। और मैंने इस पंक्तियों की ओर इशारा किया, क्योंकि मुझे लगता है कि वे अंतर का स्रोत हैं। # – Will