सी प्रोग्रामिंग भाषा में, फ्लोटिंग पॉइंट निरंतर डिफ़ॉल्ट रूप से डबल प्रकार
है इसलिए 3.1415
डबल प्रकार है, जब तक कि फ्लोट प्रकार को इंगित करने के लिए 'f' या 'F' प्रत्यय का उपयोग न करें।सी में चेतावनी के बिना चर स्थिर करने के लिए डबल स्थिर असाइन करें?
मुझे लगता है कि const float pi = 3.1415
चेतावनी देगा, लेकिन वास्तव में नहीं।
जब मैं -Wall साथ जीसीसी के तहत इन की कोशिश:
float f = 3.1415926;
double d = 3.1415926;
printf("f: %f\n", f);
printf("d: %f\n", d);
f = 3.1415926f;
printf("f: %f\n", f);
int i = 3.1415926;
printf("i: %d\n", i);
परिणाम है:
f: 3.141593
d: 3.141593
f: 3.141593
i: 3
परिणाम (डबल चर सहित) स्पष्ट रूप से सटीक खो देते हैं, लेकिन बिना किसी चेतावनी के संकलन।
तो कंपाइलर ने इसके साथ क्या किया? या मैंने कुछ गलत समझा?
की 'printf' सुनिश्चित करता है तैरता परोक्ष जब पारित कर दिया युगल के लिए डाले गए variadic प्रकृति? –
हां, हालांकि यह ओपी के सवाल से असंबंधित है। –
मुझे आश्चर्य है कि जो अधिक से अधिक है: गलतियों जो "डबल से परिशुद्धता की संभावित हानि फ्लोट करने के लिए" संदेशों को पकड़ने, या कि परिणाम गलतियों की संख्या जब कोड एक प्रोग्रामर है जो स्पष्ट रूप से 'float' के लिए चीजों के बहुत सारे बलों को बनाने के लिए की संख्या कंपाइलर खुश है, कुछ भी 'फ्लोट' करने के लिए मजबूर करता है जो नहीं होना चाहिए [उदाहरण के लिए 'कॉन्स फ्लोट एक दसवां = 1.0 एफ/10.0 एफ; फ्लोट वैल्यू 1 = 8.0 एफ * दसवां; डबल वैल्यू 2 = 4.0 एफ * दसवां; 'ध्यान दें कि यदि 'दसवां'' डबल 'हो सकता था, तो सबकुछ पूरी तरह से काम करता। – supercat