कुछ सी-कोड और एफ # की तुलना में मैं इसे बदलने की कोशिश कर रहा हूं, मैंने देखा कि अंतिम परिणाम में कुछ अंतर थे।क्या सी डबल्स .NET युगल से अलग हैं?
कोड का बैक अप लेना, मैंने पाया कि यहां तक कि अंतर भी थे - हालांकि छोटे थे।
कोड फ़ाइल से डेटा में पढ़कर शुरू होता है। और पहला नंबर अलग-अलग आता है। उदाहरण के लिए, एफ # में (स्क्रिप्ट के लिए आसान):
let a = 71.9497985840
printfn "%.20f" a
मैं (मेरे लिए) उत्पादन 71.94979858400000000000
उम्मीद मिलता है।
लेकिन सी में:
a = 71.9497985840;
fprintf (stderr, "%.20f\n", a);
प्रिंट बाहर 71.94979858400000700000
।
वह 7 कहां से आया है?
अंतर केवल छोटा है, लेकिन यह मुझे परेशान करता है क्योंकि मुझे नहीं पता कि क्यों। (यह मुझे परेशान करता है क्योंकि यह ट्रैक करने के लिए और अधिक कठिन बनाता है जहां कोड के मेरे दो संस्करण अलग हो रहे हैं)
क्या आप सुनिश्चित हैं कि दोनों मान दोगुना हैं? क्या आप वाकई प्रिंटिंग में त्रुटि नहीं कर रहे हैं? – Euphoric
.net में अस्थायी बिंदु अंकगणित एक अच्छी तरह से परिभाषित सटीक परिणाम नहीं है। यह केवल एक अनुमान है। निचले अंक कंपाइलर और जेआईटीर की चोटी पर बदल सकते हैं, और उन्हें 'printfn' जैसे कुछ के साथ देखकर उन्हें प्रभावित कर सकते हैं। – CodesInChaos
चर के सटीक बिट पैटर्न को देखने के लिए डीबगर या कुछ का उपयोग करें। यदि एफ # और सी कार्यान्वयन दोनों में आप एक ही फ़्लोटिंग-पॉइंट प्रारूप का उपयोग करते हैं और चर के समान सटीक पैटर्न होते हैं, तो अंतर या तो प्रिंटिंग में होता है या कैसे फ़्लोटिंग-पॉइंट शाब्दिक को कंपाइलर द्वारा पार्स किया जाता है। किसी भी मामले में, चूंकि फ़्लोटिंग-पॉइंट्स केवल अनुमान हैं, फिर भी चिंता करने की कोई बात नहीं हो सकती है, क्योंकि अंतर काफी छोटा है। –