पहले से ही यह question पढ़ना है, मुझे उचित रूप से निश्चित है कि एक ही इनपुट के साथ अस्थायी बिंदु (एक ही हार्डवेयर पर, उसी कंपाइलर के साथ संकलित) के साथ अस्थायी बिंदु का उपयोग करने वाली एक दी गई प्रक्रिया होनी चाहिए नियतात्मक। मैं एक ऐसे मामले को देख रहा हूं जहां यह सच नहीं है और यह निर्धारित करने की कोशिश कर रहा है कि इसका क्या कारण हो सकता है।फ्लोटिंग पॉइंट त्रुटियों को उत्पन्न करने के लिए एक निर्धारक प्रक्रिया का कारण क्या हो सकता है
मैंने निष्पादन योग्य संकलित किया है और मैं इसे एक ही मशीन (गैर-बहुप्रचारित) पर चल रहे सटीक डेटा को खिला रहा हूं, लेकिन मुझे लगभग 3.814697265625e-06 की त्रुटियां मिल रही हैं, जो मुझे मिली सावधानीपूर्वक चलने के बाद वास्तव में 1/4^9 = 1/2^18 = 1/262144 के बराबर है। जो 32-बिट फ्लोटिंग पॉइंट नंबर (विकिपीडिया के अनुसार लगभग 7 अंक) के सटीक स्तर के करीब है
मेरा संदेह यह है कि कोड पर लागू होने वाले अनुकूलन के साथ इसका कुछ संबंध है। मैं इंटेल सी ++ कंपाइलर का उपयोग कर रहा हूं और सुरक्षित या सख्त के बजाय फ्लोटिंग पॉइंट अटकलों को तेज़ कर दिया है। क्या यह एक फ्लोटिंग पॉइंट प्रक्रिया गैर-निर्धारिती बना सकता है? क्या अन्य अनुकूलन इत्यादि हैं जो इस व्यवहार को जन्म दे सकती हैं?
EDIT: पैक्स के सुझाव के अनुसार मैंने फ़्लोटिंग पॉइंट अनुमान के साथ कोड को फिर से संकलित किया और सुरक्षित परिणाम प्राप्त कर रहा हूं। यह मुझे इस प्रश्न को स्पष्ट करने की अनुमति देता है - वास्तव में फ़्लोटिंग-पॉइंट-अटकलें वास्तव में क्या करती हैं और सटीक उसी इनपुट पर लागू होने पर अलग-अलग परिणाम उत्पन्न करने के लिए यह एक ही बाइनरी (यानी एक संकलन, एकाधिक रन) का कारण कैसे बन सकता है?
@ बेन मैं इंटेल (आर) सी ++ 11.0.061 [आईए -32] का उपयोग करके संकलित कर रहा हूं और मैं इंटेल क्वाडकोर प्रोसेसर पर चल रहा हूं।
प्रोसेसर प्रोसेसर और क्या कंपाइलर? .. कृपया – Ben
यदि आपने यह पता लगाया है कि कौन सा ध्वज इसका कारण बन रहा है, तो क्यों न केवल कंपाइलर दस्तावेज़ों की जांच करें? –
@ टाल - मुझे प्रलेखन से कुछ भी पता लगाने में कठिनाई हो रही है (यह केवल तेज कहता है कि एफपीएस सक्षम है और सुरक्षित/सख्त इसे अक्षम करता है)। सबसे अच्छा मैं इसे समझ सकता हूं, एफपीएस संचालन के पुनर्गठन की अनुमति देता है (ए * सी + बी * सी => सी * (ए + बी)) लेकिन ये समय अनुकूलन संकलित कर रहे हैं, जिसके परिणामस्वरूप बाइनरी अभी भी निर्धारक होनी चाहिए और मुझे वाकई पसंद आएगा यह जानने के लिए कि यह क्यों नहीं है। –