2016-05-04 12 views
6

मेरे पास यह कोड है;परिवर्तनीय अभिनय अजीब (जैसे फ़्लोटिंग पॉइंट)

static int test = 100; 
     static int Test 
     { 
      get 
      { 
       return (int)(test * 0.01f); 
      } 
     } 

उत्पादन होता है: 0

लेकिन इस कोड अलग रिटर्न

static int test = 100; 
    static int Test 
    { 
     get 
     { 
      var y = (test * 0.01f); 
      return (int)y; 
     } 
    } 

उत्पादन: 1

इसके अलावा, मैं इस कोड

static int test = 100; 
    static int Test 
    { 
     get 
     { 
      return (int)(100 * 0.01f); 
     } 
    } 

उत्पादन है: 1

मैं आईएल आउटपुट देखता हूं और मुझे समझ में नहीं आता कि क्यों सी # संकलन समय और आउटपुट पर इस गणितीय ऑपरेशन को अलग कर रहा है? enter image description here

इन दो कोडों में अंतर क्या है? मैंने वैरिएबल परिणाम का उपयोग करने का फैसला क्यों बदल रहा है?

+0

आप मूल्यों की जांच कैसे करते हैं? – dotctor

+0

संभावित डुप्लिकेट [क्या फ़्लोटिंग पॉइंट गणित टूटा हुआ है?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – Liam

+3

मैं एक एसओ के आसपास देख रहा था, लेकिन मुझे नहीं मिला सटीक उत्तर हालांकि, यह उत्तर कुछ चीजों को स्पष्ट कर सकता है: http://stackoverflow.com/a/15117741/2594485 –

उत्तर

2

क्योंकि संकलक आपको चालित करता है। कंपाइलर पहले से ही कुछ गणित करने के लिए पर्याप्त स्मार्ट है, इसलिए इसे रन-टाइम पर ऐसा करने की आवश्यकता नहीं है, जो व्यर्थ होगा। अभिव्यक्ति 100 * .01f की गणना फ्लोट पर परिशुद्धता की कमी के बिना कंपाइलर में की जाती है, जो breaks you up on run-time है।

यह साबित करने के लिए, static testconst बनाने का प्रयास करें। आप देखेंगे कि कंपाइलर आपके लिए संकलन समय पर भी गणित करने में सक्षम है। आपके नमूने में पहले वैरिएबल को लिखने के साथ कुछ भी नहीं है। रन-टाइम बनाम संकलन-समय है।

+0

ठीक है मैं समझता हूँ.लेकिन यह मेरा सवाल नहीं है। मुझे मिल गया। कॉम्पाइलर संकलन समय पर निरंतर मेटामैटिकल ऑपरेशंस को हल करना। यह वास्तव में होना जरूरी है। लेकिन अगर मैं इस ऑपरेशन के लिए चर का उपयोग करता हूं तो "परिणाम" बदल रहा है? मुझे लगता है कि यह गलत है? परिणाम क्यों बदल रहा है। केवल एक प्लेसहोल्डर वैरिएबल मैं सही हूँ? – Cevizli

+0

नहीं निरंतर मानों और रनटाइम प्रतिनिधित्व के संकलन समय संकल्प के बीच एक अंतर है। –

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