2012-08-12 13 views
10

नीचे दो परिदृश्य हैं जहां संचालन समान रूप से समान हैं लेकिन परिणाम 1 से भिन्न होते हैं। मुझे नहीं लगता कि मुझे प्रोग्रामिंग की व्याख्या करने की आवश्यकता है, यह बहुत आसान है।विभिन्न उत्तरों: दो साधारण समान पूर्णांक गणना?

परिवर्तनीय घोषणाएं पहले हैं, परिदृश्य 1 1 है) और 2 = 2), और प्राप्त किए गए परिणाम प्रत्येक परिदृश्य में अंतिम सूचीबद्ध हैं।

किसी भी मदद की सराहना की जाएगी।

int intWorkingNumber = 176555; 

int intHundreds = 1; 

int intPower = 1; 

1)

int intDeductionValue = (intHundreds * 100 * pow(1000, intPower)); 

intWorkingNumber -= intDeductionValue; 

intWorkingNumber = 76555 

2)

intWorkingNumber -= (intHundreds * 100 * pow(1000, intPower)) 

intWorkingNumber = 76554 
+0

'डबल पॉव (डबल बेस, डबल exp);' - एफपी पूर्णांक अंकगणित नहीं है, इसलिए आपके जैसे परिणाम अपेक्षित हैं। –

+0

कोड के लिए मेरे प्रश्न-इंडेंटेशन स्वरूपण को संपादित करने के लिए जे स्टीन को धन्यवाद। – Beginner

+0

@ मार्क अंत में प्रश्न चिह्न पर ध्यान दें- वाक्य का अर्थ यह है कि "क्या ये दो साधारण समान पूर्णांक गणनाएं हैं?"। फिर भी, मदद के लिए धन्यवाद। – Beginner

उत्तर

17

दो कोड नमूने के बीच का अंतर होता है जब आप int करने के लिए डाली।

पहले संस्करण इस कोड है, जहां आप से पहले पूर्णांक कास्ट करने के लिए इसी तरह की है आप घटाना:

intWorkingNumber = 176555 - (int)(1 * 100 * pow(1000, 1)); 

दूसरा संस्करण इस है, जहां आप पूर्णांक के बाद आप घटाना कास्ट करने के लिए इसी तरह की है:

intWorkingNumber = (int)(176555 - (1 * 100 * pow(1000, 1))); 

फ़ंक्शन pow एक फ़्लोटिंग पॉइंट नंबर देता है। यदि 1 * 100 * pow(1000, 1) का परिणाम 100000.0000 के बराबर नहीं है (और फ़्लोटिंग पॉइंट ऑपरेशंस के साथ, आपको सामान्य परिणामों पर सामान्य रूप से भरोसा नहीं करना चाहिए) ये दोनों बराबर नहीं हैं।

इस सरल उदाहरण पर विचार करें:

x = 10 - (int)0.001; // x = 10 - 0;  => x = 10 
y = (int)(10 - 0.001); // y = (int)9.999; => y = 9 
+3

का जिक्र करना चाहिए कि 'पाउ' समझने के लिए इसके लिए एक फ्लोट लौटाता है। – Puppy

+0

@DeadMG: उल्लेख किया गया। टिप्पणी के लिए धन्यवाद। –

+0

@ मार्क उत्तर के लिए धन्यवाद। – Beginner

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