मैंने अपेक्षाकृत सरल एल्गोरिदम परिवर्तित किया है जो double
की संख्याओं पर सी ++ से जावा तक की संख्याओं पर बड़ी संख्या में गणना करता है, हालांकि दो प्लेटफार्मों पर एल्गोरिदम चला रहा है लेकिन एक ही मशीन थोड़ा अलग परिणाम उत्पन्न करती है। एल्गोरिदम गुणा करता है और बहुत सारे युगल और स्याही का योग करता है। मैं जावा एल्गोरिदम में डबल करने के लिए इन्स कास्टिंग कर रहा हूँ; सी एल्गोरिदम नहीं डाला जाता है।फ़्लोटिंग पॉइंट हैंडलिंग में मतभेदों के कारण अलग-अलग परिणाम क्या हैं इसकी पुष्टि कैसे करें?
- (जावा) 64,684,970
- (C++) 65296408
(अनदेखी करने के लिए मुद्रित दशमलव स्थानों)
स्वाभाविक रूप से:
उदाहरण के लिए, एक रन पर मैं परिणाम प्राप्त , मेरे एल्गोरिदम में कोई त्रुटि हो सकती है, हालांकि इससे पहले कि मैं समय डिबगिंग खर्च करना शुरू कर दूं, क्या यह संभव है कि सी ++ और जा में विभिन्न फ़्लोटिंग पॉइंट हैंडलिंग द्वारा अंतर समझाया जा सके va? यदि हां, तो क्या मैं साबित कर सकता हूं कि यह समस्या है?
अद्यतन - जिस स्थान पर भिन्नता है, वह दो चींटियों के बीच एक गुणा है जो तब चलने वाले कुल डबल में जोड़ा जाता है। सी कोड को संशोधित करने के बाद, वर्तमान में दोनों में:
mydouble += (double)int1 * (double)int2
जावा संस्करण में आपने किस डेटा प्रकार का उपयोग किया था? – wallyk
यह काफी अंतर है, और मुझे संदेह है कि गोल-ऑफ त्रुटियों के कारण हो सकता है। मेरा अनुमान है कि आपने कहीं गलती की है। जब तक आप 1E300 और सामान द्वारा विभाजित करने जैसी काफी चरम चीजें नहीं करते हैं। –
@ वैलीक: डबल। – Brabster