2011-12-04 15 views
6

मैं विंडोज़ और लिनक्स पर सी ++ में एक प्रोग्राम चला रहा हूं। आउटपुट एक जैसा होना है। मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि केवल मतभेद वास्तविक मतभेद हैं जो कामकाजी मतभेदों का सामना करने का विरोध करते हैं। अब तक मैंने उन सभी मतभेदों का ख्याल रखा है जो \ r \ n मतभेद के कारण हो सकते हैं लेकिन एक ऐसी चीज है जिसे मैं समझ नहीं पा रहा हूं।हस्ताक्षर किए गए शून्य लिनक्स बनाम विंडोज

खिड़कियों में

बाहर डाल दिया है एक 0.000 और लिनक्स में यह -0,000

किसी भी एक को पता है कि यह क्या हो सकता है कि अंतर बना रही है है?

thanx

+4

कहना मुश्किल है क्योंकि आप उस प्रासंगिक कोड का एक टुकड़ा नहीं दिखा रहे हैं जो इसे आउटपुट करता है :) – favoretti

+0

इससे कोई फर्क नहीं पड़ता है, भले ही आप इसे कैसे देखते हैं या आप इसे कैसे देखते हैं। हस्ताक्षरित/हस्ताक्षरित शून्य के साथ आप क्या करेंगे? इसे जोड़ें? इसे उत्परिवर्तित करें? इसके द्वारा विभाजित करें? – FailedDev

+0

@ फ़ेलडेव: इससे कोई फर्क पड़ता है। 0 पर आने वाले फ़ंक्शन के बारे में सोचें, यह वाई-अक्ष के नकारात्मक भाग से या वाई-अक्ष के सकारात्मक भाग से आ सकता है। – ninjalj

उत्तर

1

चूंकि आईईईई फ्लोटिंग पॉइंट प्रारूप में साइन बिट मूल्य से अलग है, आपके पास 0 के दो अलग-अलग मान हैं, एक सकारात्मक और नकारात्मक है। ज्यादातर मामलों में यह कोई फर्क नहीं पड़ता; दोनों शून्य बराबर की तुलना करेंगे, और वे वास्तव में उसी गणितीय मान का वर्णन करेंगे (गणितीय, 0 और -0 समान हैं)। जहां अंतर महत्वपूर्ण हो सकता है जब आप अंडरफ्लो करते हैं और यह जानने की आवश्यकता होती है कि क्या अंडरफ्लो सकारात्मक या नकारात्मक मान से हुआ है। यदि आप 0 से विभाजित करते हैं, तो आपके द्वारा प्राप्त अनंतता का संकेत 0 के संकेत पर निर्भर करता है (यानी 1/+ 0.0 देने + इंफ, लेकिन 1/-0.0 देता है- INF)। दूसरे शब्दों में, शायद यह आपके लिए कोई फर्क नहीं पड़ेगा।

नोट हालांकि विभिन्न आउटपुट का मतलब यह नहीं है कि संख्या स्वयं अलग है। यह अच्छी तरह से हो सकता है कि विंडोज़ में मान भी -0.0 है, लेकिन विंडोज़ पर आउटपुट रूटीन +0.0 और -0.0 के बीच अंतर नहीं करता है (वे बराबर तुलना करते हैं)।

7

शायद यह कैसे अनुकूलक कुछ एफपी गणना का अनुकूलन में मतभेद से आता है (कि विन्यास किया जा सकता है - जैसे here देखें); एक मामले में आप थोड़ा अधिक मूल्य 0 से थोड़ा कम मानते हैं। आउटपुट में दोनों 0.000 पर गोल किए जाते हैं, लेकिन वे अपना "वास्तविक" चिह्न रखते हैं।

1

-ffast-math तरह का उपयोग कर (असुरक्षित) झंडे जब तक, संकलक मान्यताओं जब 'के अनुकूलन' आईईईई-754 गणित यह कर सकते हैं में सीमित है। सबसे पहले जांचें कि दोनों प्लेटफार्म एक ही गोलिंग का उपयोग कर रहे हैं।

इसके अलावा, यदि संभव हो, तो जांचें कि वे एक ही फ़्लोटिंग-पॉइंट इकाई का उपयोग कर रहे हैं। यानी, x86 पर एसएसई बनाम एफपीयू। उत्तरार्द्ध गणित पुस्तकालय समारोह कार्यान्वयन के साथ एक मुद्दा हो सकता है - विशेष रूप से त्रिकोणमितीय/अनुवांशिक कार्यों।

+1

मैं कैसे जांच कर रहा हूं कि वे किस फ़्लोटिंग-पॉइंट इकाई का उपयोग कर रहे हैं? – user690936

संबंधित मुद्दे