इस कोड को लूप से बाहर निकलने कभी नहीं होगा।
इस का कारण यह है कि एक पर्याप्त रूप से बड़े double
संख्या के लिए 1
जोड़ने अपने मूल्य परिवर्तन नहीं करता है: जब double
का मूल्य पर्याप्त सकारात्मक अनंत के करीब हो जाता
double a = 1.7976931348623155E308;
double old = a;
a++;
System.out.println(a); // prints 1.7976931348623155E308
System.out.println(old); // prints 1.7976931348623155E308
System.out.println(a==old); // prints "true"
Demo.
वास्तव में, , आप अच्छी तरह से 10 ऊपर एक नंबर जोड़ने के लिए अपने बड़े डबल परिवर्तन मूल्य बनाने के लिए और POSITIVE_INFINITY
बनने के लिए की जरूरत है।
इस का कारण यह रास्ता double
बड़ी संख्या का प्रतिनिधित्व करता है। यह मूल्य का सबसे महत्वपूर्ण अंक का प्रतिनिधित्व करने के लिए एक छोटी अपूर्णांश का उपयोग करता है, और एक प्रतिपादक इंगित करने के लिए जहां आंशिक बिंदु रखा जाना चाहिए। बहुत बड़ी संख्या के मामले में, एक्सपोनेंट अनिवार्य रूप से एक संकेत है कि मंटिसा के द्विआधारी प्रतिनिधित्व के बाद कितने शून्य जोड़े जाने की आवश्यकता है।
अपने double
संख्या के माध्यम से संख्या परिवर्तन मूल्य जोड़ने के लिए, आपको उस संख्या को जोड़ना होगा जो कम से कम मंटिसा के महत्वपूर्ण रूप से महत्वपूर्ण हो। एक बार बाइनरी एक्सपोनेंट 48 से ऊपर हो जाने के बाद, परिणाम के लिए आपको सबसे छोटी संख्या को जोड़ने की आवश्यकता होती है, जिसका अर्थ है कि ++
अब मान को बदल नहीं पाएगा।
मैं बहस चाहते हैं कोई गारंटी नहीं है कि यह यह है कि मूल्य के लिए बनाती हूँ यह है कि। कौन कहने वाला है कि डबल अंकगणितीय व्यवहार के तरीके के कारण उस मूल्य तक पहुंचने से पहले मैं नीचे नहीं आऊंगा? – Makoto
क्यों न सिर्फ कोशिश करें? – Grodriguez
@ मकोटो यह मूल रूप से मैं पूछ रहा हूं। यहां एकमात्र दिलचस्प मामला एज केस है। – Samir