MATLAB

2010-11-19 21 views
6

में sprintf के साथ एक चर के दशमलव दिखा रहा है sprintf कमांड का उपयोग करने वाली अगली चीज़ को मैं समझ नहीं पा रहा हूं।MATLAB

>> vpa(exp(1),53) 

ans = 

2.7182818284590455348848081484902650117874145507812500 


>> e = 2.7182818284590455348848081484902650117874145507812500 

e = 

2.7183 

>> sprintf('%0.53f', e) 

ans = 

2.71828182845904550000000000000000000000000000000000000 

sprintf मुझे क्यों दिखाता है संख्या e संख्या के बजाय गोल और मैं पहली जगह में रखा?

+0

इसका आपके प्रश्न से कोई लेना-देना नहीं हो सकता है, लेकिन यदि आप 'ई' के सही अंक चाहते हैं तो आपको इसके बजाय टाइप करना चाहिए 'vpa (' exp (1) ', 53)' – MarkV

+0

@ मार्कवी: हाँ, लेकिन मुझे पसंद है यह। धन्यवाद! – Peterstone

उत्तर

5

चर, double precisionMATLAB में डिफ़ॉल्ट द्वारा कर रहे हैं तो चर e आपके द्वारा बनाए गए एक डबल की शुद्धता, जिसके बारे में 16 अंक है तक सीमित है। भले ही आपने अधिक अंक दर्ज किए हों, फिर भी डबल में उन सभी अतिरिक्त अंकों और राउंड को सटीक रूप से प्रतिनिधित्व करने की सटीकता नहीं होती है, जो निकटतम संख्या में प्रदर्शित हो सकते हैं।

संपादित करें: रूप this follow-up question मैं पोस्ट करने के लिए अपने जवाब में Andrew Janke से अधिक विस्तार से समझाया, नंबर पर आप e के लिए चुना है बस बाइनरी मान की एक सटीक दशमलव विस्तार होता है। दूसरे शब्दों में, यह बिल्कुल प्रतिनिधित्व करने योग्य मूल्य है कि पास के फ़्लोटिंग-पॉइंट नंबर को गोल किया जाएगा। हालांकि, इस मामले में दशमलव बिंदु से लगभग 16 अंकों से अधिक कुछ महत्वपूर्ण नहीं माना जाता है क्योंकि इसे वास्तव में डबल-परिशुद्धता प्रकार द्वारा सटीक रूप से प्रदर्शित नहीं किया जा सकता है। इसलिए, SPRINTF जैसे फ़ंक्शंस स्वचालित रूप से इन छोटे मानों को अनदेखा कर देंगे, इसके बजाय प्रिंटिंग शून्य।

+1

आपने एक कदम छोड़ा: स्पिंटफ का उपयोग करते समय, ई को निश्चित रूप से एक डबल में परिवर्तित किया जाता है। चर हैं ... – Marc

+1

@Marc: एचएम? यहां, ई पहले से ही एक दोगुना है क्योंकि इसे कॉपी और पेस्टिंग के कारण शाब्दिक से प्रारंभ किया गया है। Matlab में, सभी संख्यात्मक अक्षर दोहरे मूल्य पैदा करते हैं। आप इसे "कक्षा (2.7182818284590455348848081484902650117874145507812500)" के साथ पुष्टि कर सकते हैं, जो 'डबल' देता है। कक्षा (एक्सपी (1)) भी डबल है। अधिकांश प्रदर्शित अंक फर्जी हैं क्योंकि वे परिशुद्धता की डबल सीमा से परे हैं; vpa() सिर्फ उन्हें printf() करता है जैसे शून्य नहीं करता है। –

+0

आप सही हैं। मुझे कोड में याद आया। – Marc