2015-08-19 9 views
5

मैंने प्रोजेक्ट यूलर शुरू किया। मैं समस्या 2 पर हूं और इस कोड के साथ 4 मिलियन तक की फिबोनाची संख्याओं के योग के साथ आने के लिए आया हूं। ऐसा लगता है कि कोड काफी कुछ करता है जो मैं चाहता हूं। जब कोड चलाया जाता है तो मुझे सूचीबद्ध सही योग दिखाई देता है। एकमात्र भाग जो मैं वास्तव में उलझन में हूं, परिणाम में प्रदर्शित अंतिम संख्या है।फिबोनासी अनुक्रम (जेएस) - संख्याओं का योग

जे एस कोड::

var previous = 0; 
var current = 1; 
var sum = 0; 
var next; 

    for(i = 1; i < 100; i++){ 
     next = current + previous; 
     previous = current; 
     current = next; 
     if(current % 2 === 0 && current < 4000000) { 
      sum += current; 
     console.log(sum); 
     } 
    } 

परिणाम:

2 
10 
44 
188 
798 
3382 
14328 
60696 
257114 
1089154 
4613732 (this is the number i was trying to get) 
=> 354224848179262000000 (confused as to why this number shows up and what it represents) 
+2

यह जावा नहीं है। 'जावा! = जावास्क्रिप्ट '। –

+0

आप किस ब्राउज़र में हैं? जो नंबर आप चाहते हैं वह वह नंबर है जो मुझे मिलता है ... https://jsbin.com/reweqalaxa/edit?js,console – Deryck

उत्तर

3

मुझे इस टूट करते हैं: यह यह क्या पता चलता है

क्यों इस शो अप करता है?

कंसोल पर, आप निष्पादित किसी भी अभिव्यक्ति का परिणाम देखेंगे। यदि आप कोड के ब्लॉक को निष्पादित करते हैं तो आपको ब्लॉक में निष्पादित अंतिम अभिव्यक्ति दिखाई देगी। काउंटर सहजता से, इस मामले में यह current = next का परिणाम है क्योंकि यदि लूप के माध्यम से आपके अंतिम समय पर if स्टेटमेंट नहीं चलाया जाता है।

अगला 354224848179262000000 के बराबर क्यों है?

सौवां फिबोनाची संख्या 354224848179261915075 है। जावास्क्रिप्ट हालांकि सटीकता खो देता है क्योंकि आपकी संख्या एक निश्चित बिंदु से पहले हो जाती है और यह मानना ​​शुरू हो जाता है कि आपके नंबर के सभी निचले भाग शून्य हैं। इस विवरण को हल विवरण के लिए देखें: Why does JavaScript think 354224848179262000000 and 354224848179261915075 are equal?

+0

क्या इसे ठीक करने का कोई तरीका है ताकि अंतिम संख्या "4613732" संख्या हो? या यह ठीक है? तकनीकी रूप से कोड का उपयोग केवल उत्तर खोजने के लिए किया जाता था, लेकिन मैं अंतिम परिणाम होने का उत्तर चाहता हूं। – jayneedle32

+0

यह ठीक है। यदि आप अपने कंसोल के बाहर यह कोड चला रहे थे तो आप उस अंतिम संख्या को कभी नहीं देख पाएंगे। जब भी आप कोई कोड दर्ज करते हैं, तो यह किसी भी विकल्प को दिखाने के लिए कंसोल बना देता है। आप इसे सुरक्षित रूप से अनदेखा कर सकते हैं। यदि आप पुन: प्रयोज्य कोड लिख रहे थे, तो पूरी चीज एक कार्य होगी और यदि आप ब्लॉक में शामिल हों तो आपको सबसे अच्छे जवाब का ट्रैक रखना होगा। फिर आपके लूप के पूरा होने के बाद आप उस सर्वोत्तम उत्तर को वापस कर देंगे जो आप ट्रैक रखते थे। – skyler

+0

गॉचा, मदद कली के लिए धन्यवाद – jayneedle32

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