2010-10-19 12 views
18

द्वारा वृद्धि, मैं अपनी समस्या के लिए लूप का उपयोग करना चाहता हूं, जबकि नहीं। क्या यह निम्नलिखित करना संभव है ?:फॉर-लूप, डबल

for(double i = 0; i < 10.0; i+0.25) 

मैं डबल मान जोड़ना चाहता हूं।

+2

बस ध्यान रखें कि गोल करने वाली त्रुटियों के कारण (गलत जानकारी मुझे पता है) आप शायद एक अच्छी गोल संख्या पर समाप्त नहीं होंगे। – Blindy

+2

ऐसा इसलिए होता है कि आपके प्रोग्राम में 'i' द्वारा ली गई सभी मानों को बिल्कुल 'डबल' मान के रूप में प्रस्तुत किया जा सकता है, लेकिन इस तरह फ़्लोटिंग पॉइंट इंडेक्स के साथ लूप लिखने की एक बुरी आदत है। यदि आप अजीब नतीजे देखना नहीं चाहते हैं तो फ़्लोटिंग पॉइंट की तुलना में अधिक देखभाल की आवश्यकता है। उदाहरण के लिए देखें http://www.mc.edu/campus/users/travis/syllabi/381/patriot.htm –

+2

@ ब्लिंडी इस सटीक कार्यक्रम के लिए, हाँ वह करेगा। थोड़ा अलग कार्यक्रम के लिए, वह नहीं करेगा। –

उत्तर

46

चल बिन्दु गणित की कलाकृतियों ने काट लिया रोकने के लिए, आप एक पूर्णांक पाश चर का उपयोग और चल बिन्दु मूल्य आप अपने पाश अंदर की जरूरत प्राप्त करने के लिए चाहते हो सकता है:

for (int n = 0; n <= 40; n++) { 
    double i = 0.25 * n; 
    // ... 
} 
25

आप इसके बजाय i += 0.25 का उपयोग कर सकते हैं।

+0

इस के लिए देख रहा था !! –

2
for(double i = 0; i < 10.0; i+=0.25) { 
//... 
} 

जोड़ा गया = i = i + 0.25 के लिए शॉर्टकट इंगित करता है;

6

जेम्स के जवाब सबसे स्पष्ट त्रुटि पकड़ा । लेकिन एक subtler (और आईएमओ अधिक निर्देशक) मुद्दा है, उस फ्लोटिंग बिंदु मूल्यों में (समान) समानता के लिए तुलना नहीं की जानी चाहिए।

वह लूप समस्याओं से ग्रस्त है, केवल एक पूर्णांक मान का उपयोग करें और लूप के अंदर डबल मान की गणना करें; या, कम सुरुचिपूर्ण, अपने आप को कुछ मार्जिन दें: for(double i = 0; i < 9.99; i+=0.25)

संपादित करें: मूल तुलना ठीक काम करने के लिए होती है, क्योंकि 0.25 = 1/4 2 की शक्ति है। किसी भी अन्य मामले में, यह वास्तव में एक जैसा नहीं हो सकता है चल बिन्दु संख्या। (संभावित) समस्या का एक उदाहरण:

for(double i = 0; i < 1.0; i += 0.1) 
    System.out.println(i); 

प्रिंट 11 मान:

0.0 
0.1 
0.2 
0.30000000000000004 
0.4 
0.5 
0.6 
0.7 
0.7999999999999999 
0.8999999999999999 
0.9999999999999999 
+1

मूल प्रश्न में 'i <10.0' है। क्या आप फिर से व्याख्या कर सकते हैं कि फ्लोटिंग-पॉइंट समानता के बारे में मानक भाषण यहां कैसे लागू होता है? (एक नोट के रूप में, जब आपके फ़्लोटिंग-पॉइंट कंप्यूटेशंस सटीक होते हैं तो समानता का उपयोग करने के लिए यह पूरी तरह से सुरक्षित है)। –

+0

'जब आपका फ़्लोटिंग-पॉइंट कंप्यूटेशंस सटीक है' एक मुश्किल वाक्य है।क्योंकि आपको यह सुनिश्चित करना होगा कि आपके दशमलव नंबर जावा के फ़्लोटिंग नंबर प्रारूप में सटीक प्रतिनिधित्व स्वीकार करते हैं (0.25 इसे स्वीकार करने के लिए होता है, 0.2 या 0.1 नहीं) मैंने एक उदाहरण जोड़ा। – leonbloy

+0

मैं समझने की कोशिश कर रहा हूं कि 0.01 कैसे जोड़ता है। यदि गणना सटीक नहीं है, तो फ़्लोटिंग-पॉइंट परिणाम वास्तविक परिणाम से नीचे होने की संभावना है, इसलिए आपका "फिक्स" एक लूप में एक अतिरिक्त पुनरावृत्ति का कारण बन सकता है जो प्रोग्रामर के इरादे की तुलना में पहले से ही बहुत अधिक पुनरावृत्तियों का है। –

2

में
for (double i = 0f; i < 10.0f; i +=0.25f) { 
System.out.println(i); 

च इंगित करता है float

= जोड़ा मैं के लिए एक शॉर्टकट को इंगित करता है = i + 0.25;

0

पूर्णांक के लिए। हम उपयोग कर सकते हैं: for (int i = 0; i < a.length; i += 2)

for (int i = 0; i < a.length; i += 2) { 
      if (a[i] == a[i + 1]) { 
       continue; 
      } 
      num = a[i]; 
     } 

एक ही तरह से हम अन्य डेटा प्रकार के लिए भी कर सकते हैं।

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