इस सवाल का पहले से ही एक उत्तर है: < / P>
- 4 जवाब
मैं वर्तमान में एक लालची लिख रहा हूँ एल्गोरिदम, लेकिन फ्लोट की तुलना करते समय मैंने एक समस्या पर ठोकर खाई है।
मैं इस तरह से कोड का उपयोग करेगा:
float f = 0; अगर (एफ == 0) {// code}
मैंने एक अलग प्रोग्राम पर इसका परीक्षण किया है और यह ठीक काम किया है, लेकिन प्रोग्राम पर मैं काम नहीं कर रहा हूं।
यहाँ मेरे अपने कार्यक्रम से एक उद्धरण है।
फ्लोट chf2 = fmod (chf, 0.1); नाव ch3 = chf - chf2; यदि (chf2 == 0) {/ * 0.1 की संख्या से * उपयोगकर्ता संख्या को विभाजित करें / फ्लोट सी 3 = सीएचएफ / 0.1; / * राउंड नंबर * / इंट ch4 = राउंड (सी 3); / * सिक्कों की मात्रा और अंत * / printf प्रिंट करें ("% d \ n", ch4 + coin2); वापसी 0; }
अजीब तरह से, यह पिछले के साथ काम करता है अगर बयान करता है कि जब उपयोगकर्ता के इनपुट से 0.25 का एफएमओडी होता है।
क्या जांच करने का एक बेहतर तरीका है एक फ्लोट दूसरे फ्लोट के बराबर है?
आपका कोड सही ढंग से काम करता है
fmod
फ़ंक्शन हमेशा एक सटीक परिणाम देता है - जब आप c = fmod (a, b) लिखते हैं। )
, c
एक संख्या है, जैसे कि c + k * b
(अनंत परिशुद्धता में मूल्यांकन) वास्तव में कुछ पूर्णांक के लिए a
बराबर होता है कश्मीर
। तो आपका कोड वास्तव में ध्वनि है --- यदि (c == 0)
बिल्कुल सही होगा जब a
बिल्कुल b
का एक बहु होगा। < / p>
आप ख <कोड> डबल
0.1
, जो वास्तव में अंश 3602879701896397/36028797018963968 , अंश
, जो कि 1/10
नहीं। इसलिए यदि मैं fmod (1, 0.1)
की गणना करता हूं, तो मुझे अंश <0> (36028797018963968% 3602879701896397) / 36028797018963968 प्राप्त करने की अपेक्षा करनी चाहिए 3602879701896395 36028797018963968 । यह
डबल
को 0.1
से थोड़ी छोटी है।
यह भी बताता है कि जब आप 0.25
के बजाय
; 0.25
आपको बिल्कुल 1/4 देता है।
आप फ्लोटिंग-बिंदु संख्याओं के प्रतिनिधित्व के बारे में जानने के लिए पढ़ सकते हैं।
No comments:
Post a Comment