2017-01-01 11 views
6

मैं वर्तमान में जावा फ्लोट-पॉइंट नंबर सीख रहा हूं। मुझे पता है, कि एक फ्लोट में एक महत्वपूर्ण मात्रा में महत्वपूर्ण digets है। मुझे यह भी पता है कि जावा में -1 या 1 * संख्या * 10^एक्स जैसे फ्लोट का प्रतिनिधित्व किया जाता है। जहां संख्या संख्या है और 10^x दशमलव "बिंदु" है। लेकिन यहां हमारे पास एक संख्या का अंश नहीं है। यहां एक अनंत लूप कैसे संभव है?जावा अनंत जबकि लूप - फ्लोट 123456789

अनंत लूप के साथ कोड:

float f = 123456789; 
while (f-- > 0) { 
System.out.println(f); 
} 
+1

क्या आप वाकई लूप अनंत हैं? एफ बनने के बाद क्या होता है? –

+0

एफ वही रहता है और कोई कमी नहीं होती है। यह एक अनंत पाश है। यह पिछले साल विश्वविद्यालय में एक परीक्षा प्रश्न था (उदाहरण परीक्षा)। – thomas

+0

एफ इस संख्या का प्रतिनिधित्व करने के लिए पर्याप्त सटीक नहीं है (एफ--) समाधान है लेकिन क्यों? – thomas

उत्तर

4

यह चल बिन्दु गणित के बारे में है। जब आप f = 1.23456792E8 नंबर पर जाते हैं तो आप उस स्थिति पर ठोकर खा रहे हैं जब आप सब कुछ गलत हो जाते हैं, क्योंकि f-1 और f में वही फ़्लोटिंग पॉइंट प्रस्तुति है। तो कमी से नंबर स्वयं बन जाता है, जो अनंत लूप की ओर जाता है। बस जांचें:

System.out.println(1.23456792E8f); 
System.out.println(1.23456792E8f - 1); 

संख्या के बारे में इतना खास क्या है और क्यों निष्पादन बंद हो जाता है? ऐसा इसलिए है क्योंकि 123456789 का फ़्लोटिंग पॉइंट प्रस्तुति 1.23456792E8 है। फ्लोटिंग पॉइंट नंबरों की सटीकता की कमी के कारण पहले से ही यह हमें कम से कम का अंतर देता है। float के बजाय double का उपयोग करना प्रोग्राम को समाप्त करता है, लेकिन समस्या अधिक संख्या के साथ होगी।

+0

आप क्या करते हैं सब कुछ नष्ट कर मतलब है? –

+0

एल्गोरिदम - धन्यवाद, मैं इसे बदल दूंगा –

+0

यह 0.23456792E8 क्यों नहीं है? – thomas

संबंधित मुद्दे