clojure - PI Approximation: Why is my declarative version slower? -


मैं श्रृंखला का उपयोग कर पीआई का अनुमान लगा रहा हूं:

 pi sereies

श्रृंखला के लिए फ़ंक्शन इस तरह दिखता है:

  (defn-pi- सीरीज [के] (/ (यदि (यहां तक ​​कि (इन्फ क) 1 -1) (डीसी (* 2 के))))   

और फिर मेरी श्रृंखला जनरेटर * जैसा दिखता है:

  (defn pi [n] (* 4 (लूप [k 1 acc 0] (यदि (= k (inc n)) एसीसी (पुनरावृत्ति (inc k) (+ एसीसी (डबल ( pi-series k)))))))))   

चल रहे pi के साथ मान 999,999 निम्न का उत्पादन करता है: <पूर्व> (समय (पीई 99 99 99));; = & gt; "बीता समय: 497.686 मिसेज";; = & gt; 3.1415 936535907734

यह बहुत अच्छा लग रहा है, लेकिन मुझे पता है कि pi अधिक घोषणात्मक लिखा जा सकता है यहां बताया गया है:

  (defn pi-fn [n] (* 4 (कम करें + (नक्शा # (डबल (पी-सीरीज%)) (श्रेणी 1 (inc n) )))))   

निम्न में जिसके परिणामस्वरूप:

  (समय (पीआई-एफएन 99 99 99));; = & gt; "बीता समय: 4431.626 मिसेज";; = & gt; 3.1415 936535907734   

नोट: घोषणात्मक संस्करण लगभग 4 सेकंड लंबा ले गया क्यों?

क्यों घोषणात्मक संस्करण इतना धीमा है? मैं इसे अनिवार्य संस्करण के रूप में तेजी से बनाने के लिए घोषणात्मक संस्करण को कैसे अपडेट कर सकता हूं?


  • मैं पीआई-सीरीज का परिणाम दोहरा कर रहा हूं, क्योंकि क्लोज़र के अनुपात प्रकारों का उपयोग करके बहुत धीमी है।

    वैसे, आप एक बारीक परिमित राशि को एक दो रकम का अंतर, हस्ताक्षर के लिए प्रत्येक अवधि को अलग-अलग समायोजित करने की आवश्यकता को समाप्त करते हुए। उदाहरण के लिए,

      (alt- sum [fn] (- (+ (मैप एफ (श्रेणी 1 (inc n) 2) लागू करें) (लागू + (मैप एफ (श्रेणी 2 ( inc n) 2))))) (समय (* 4 (alt-sum # (/ 1.0 (डीसी (+%%)) 999999))); "समय बीत चुका है: 195.244047 मिसेक"; = 3.1415 93653590707   

    मेरे लैपटॉप पर pi 2500 मिसे पर चलता है हालांकि, pi और pi-fn (या तो संस्करण) लगभग लगभग चलते हैं। वही दर ( alt-sum से 10x धीमी है) अधिक बार नहीं, pi-fn तेज से pi है। क्या आप सुनिश्चित हैं कि आप दूसरे समय से पहले गलती से अतिरिक्त 9 डालें नहीं? कॉन्ट्रा जुआन, मुझे नहीं लगता है कि आप एक से अधिक बार अनुक्रम पर फिर से चल रहे हैं, क्योंकि इस शब्द को आलस्य से उत्पन्न किया जाता है।

      खरोंच.कोर & gt; (समय (पीई 99 99 99)) "समय बीत चुका है: 2682.866 9 मिसेज" 3.1415 936535907734 स्क्रैच.कोर & gt; (समय (पी-एफएन 99 99 99)) "समाप्त हो गया समय: 2082.071798 मिसेक" 3.1415 936535907734 स्क्रैच.कोर & gt; (समय (पी-एफएन-जुआन 99 99 99)) "विलंबित समय: 1 934.976217 मिसेक" 3.1415 936535907734 स्क्रैच.कोर & gt; (समय (* 4 (alt- sum # (/ 1.0 (dec (+%%)) 999999)) "समय बीत चुका है: 199.998438 msecs" 3.141593653590707    

Comments

Popular posts from this blog

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -

jasper reports - How to center align barcode using jasperreports and barcode4j -

django - CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False -