मैं यह कैसे निर्धारित करूं कि पी की मेरी गणना सटीक है?


772

मैं एक कार्यक्रम को लागू करने के लिए विभिन्न तरीकों की कोशिश कर रहा था जो कि पाई के अंकों को क्रमिक रूप से देता है। मैंने टेलर सीरीज़ पद्धति की कोशिश की , लेकिन यह बहुत धीरे-धीरे (जब मैंने कुछ समय के बाद ऑनलाइन मूल्यों के साथ अपने परिणाम की तुलना की) अभिसरण करने में साबित हुआ। वैसे भी, मैं बेहतर एल्गोरिदम की कोशिश कर रहा हूं।

इसलिए, प्रोग्राम लिखते समय मैं एक समस्या पर फंस गया, जैसा कि सभी एल्गोरिदम के साथ: मुझे कैसे पता चलेगा nकि मेरे द्वारा गणना किए गए अंक सटीक हैं?


20
गणितीय समस्या का अधिक होना। अच्छे एल्गोरिदम भी त्रुटि का अनुमान देते हैं।
उदाहरण

35
पी के खिलाफ तुलना?
डेव न्यूटन

55
@chris: "सचमुच हर जगह"?
ऑर्बिट

32
मैं आपके लिए 3.141592653589793238462643383279502 तक की जांच कर सकता हूं, इसके अलावा, आपको इतनी बड़ी संख्या में अंकों की आवश्यकता क्यों है? (यह ब्रह्मांड के आकार के साथ परमाणु स्तर की सटीकता की तरह कुछ है।)
एजे हेंडरसन

65
क्यों आप सिर्फ पी से विभाजित नहीं करते हैं और जांचते हैं कि क्या परिणाम 1 है? (सिर्फ मजाक)
user541686

जवाबों:


1628

चूंकि मैं पाई के सबसे अंकों के लिए वर्तमान विश्व रिकॉर्ड धारक हूं, इसलिए मैं अपने दो सेंट जोड़ूंगा :

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

वास्तव में, मेरे पास एक वेबपेज है जो उनके खिलाफ गणना की पुष्टि करने के उद्देश्य से अंकों के स्निपेट को सूचीबद्ध करता है: http://www.numberworld.org/digits/Pi/


लेकिन जब आप विश्व-रिकॉर्ड क्षेत्र में आते हैं, तो तुलना करने के लिए कुछ भी नहीं है।

ऐतिहासिक रूप से, गणना किए गए अंकों को सत्यापित करने के लिए मानक दृष्टिकोण सही है, दूसरे एल्गोरिथ्म का उपयोग करके अंकों को फिर से जोड़ना है। इसलिए यदि या तो गणना खराब हो जाती है, तो अंत में अंक मेल नहीं खाएंगे।

यह आमतौर पर आवश्यक समय से दोगुना से अधिक होता है (क्योंकि दूसरा एल्गोरिथ्म आमतौर पर धीमा होता है)। एक बार गणना करने वाले अंकों को सत्यापित करने का एकमात्र तरीका यह है कि आप पहले कभी-गणना किए गए अंकों और नए विश्व रिकॉर्ड के अपरिवर्तित क्षेत्र में भटक गए हैं।


उन दिनों में जहां सुपर कंप्यूटर रिकॉर्ड स्थापित कर रहे थे, दो अलग-अलग एजीएम एल्गोरिदम आमतौर पर उपयोग किए जाते थे:

ये दोनों O(N log(N)^2)एल्गोरिदम हैं जिन्हें लागू करना काफी आसान था।

हालाँकि, आजकल चीजें थोड़ी अलग हैं। पिछले तीन विश्व रिकॉर्डों में, दो संगणनाएँ करने के बजाय, हमने सबसे तेज़ ज्ञात सूत्र ( चूडनोव्स्की फॉर्मूला ) का उपयोग करके केवल एक संगणना का प्रदर्शन किया :

यहां छवि विवरण दर्ज करें

यह एल्गोरिदम लागू करने के लिए बहुत कठिन है, लेकिन यह एजीएम एल्गोरिदम की तुलना में बहुत तेज है।

