अन्य ने पहले ही आपको बताया है, 5 और 9 दोनों पूर्णांक हैं और यही कारण है कि परिणाम छोटा हो जाता है।
मैं क्या वास्तव में लाइनों के बीच पर चला जाता है की गहरी समझ के लिए एक स्पष्टीकरण जोड़ देगा:
double tempC;
double tempF;
tempC = (5/9) * (tempF-32); // removed unnecessary parenthesis
निर्भर करता है जो मूल्यांकन की आदेश, पर बाएँ-से-दाएँ या दाएँ-से-बाएँ, कि आपका विशिष्ट कंपाइलर उपयोग करता है, यह या तो उप-अभिव्यक्ति (5/9)
या (tempF-32)
का मूल्यांकन शुरू कर देगा।
आप नहीं जानते कि इनमें से कौन सा मूल्यांकन किया गया है! क्योंकि मूल्यांकन का क्रम सी में अनिर्दिष्ट व्यवहार है, जिसका अर्थ यह है कि संकलक बिना किसी दस्तावेज़ के इसे कर सकता है। इसलिए, किसी को मूल्यांकन के आदेश पर भरोसा कोड नहीं लिखना चाहिए, या यह पोर्टेबल और संभवतः गलत नहीं होगा।
आइए मान लें कि एक विशिष्ट कंपाइलर बाएं से दाएं मूल्यांकन का उपयोग करता है।
अब अभिव्यक्ति के रूप में वर्णित किया जा सकता
tempC = (int)result1 * (double)result2;
जहां "result1" 0 और "result2" है tempF का परिणाम है - 32.0।
- संकलक तब इस नई अभिव्यक्ति का मूल्यांकन करता है। यह
int
और double
पाता है।
- फिर, संतुलन होता है और int को दो बार परिवर्तित कर दिया जाता है।
- गुणा दो युगल पर किया जाता है, और परिणाम एक डबल है।
- परिणाम अभी तक एक और अस्थायी, अदृश्य चर में संग्रहीत है।
tempC = (double)result3;
- संकलक इस नई अभिव्यक्ति मूल्यांकन करता है।यह पता चलता है कि एक डबल डबल के अंदर बचाया जाना चाहिए। यह कोई समस्या नहीं है, इसलिए कोई अंतर्निहित रूपांतरण की आवश्यकता नहीं है। "परिणाम 3" tempC में संग्रहीत है।
यह छंटनी नहीं है, हालांकि, गोल नहीं है। – jmkeyes
शब्दावली फिक्स के लिए धन्यवाद। :) – Mysticial
दोह! धन्यवाद ... अब समझ में आता है। मैंने कुछ उदाहरणों में दशमलव के साथ देखा लेकिन पैसा कम नहीं हुआ। आप सभी को धन्यवाद! –