In current C++ and Java, double type and float type : if (x == 0.0) is correct? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 3 जवाब

    मेरे पुराने में ज्ञान : जब हम यह देखना चाहते हैं कि डबल या फ्लोट 0.0 के बराबर है या नहीं, तो हम नहीं चाहिए इस तरह से लिखना चाहिए:

      डबल एक्स = 0.0; यदि (x == 0.0) System.out.println ("हाँ"); Else system.out.println ("नहीं");   

    लेकिन कुछ मिनट पहले, मैंने इसे जावा (1.7) और सी ++ (ऐप्पल) एलएलवीएम संस्करण 6.0) , ऐसा लिखने में कोई समस्या नहीं है! मैंने क्रमशः जावा और सी ++ के तहत "डबल" प्रकार और "फ्लोट" प्रकार की कोशिश की है।

    मेरा प्रश्न:

    • क्या मुझे याद आया कुछ, या हम वास्तव में जावा या सी ++ के तहत डबल या फ्लोट की जांच कर सकते हैं।
    • अगर हम कर सकते हैं, क्या हम इसे जावा और सी ++ के शुरुआती संस्करण के तहत कर सकते हैं?


      निष्कर्ष (सभी मदद के आधार पर):
      हम नहीं चाहिए "फ्लोट == फ्लोट या डबल == डबल का उपयोग करें "यह जांचने के लिए कि दो फ्लोट या दो युगल के बराबर हैं ( अगर हम सही जवाब प्राप्त करना चाहते हैं ), कारण सभी उत्तरों और टिप्पणियों में हैं नीचे


      संस्करण (पहली बार):
      सभी मदद के लिए बहुत बहुत धन्यवाद!
      लेकिन एक मिनट पहले, मैं बस जावा (1.7) के तहत इन्हें आज़माएं, सभी शो " हाँ ", ऐसा लगता है कि हम वर्तमान जावा के तहत वास्तव में ऐसा कर सकते हैं !
        फ्लोट x = 0.0f; यदि (x == 0) System.out.println ("हाँ"); Else system.out.println ("नहीं"); फ्लोट वाई = 100.0 एफ - 50.0 एफ * 2.0 एफ + 45.0 एफ * 3 - 135.0 एफ; if (y == 0.0f) System.out.println ("yes"); Else system.out.println ("नहीं"); यदि (100.0f - 50.0f * 2.0f + 45.0f * 3 - 135.0f == 0.0f) System.out.println ("हां"); Else system.out.println ("नहीं");   


      संस्करण (दूसरी बार):
      लेकिन मैंने इसे करने की कोशिश की है, जावा भी दिखाता है " हाँ ", (जावा के तहत (1.7))।
      मैं संकलक के" पूर्व-गणना " को समाप्त करने की कोशिश करता हूं, और कई चरणों में गणना <पूर्व> फ्लोट ए = 100.0 एफ; फ्लोट बी = 50.0 एफ; फ्लोट सी = 2.0 एफ; फ्लोट बीसी = बी * सी; System.out.println ("b * c =" + bc); फ्लोट डी = 45.0 एफ; फ्लोट ई = 3.0 एफ; फ्लोट डी = डी * ई; System.out.println ("d * e =" + de); float f = 135.0f; फ्लोट जी ​​= ए - बीसी + डी - एफ; फ्लोट एच = 0.0 एफ; यदि (जी == एच) System.out.println ("हाँ"); Else system.out.println ("नहीं");


      संस्करण (तीसरी बार):
      @ डिएगोबास्क के काउंटरएक्सम्प्ले के लिए धन्यवाद (फ्लोट के लिए == फ्लोट):
      इस समय जावा (1.7) " नहीं " से पता चलता है।
        फ्लोट मी = 0.37f - 0.36f ; फ्लोट एन = 0.01 एफ; यदि (m - n == 0.0f) System.out.println ("हाँ"); Else system.out.println ("नहीं");    

      कोड कानूनी है समस्या यह है कि जब आप अस्थायी बिंदु संख्याओं को शामिल करते हुए गणना कर रहे हैं, तो गोल त्रुटियाँ होंगी, और इसलिए कई मामलों में बिल्कुल 0 (या समानता के दो नंबरों की जाँच) की जांच करने से काम नहीं आएगा।

      यह कोड किसी भी भाषा में ठीक है क्योंकि आपने कुछ भी नहीं किया है जिसके कारण गोलाकार होता है:

        डबल x = 0.0; यदि (x == 0.0) System.out.println ("हाँ"); Else system.out.println ("नहीं");   

      यह कोड ठीक नहीं है, हालांकि हो सकता है:

        डबल a1 = ... कुछ ...; डबल ए 2 = ... कुछ ...; डबल ए 3 = ए 1 / ए 2; डबल ए 4 = ए 3 * ए 2; डबल ए 5 = ए 4 - ए 1; यदि (a5 == 0.0) ...   

      भले ही गणितीय a5 0 होना चाहिए, व्यवहार में == ऑपरेशन वापसी के कारण झूठे वापसी।

      इस बात की आवश्यकता है कि किसी कंप्यूटर में फ़्लोटिंग पॉइंट कैसे नियंत्रित किया जाता है; इसका किसी भी भाषा या किसी भाषा के संस्करण के साथ कुछ भी नहीं करना है एक संदर्भ है।

Comments

Popular posts from this blog

php - PDO bindParam() fatal error -

logging - How can I log both the Request.InputStream and Response.OutputStream traffic in my ASP.NET MVC3 Application for specific Actions? -

java - Why my included JSP file won't get processed correctly? -