तब हम अंकों के निष्कर्षण के लिए बीबीपी फॉर्मूलों का उपयोग करके द्विआधारी अंकों को सत्यापित करते हैं ।

यहां छवि विवरण दर्ज करें

यह सूत्र आपको इससे पहले सभी अंकों की गणना किए बिना मनमाने ढंग से द्विआधारी अंकों की गणना करने की अनुमति देता है। तो यह पिछले कुछ गणना बाइनरी अंकों को सत्यापित करने के लिए उपयोग किया जाता है। इसलिए यह एक पूर्ण गणना की तुलना में बहुत तेज है।

इसका लाभ यह है:

  1. केवल एक महंगी गणना की आवश्यकता है।

नुकसान यह है:

  1. बेली-बोरवेइन-प्लॉफ़ी ( बीबीपी ) फार्मूले के कार्यान्वयन की आवश्यकता है।
  2. बाइनरी से दशमलव में रेडिक्स रूपांतरण को सत्यापित करने के लिए एक अतिरिक्त कदम की आवश्यकता है।

मैंने कुछ विवरणों के बारे में बताया है कि अंतिम कुछ अंकों का सत्यापन क्यों होता है कि सभी अंक सही हैं। लेकिन यह देखना आसान है क्योंकि कोई भी गणना त्रुटि अंतिम अंकों तक फैल जाएगी।


अब यह अंतिम चरण (रूपांतरण की पुष्टि) वास्तव में काफी महत्वपूर्ण है। पिछले विश्व रिकॉर्ड धारकों में से एक ने वास्तव में हमें इस पर बाहर बुलाया क्योंकि शुरू में, मैंने इस बात का पर्याप्त विवरण नहीं दिया कि यह कैसे काम करता है।

इसलिए मैंने अपने ब्लॉग से इस स्निपेट को निकाला है:

N = # of decimal digits desired
p = 64-bit prime number

यहां छवि विवरण दर्ज करें

एक का उपयोग कर आधार 10 अंकगणितीय और बी का उपयोग कर द्विआधारी अंकगणित।

यहां छवि विवरण दर्ज करें

यदि A = B, तो "अत्यंत उच्च संभावना" के साथ, रूपांतरण सही है।


आगे पढ़ने के लिए, मेरा ब्लॉग पोस्ट Pi - 5 ट्रिलियन अंक देखें


15
और दूसरे प्रश्न का उत्तर देने के बारे में कि कैसे पता करें कि एक विशिष्ट एल्गोरिथ्म एन अंकों में परिवर्तित हो गया है: इसके लिए यह आवश्यक है कि आप एल्गोरिथ्म के अभिसरण व्यवहार को जानते हैं। टेलर सीरीज़ ArcTan(1)लॉगरिदमिक रूप से परिवर्तित हो रही है। इसलिए आपको संक्षेप में बड़ी संख्या में रूपांतरण करने की आवश्यकता होगी - संक्षेप में, इसका उपयोग न करें।
रहस्यमयी

