2010-12-28 15 views
5

मैं सी कार्यक्रमजीसीसी गलत उत्तर अनुकूलन के साथ सक्षम

double d = 1.4; 
int x; 
x = d * 10; 
printf("\n\n VALUE = %d " ,x); 

निम्नलिखित है मैं जीसीसी 4.3.3 जो उबंटू 9.04 के साथ

मैं -O0 के साथ 13 के रूप में जवाब मिल लेकिन सही जवाब मिल आता है देता है यानी 14 अनुकूलन के उच्च स्तर के साथ

क्या यह ज्ञात समस्या है या मेरे कोड के साथ कुछ गलत है?

उत्तर

9

आप 1.4 का प्रतिनिधित्व नहीं कर सकते हैं वास्तव में double का उपयोग कर, मूल्य वास्तव में एक सा lagrer या थोड़ा छोटे (this देखें)। तो कोई "सही" उत्तर नहीं है - प्रत्याशित रूप से छंटनी के बजाय round() का उपयोग करें।

4

अनुकूलन के उच्च स्तर पर, जीसीसी शायद दोनों चरों को अनुकूलित करता है और प्रिंट करने के लिए मूल्य को प्रीकंप्यूट करता है। ऑप्टिमाइज़ेशन पर, d (और इस प्रकार प्रिंटिंग मान) का मान फ़्लोटिंग पॉइंट प्रस्तुति के अधीन होगा, और यह बिल्कुल 1.4 नहीं हो सकता है। इस प्रयास करें:

double d = 1.4; 
int x; 
x = d * 10; 
printf("Old = %lf, New = %d\n", d, x); 
+0

यदि आप वास्तविक मूल्य को देखने में सक्षम होना चाहते हैं तो '% lf' के बजाय'% .50f' आज़माएं ... –

9

यह जीसीसी bug #323 है, वास्तव में यह एक बग लेकिन एक कार्यान्वयन विस्तार नहीं है।

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