Saturday 15 March 2014

C while-loop not stopping -


<पूर्व> #include & lt; cs50.h & gt; # शामिल करें & lt; stdio.h & gt; Int मुख्य (शून्य) {printf ("अपना बदलाव दर्ज करें:"); इंट पेनीज = 0, निकेल = 0, डाइम्स = 0, क्वार्टर = 0; फ्लोट परिवर्तन = गेटफ्लॉट (); जबकि (परिवर्तन & gt; 0) {यदि (परिवर्तन & gt; = 0.25) {क्वार्टर ++; परिवर्तन - = 0.25; } और अगर (परिवर्तन & gt; = 0.10) {dimes ++; परिवर्तन - = 0.10; } और अगर (परिवर्तन & gt; = 0.05) {निकेल ++; परिवर्तन - = 0.05; } और अगर (परिवर्तन & gt; = 0.01) {पेनी ++; परिवर्तन - = 0.01; } // बल तोड़ने वाला (printf ("% 1.2f - संख्या बाएं बदलाव \ n", परिवर्तन); टूटना; }} Printf ("क्वार्टर:% d \ n", क्वार्टर); Printf ("डाइम्स:% d \ n", डाइम्स); Printf ("निकल:% d \ n", निकेल); Printf ("पेनीज़:% d \ n", पेनीज़); वापसी 0; }

हैलो, मैं वर्तमान में सी के लिए नया हूं और मैं हार्वर्ड के सीएस 50 वर्ग ऑनलाइन ले रहा हूं। "परिवर्तन" चर 0.000 के नीचे जाने के समय लगता है जबकि लूप-रोप को रोक नहीं सकता। इसने मुझे अंत में "ब्रेक" टाइप करने के लिए मजबूर किया मेरे कोड में क्या गलत है?

यह समस्या के आधार पर 1 से है।

इसमें समस्याएं हैं कंप्यूटर मेमोरी में फ़्लोटिंग पॉइंट नंबर कैसे प्रदर्शित होते हैं यदि संक्षेप में: सभी संख्याओं को ठीक से संग्रहीत नहीं किया जा सकता है अधिक जानकारी के लिए कृपया इस पृष्ठ को पढ़ें:

आप कंप्यूटर में फ्लोट के अभ्यावेदन की जांच के लिए इस सेवा का उपयोग कर सकते हैं:

आपके मामले के बारे में, मान लीजिए कि आपने 0.4 दर्ज किया है। इसका मतलब है कि इसे 0.25 + 0.1 + 0.05 में विभाजित किया जाना चाहिए। और परिवर्तन को शून्य माना जाता है, लेकिन:

  0.40 == 0.4000000059604644775390625000, शून्य 0.25 == 0.250000000000000000000000000000 (सटीक), शून्य 0.10 == 0.1000000014901161193847656250, शून्य 0.05 = = 0.0500000007450580596923828125 0.00 == 0.0000000037252902984619140625   

जैसा कि आप देख सकते हैं, अंतिम परिणाम शून्य से थोड़ा ऊपर है, जो आपके लूप को समाप्त होने से रोकता है।

आम तौर पर, अगर आपको आवश्यकता होती है पैसे गिनने के लिए, आपको "सेंट" पर भरोसा करने के बजाय int का उपयोग करना चाहिए या कस्टम प्रकार या लंबा अंकगणित या जो भी हो, लेकिन फ्लोटिंग पॉइंट नहीं, क्योंकि ज्यादातर देशों में पैसा एक बिंदु के बाद केवल दो पदों की आवश्यकता है, इस प्रकार इस बिंदु को फ़्लोटिंग

No comments:

Post a Comment