में कास्टिंग/रूपांतरण int/double की व्याख्या मैंने कुछ गणना सामग्री को कोड किया (मैंने जो किया है उसके बारे में वास्तव में सरल उदाहरण के नीचे कॉपी किया) CASE2 की तरह और खराब परिणाम प्राप्त हुए। CASE1 जैसे कोड को दोबारा दोहराया और ठीक काम किया। मुझे पता है कि सीएएसई 2 में एक निहित कलाकार है, लेकिन पूर्ण कारण के बारे में सुनिश्चित नहीं है। कोई भी मुझे समझा सकता है कि नीचे क्या हो रहा है?सी #
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia/2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6)/2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0)/2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6)/2.0;
मेरा अनुमान है कि/2 CASE2 में (5 + 6) कास्टिंग है int करने के लिए और 5 के लिए विभाजन के दौर के कारण, तो casted फिर से दोगुना करने के लिए और 5.0 में बदल जाती है।
सीएएसई 3 और सीएएसई 4 भी समस्या को हल करता है।
एक साइड नोट के रूप में; यहां रनटाइम पर केवल * एक * ऑपरेशन किया गया है। मामले में '/ 2' 1. शेष सभी संकलक द्वारा किया जाता है। –
@Marc: क्या संकलक भी संकलन-समय पर पूरी तरह से केस 1 निष्पादित नहीं कर सकता है, क्योंकि 'auxMedia' स्थानीय है और स्थिर के साथ असाइन किया गया है? या यह एक अनुकूलन है जो सख्त रूप से जेआईटी को छोड़ दिया गया है? –
@ माइकल - मैं * उम्मीद करता हूं * कि जेआईटी को छोड़ दिया जाए। इसका उत्तर देने के लिए आपको विभिन्न कंपाइलर आउटपुट देखने की आवश्यकता होगी ... –