2012-02-09 8 views
11

की सटीकता कैसे सेट करें कोई मुझे बता सकता है कि सी फ़ंक्शन के साथ फ़्लोट की सटीकता कैसे चुनें?फ्लोट

उदाहरण:

theFatFunction(0.666666666, 3) वापसी: 0,667

theFatFunction(0.111111111, 3) रिटर्न: 0,111

+2

के संभावित डुप्लिकेट का एक ही शक्ति से फ्लोट करने के लिए int करने के लिए, गणना करने के समान किरदार और उसके बाद फिर समान किरदार और विभाजन की 10^संख्या से फ्लोट: //stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c) –

उत्तर

12

आप ऐसा नहीं कर सकते हैं, क्योंकि सटीकता डेटा प्रकार (यानी float या double या long double) द्वारा निर्धारित की जाती है। यदि आप प्रिंटिंग उद्देश्यों के लिए इसे गोल करना चाहते हैं, तो आप उचित प्रारूप विनिर्देशों का उपयोग printf(), यानी printf("%0.3f\n", 0.666666666) में कर सकते हैं।

2

आप नहीं कर सकते। प्रेसिजन पूरी तरह से डेटा प्रकार पर निर्भर करता है। आपको float और double मिल गया है और यही वह है।

2

फ़्लोट्स में स्थिर, निश्चित सटीकता होती है। आप इसे बदल नहीं सकते आप कभी-कभी क्या कर सकते हैं, संख्या के चारों ओर है।

this page देखें, और 10 की शक्तियों से स्वयं को स्केल करने पर विचार करें। ध्यान दें कि सभी संख्याएं फ्लोट के रूप में बिल्कुल प्रतिनिधित्व योग्य नहीं हैं।

+0

आप फर्श (x * 100) /100.0 कर सकते हैं –

1

अधिकांश सिस्टम आईईईई -754 फ्लोटिंग पॉइंट मानक का पालन करते हैं जो कई फ़्लोटिंग पॉइंट प्रकारों को परिभाषित करता है।

इन सिस्टमों पर, आमतौर पर float आईईईई -754 binary32 एकल परिशुद्धता प्रकार है: इसमें 24-बिट सटीकता है। doublebinary64 डबल परिशुद्धता प्रकार है; इसमें 53-बिट सटीकता है। बिट संख्याओं में सटीकता आईईईई -754 मानक द्वारा परिभाषित की गई है और इसे बदला नहीं जा सकता है।

जब आप fprintf परिवार (उदा।, printf) के कार्यों का उपयोग करके फ़्लोटिंग पॉइंट प्रकारों के मान मुद्रित करते हैं, तो सटीकता को अधिकतम अंकों की अधिकतम संख्या के रूप में परिभाषित किया जाता है और डिफ़ॉल्ट रूप से 6 अंकों पर सेट होता है। आप डिफ़ॉल्ट विनिर्देश को . के साथ रूपांतरण विनिर्देश में दशमलव संख्या के बाद बदल सकते हैं।

printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536 

जबकि
printf("%f\n", 4.0 * atan(1.0));  // prints 3.141593 
0

प्रेसिजन डेटा प्रकार (अर्थात नाव या डबल या लंबी डबल) से निर्धारित होता है: उदाहरण के लिए।

आप मुद्रण उद्देश्यों के लिए यह दौर चाहते हैं, आप printf में उचित प्रारूप विनिर्देशक(), यानी

printf("%0.3f\n", 0.666666666) //will print 0.667 in c 

अब उपयोग कर सकते हैं अगर आप प्रयोजनों के लिए आपको सबसे पहले गुणा करने के लिए है की गणना के लिए यह पूर्णांक बनाना चाहते हैं अंक (http [सी में 2 दशमलव स्थानों के लिए गोलाई संख्या] तो 10

float f=0.66666; 
f *= 1000; // 666.660 
int i = (int)f; // 666 
i = 2*i; // 1332 
f = i; // 1332 
f /= 1000; // 1.332 
printf("%f",f); //1.332000