न्यूटन की विधि के साथ समस्याओं में से एक यह है कि इसे प्रत्येक पुनरावृत्ति में एक विभाजन ऑपरेशन की आवश्यकता होती है, जो सबसे धीमा बुनियादी पूर्णांक ऑपरेशन है।
हालांकि, पारस्परिक वर्गमूल के लिए न्यूटन की विधि , नहीं है। अगरx वह संख्या है जिसके लिए आप ढूंढना चाहते हैं 1x√, पुनरावृति:
ri+1=12ri(3−xr2i)
यह अक्सर के रूप में व्यक्त किया जाता है:
wi=r2i
di=1−wix
ri+1=ri+ridi2
यह तीन गुणा ऑपरेशन है। दो द्वारा विभाजन को शिफ्ट-राइट के रूप में लागू किया जा सकता है।
अब समस्या यह है कि rपूर्णांक नहीं है। हालाँकि, आप इसे फ़्लोटिंग-पॉइंट को मैन्युअल रूप से कार्यान्वित करके, और उपयुक्त होने पर क्षतिपूर्ति करने के लिए शिफ़्ट ऑपरेशन का एक गुच्छा बनाकर इसमें हेरफेर कर सकते हैं।
सबसे पहले, आइए पुनर्विक्रय करें x:
x′=2−2ex
हम कहाँ चाहेंगे x′ से बड़ा होना, लेकिन पास होना, 1। यदि हम उपरोक्त एल्गोरिथ्म को चलाते हैंx′ के बजाय x, हम खोजें r=1x√′। फिर,x−−√=2erx′।
अब फूट डालो r एक मंटिसा और प्रतिपादक में:
ri=2−eir′i
कहाँ पे r′iएक पूर्णांक है। intuitively,ei उत्तर की शुद्धता का प्रतिनिधित्व करें।
हम जानते हैं कि न्यूटन की विधि लगभग महत्वपूर्ण अंकों की संख्या को दोगुना कर देती है। तो हम चुन सकते हैं:
ei+1=2ei
थोड़ा हेरफेर के साथ, हम पाते हैं:
ei+1=2ei
wi=r′i2
x′i=x22e−ei+1
di=2ei+1−w′ix′i2ei+1
r′i+1=2eir′i−r′idi2ei+1
हर पुनरावृत्ति पर:
x−−√≈r′ix2e+ei
एक उदाहरण के रूप में, चलो वर्गमूल की गणना करने का प्रयास करते हैं x=263। हमें पता है कि उत्तर है2312–√। पारस्परिक वर्गमूल है12√2−31, तो हम सेट करेंगे e=31 (यह समस्या का पैमाना है) और हमारे प्रारंभिक अनुमान के लिए हम लेंगे r′0=3 तथा e0=2। (अर्थात, हम उठाते हैं34 हमारे प्रारंभिक अनुमान के लिए 12√।)
फिर:
e1=4,r′1=11
e2=8,r′2=180
e3=16,r′3=46338
e4=32,r′4=3037000481
हम बाहर काम कर सकते हैं जब तुलना द्वारा पुनरावृत्ति को रोकने के लिए ei सेवा e; यदि मैंने सही गणना की है,ei>2eकाफी अच्छा होना चाहिए। हम यहाँ रुकेंगे, हालाँकि, और पाएंगे:
263−−−√≈3037000481×263231+32=3037000481
सही पूर्णांक वर्गमूल है 3037000499, तो हम बहुत करीब हैं। हम एक और पुनरावृत्ति कर सकते हैं, या एक अनुकूलित अंतिम पुनरावृत्ति कर सकते हैं जो दोगुना नहीं हैei। विवरण एक अभ्यास के रूप में छोड़ दिया जाता है।
इस पद्धति की जटिलता का विश्लेषण करने के लिए, ध्यान दें कि दो गुणा करें b-बिट पूर्णांक लेता है O(blogb)संचालन। हालाँकि, हमने चीजों को व्यवस्थित किया है ताकिr′i<2ei। तो गणना करने के लिए गुणाwi गुणक दो ei-बिट संख्या का उत्पादन करने के लिए एक ei+1-बिट संख्या, और अन्य दो गुणन दो गुणा करते हैं ei+1-बिट संख्या का उत्पादन करने के लिए एक 2ei+1-बिट नंबर।
प्रत्येक मामले में, प्रति पुनरावृत्ति संचालन की संख्या है O(eilogei), और वहाँ है O(loge)पुनरावृत्तियों की आवश्यकता है। के आदेश पर अंतिम गुणा हैO(2elog2e)संचालन। तो समग्र जटिलता हैO(elog2e) संचालन, जो बिट्स की संख्या में उप-द्विघात है x। जो सभी बॉक्स को टिक कर देता है।
हालांकि, यह विश्लेषण एक महत्वपूर्ण सिद्धांत को छिपाता है जिसे बड़े पूर्णांक के साथ काम करने वाले सभी को ध्यान में रखना चाहिए: क्योंकि गुणन बिट्स की संख्या में अत्यधिक है, किसी भी गुणन कार्यों को केवल पूर्णांकों पर ही किया जाना चाहिए, जिसमें वर्तमान परिशुद्धता का परिमाण (और) है , मैं जोड़ सकता हूं, आपको संख्याओं को एक साथ गुणा करने की कोशिश करनी चाहिए जो परिमाण का एक समान क्रम है)। पूर्णांक से अधिक का उपयोग करना प्रयास की बर्बादी है। लगातार कारक मायने रखते हैं, और बड़े पूर्णांकों के लिए, वे बहुत मायने रखते हैं।
अंतिम अवलोकन के रूप में, गुणा के दो रूप हैं ab2c। स्पष्ट रूप से यह बेकार है कि सभी बिट्स की गणना करेंab केवल फेंकने के लिए cउनमें से एक सही बदलाव के साथ दूर। एक स्मार्ट गुणन पद्धति को लागू करना, जो इसे ध्यान में रखता है, एक अभ्यास के रूप में भी छोड़ दिया जाता है।