21
हां, चुडनोव्स्की का फॉर्मूला स्थिर 14.18 अंकों प्रति शब्द पर है। तो आप कुल अंकों की संख्या को उस से विभाजित कर सकते हैं ताकि आपको कितने पद मिल सकें। (केवल सटीक मूल्य है: Log(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial

7
@ erikb85 किंडा। BBP सूत्र (कुछ हद तक) एक दूसरे एल्गोरिथ्म के रूप में गिना जाता है। लेकिन अपने आप से यह पर्याप्त नहीं है क्योंकि यह रूपांतरण को आधार 10 में सत्यापित नहीं करता है। BBP + रूपांतरण जांच का उपयोग करने का विचार एक दूसरे संगणना की आवश्यकता को समाप्त करने के लिए नहीं था। यह पहली बार 2009 के विश्व रिकॉर्ड में फेब्रिस बेलार्ड द्वारा किया गया था। यह एक अच्छा विचार था कि हमने ऐसा ही किया और उस पर सुधार किया।
रहस्यमयी

83
@FunsukWangadu मैं केवल खुद के लिए बोल सकता हूं, लेकिन यहां यह जाता है: मैंने वास्तव में पाई के बारे में कभी ध्यान नहीं दिया। मेरे लिए, यह सिर्फ एक और संख्या है। मान संख्या में या बेकार अंकों के 10 टेराबाइट्स में नहीं है, यह इसे प्राप्त करने के लिए उपयोग किए जाने वाले तरीके हैं। गणित की सदियों, और इस उपलब्धि में योगदान देने वाले कंप्यूटर / प्रोग्रामिंग अनुसंधान के दशकों कई अन्य क्षेत्रों पर लागू होते हैं और इस प्रकार अंकों की हार्ड ड्राइव की तुलना में अधिक मूल्यवान होते हैं। इसे सीधे शब्दों में कहें: पाई के अंकों की गणना एक खेल के अधिक है।
Mysticial

8
@ मूल, बस एक और स्टैकओवरफ़्लो प्रश्न से अपने पाई गणना स्थल पर ठोकर खाई और मदद नहीं कर सका, लेकिन आप लोगों ने जो किया, उस पर gawk और गिगल। लॉग में हार्डड्राइव विफलताओं / भूकंप को पसंद किया गया :) शुद्ध अद्भुत!
जो

48

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

और हम कैसे जानते हैं कि वे मूल्य सही हैं? ठीक है, मैं वहाँ कंप्यूटर विज्ञान-y साबित करने के लिए एक एल्गोरिथ्म के एक कार्यान्वयन सही है कि तरीके हैं कि कह सकते हैं।

अधिक व्यावहारिक रूप से, यदि अलग-अलग लोग अलग-अलग एल्गोरिदम का उपयोग करते हैं, और वे सभी एक हजार (मिलियन, जो भी) दशमलव स्थानों के लिए सहमत होते हैं (एक नंबर चुनें), जो आपको एक गर्म फजी लग रहा है कि उन्हें यह सही है।

ऐतिहासिक रूप से, विलियम शैंक्स ने 1873 में 707 दशमलव स्थानों पर पाई प्रकाशित की। गरीब आदमी, उन्होंने 528 वें दशमलव स्थान पर शुरू करने में गलती की।

बहुत दिलचस्प रूप से, 1995 में एक एल्गोरिथ्म प्रकाशित किया गया था जिसमें संपत्ति थी जो सीधे पीआई के एनटी अंक (आधार 16) की गणना करेगा, पिछले सभी अंकों की गणना किए बिना !

अंत में, मुझे आशा है कि आपका प्रारंभिक एल्गोरिथ्म pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...प्रोग्राम के लिए सबसे सरल नहीं हो सकता है, लेकिन यह ऐसा करने के सबसे धीमे तरीकों में से एक है। की जाँच करें विकिपीडिया पर अनुकरणीय लेख तेजी से तरीकों के लिए।


7
वह अंतिम सूत्र (लीबनिज फार्मूला, iirc) वास्तव में इसके अतिरिक्त और घटाव का विकल्प है।
थॉमस

21

आप कई दृष्टिकोणों का उपयोग कर सकते हैं और देख सकते हैं कि क्या वे एक ही उत्तर में अभिसरण होते हैं। या 'नेट से कुछ ले लो। चुडनोव्स्की एल्गोरिथ्म आमतौर पर पाई की गणना करने की एक बहुत तेज़ विधि के रूप में उपयोग किया जाता है। http://www.craig-wood.com/nick/articles/pi-chudnovsky/


संभावना कम कर देता है, लेकिन मैं अभी भी कई दृष्टिकोण समाधान के साथ निश्चित नहीं हो सकता, अगर दोनों गलत हैं। नेट पर जाँच करना वैधता नहीं रखता है, फिर नेट से ही मान क्यों नहीं लेते। मैं bbp के बारे में सोच रहा हूं कि कौन सा अधिक अनुकूल है?
इशान शर्मा

7
@ इशनशर्मा यदि दो एल्गोरिदम स्वतंत्र हैं, तो संभावना है कि दोनों संगणनाएं समान परिणामों के साथ गलत हैं, बहुत अधिक शून्य है। यदि किसी भी गणना में कुछ भी गलत होता है, तो अंतिम परिणाम मेल नहीं खाएंगे - इसलिए आपको पता है कि उनमें से कम से कम एक गलत है।
रहस्यपूर्ण

15

टेलर सीरीज़ पीआई का एक तरीका है। जैसा कि कहा गया है कि यह धीरे-धीरे परिवर्तित होता है।

टेलर श्रृंखला का आंशिक योग पी के वास्तविक मूल्य से दूर अगले कार्यकाल के कुछ गुणक के भीतर दिखाया जा सकता है।

सन्निकटन पाई के अन्य साधनों में अधिकतम त्रुटि की गणना करने के समान तरीके हैं।

हम इसे जानते हैं क्योंकि हम इसे गणितीय रूप से साबित कर सकते हैं।


Seconded। मुझे लगता है कि यहां ज्यादातर उत्तर गणितीय प्रमाण की अवधारणा पर लगभग पर्याप्त भार नहीं डाल रहे हैं । आपका जो भी कार्यक्रम पाई के अंकों की गणना करने के लिए है, यह कभी भी सबसे ठोस गणितीय प्रमाण से अधिक आश्वस्त नहीं होने वाला है कि आपके कार्यक्रम की विधि वास्तव में पाई की गणना करती है। जो पीआई की गणना करने वाले कार्यक्रमों पर एक अलग बाधा का सुझाव देता है: कि उन्हें प्रदर्शन और शुद्धता के रूप में समझने के लिए अधिक से अधिक लक्ष्य करना चाहिए ।
लुइस कैसिलस

5

आप sin(pi/2)(और cos(pi/2)उस बात के लिए) कंप्यूटिंग का प्रयास कर सकते हैं (काफी) पाप और कॉस के लिए जल्दी से पावर श्रृंखला का उपयोग करते हुए। (और भी बेहतर: x=0तेजी से अभिसरण के लिए निकट की गणना करने के लिए विभिन्न दोहरीकरण सूत्रों का उपयोग करें ।)

BTW, एक ब्लैक बॉक्स के रूप में tan(x)कंप्यूटिंग के साथ कहने के लिए उपयोग करने से बेहतर है cos(x)(जैसे आप ऊपर के रूप में टेलर श्रृंखला का उपयोग कर सकते हैं) न्यूटन के माध्यम से रूट खोज करना है। वहाँ निश्चित रूप से बेहतर एल्गोरिदम हैं, लेकिन यदि आप अंकों के टन को सत्यापित नहीं करना चाहते हैं, तो यह पर्याप्त होना चाहिए (और इसे लागू करने के लिए मुश्किल नहीं है, और आपको यह समझने के लिए केवल कलन की आवश्यकता है कि यह क्यों काम करता है।)


6
मैं यह नहीं देखता कि यह कैसे मदद करेगा कि 1000 वां अंक 1 से बंद हो। आपको नहीं करने के लिए बहुत सटीक मूल्यों की आवश्यकता sin(pi/2)होगी?
मथिउ एम।

मुझे यकीन नहीं है कि पिछले उत्तर के बारे में क्या कहना है, जब तक कि यह मजाक या कुछ और न हो। sin (pi / 2) = 1 cos (pi / 2) = 0 इसलिए, मैं कहूंगा कि वे निश्चित रूप से तेज़ी से जुटेंगे।
बेंटफ्रैंकलिन

15
मुझे लगता है कि यह हर किसी के लिए स्पष्ट है कि मूल्यांकन कर नहीं है sin(x)और cos(x)उच्च परिशुद्धता के लिए वास्तव में बहुत कंप्यूटिंग पाई से भी ज्यादा मुश्किल।
रहस्यमय

2
स्पष्ट कारणों के लिए, आपको इसके लिए पाप (pi / 2) का उपयोग नहीं करना चाहिए। इसके बजाय बेहतर है कि पाप (pi / 6) का उपयोग करें और सुनिश्चित करें कि यह ठीक 1/2 के रूप में सामने आता है।
रॉबर्ट लोज़िनियाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.