सी/सी ++ में किसी विशेष एल्गोरिदम को लागू करने के लिए हमें आवश्यक वैज्ञानिक कंप्यूटिंग समस्याओं का बहुमत सटीकता की मांग करता है जो डबल परिशुद्धता से बहुत कम है। उदाहरण के लिए, 1e-6
, 1e-7
सटीकता ODE सॉल्वर या संख्यात्मक एकीकरण के मामलों में 99%
शामिल है। यहां तक कि दुर्लभ मामलों में जब हमें उच्च सटीकता की आवश्यकता होती है, आमतौर पर संख्यात्मक विधि स्वयं विफल होने से पहले विफल होती है जो कि हम दोहरी परिशुद्धता के निकट सटीकता तक पहुंचने का सपना देख सकते हैं। उदाहरण: राउंडऑफ त्रुटियों के कारण मानक नॉस्टिफ सामान्य अंतर समीकरण को हल करते समय भी हम एक सरल रेज-कुट्टा विधि से 1e-16 सटीकता की अपेक्षा नहीं कर सकते हैं। इस मामले में, डबल परिशुद्धता आवश्यकता गलत जवाब के बेहतर अनुमान लगाने के लिए पूछने के समान है।फ़्लोटिंग-पॉइंट ऑप्टिमाइज़ेशन - दिशानिर्देश
फिर, आक्रामक फ्लोट प्वाइंट ऑप्टिमाइज़ेशन ज्यादातर मामलों में जीत-जीत की स्थिति प्रतीत होता है क्योंकि यह आपके कोड को तेज़ बनाता है (बहुत तेज!) और इससे आपकी विशेष समस्या की लक्ष्य सटीकता प्रभावित नहीं होती है। उस ने कहा, यह सुनिश्चित करना मुश्किल है कि एफपी अनुकूलन के खिलाफ एक विशेष कार्यान्वयन/कोड स्थिर है। शास्त्रीय (और कुछ हद तक परेशान) उदाहरण: जीएसयू वैज्ञानिक पुस्तकालय जीएसएल न केवल बाजार में मानक संख्यात्मक पुस्तकालय है बल्कि यह एक बहुत अच्छी तरह लिखित पुस्तकालय है (मैं खुद को बेहतर काम करने की कल्पना नहीं कर सकता)। हालांकि, जीएसएल एफपी अनुकूलन के खिलाफ स्थिर नहीं है। वास्तव में, यदि आप इंटेल कंपाइलर के साथ जीएसएल संकलित करते हैं, उदाहरण के लिए, तो इसके आंतरिक परीक्षण तब तक असफल हो जाएंगे जब तक आप -fp-model strict
ध्वज चालू नहीं करते हैं जो fp अनुकूलन को बंद करता है।
इस प्रकार, मेरा प्रश्न है: क्या कोड लिखने के लिए सामान्य दिशानिर्देश हैं जो आक्रामक फ़्लोटिंग पॉइंट अनुकूलन के खिलाफ स्थिर हैं। क्या ये दिशा-निर्देश भाषा (कंपाइलर) विशिष्ट हैं। यदि हां, तो सी/सी ++ (जीसीसी/आईसीसी) सर्वोत्तम प्रथाएं क्या हैं?
नोट 1: यह प्रश्न यह नहीं पूछ रहा है कि जीसीसी/आईसीसी में एफपी अनुकूलन झंडे क्या हैं।
नोट 2: यह प्रश्न सी/सी ++ अनुकूलन के लिए सामान्य दिशानिर्देशों के बारे में नहीं पूछ रहा है (जैसे छोटे कार्यों के लिए वर्चुअल फ़ंक्शंस का उपयोग न करें)।
नोट 3: यह प्रश्न अधिकांश मानक एफपी अनुकूलन (जैसे x/x -> 1) की सूची नहीं पूछ रहा है।
नोट 4: मुझे दृढ़ विश्वास है कि यह शास्त्रीय "सबसे अच्छे सर्वर नाम" के समान व्यक्तिपरक/ऑफ-विषय प्रश्न नहीं है। यदि आप असहमत हैं (क्योंकि मैं एक ठोस उदाहरण/कोड/समस्या प्रदान नहीं कर रहा हूं), तो इसे समुदाय विकी के रूप में चिह्नित करें। मुझे कुछ स्थिति बिंदु प्राप्त करने के उत्तर में उत्तर में बहुत दिलचस्पी है (नहीं, वे महत्वपूर्ण नहीं हैं - आपको बिंदु मिल गया है!)।
त्रुटियाँ जमा - भले ही डबल परिशुद्धता पर किया सब पर गणना अंतिम परिणाम पिछले बिट करने के लिए सही नहीं होगा - यह से दूर। यदि आप हर जगह फ्लोट का उपयोग करते हैं तो आपको यह जानने के लिए उचित त्रुटि विश्लेषण करना होगा कि आपके उत्तर के कितने बिट भरोसेमंद हैं (यदि कोई हैं)। आपको निश्चित रूप से डबल के लिए एक ही चीज़ करना चाहिए। –
सामान्य संख्यात्मक स्थिरता अक्सर ध्यान से चुने गए और अधिकतर नाजुक मध्यवर्ती चरणों के माध्यम से प्राप्त की जाती है, विशेष रूप से परिमित-परिशुद्धता फ्लोटिंग-पॉइंट अंकगणितीय के गैर-सहयोगी चरित्र को दूर करने के लिए डिज़ाइन की गई है। आक्रामक अनुकूलन इसे तोड़ने के लिए प्रवृत्त होते हैं निष्पादन के आदेश को बदलकर। इटरेटिव एडजस्टमेंट मदद कर सकता है, लेकिन फिर जवाब पाने में अधिक समय लगता है। प्रो टिप: आप अपने प्रश्न [कम्प्यूटेशनल साइंस] (http://scicomp.stackexchange.com/) साइट पर पोस्ट करना चाहते हैं। –