डिवीजन एल्गोरिदम: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Method for division with remainder}}
{{Short description|Method for division with remainder}}
{{about|पूर्णांकों के विभाजन के लिए एल्गोरिदम|पेंसिल और पेपर एल्गोरिदम|लम्बा विभाजन|एक अद्वितीय भागफल और शेष के अस्तित्व को सिद्ध करने वाला प्रमेय|यूक्लिडियन विभाजन|बहुपदों के लिए विभाजन एल्गोरिथ्म|बहुपदीय विभाजन}}
{{about|पूर्णांकों के विभाजन के लिए एल्गोरिदम|पेंसिल और पेपर एल्गोरिदम|लम्बा विभाजन|एक अद्वितीय भागफल और शेष के अस्तित्व को सिद्ध करने वाला प्रमेय|यूक्लिडियन विभाजन|बहुपदों के लिए विभाजन एल्गोरिथ्म|बहुपदीय विभाजन}}
'''विभाजन एल्गोरिदम''' एक ऐसा एल्गोरिदम है जो [[यूक्लिडियन विभाजन]] के दिये गए दो पूर्णांक परिणाम ''N'' और ''D'' से उनके भागफल या शेषफल की गणना करते हैं। कुछ हाथ से लगाए जाते हैं, जबकि अन्य डिजिटल सर्किट डिजाइन और सॉफ्टवेयर द्वारा नियोजित होते हैं।
'''विभाजन एल्गोरिदम''' एक ऐसा एल्गोरिदम है जो [[यूक्लिडियन विभाजन]] के दिये गए दो पूर्णांक परिणाम ''N'' और ''D'' से उनके भागफल या शेषफल की गणना करते हैं। कुछ को मैन्युअल रूप से किया जाता है जबकि अन्य डिजिटल परिपथ डिजाइन और सॉफ्टवेयर द्वारा नियोजित होते हैं।


जो दो पूर्णांक एन और डी दिए जाने पर यूक्लिडियन डिवीजन का परिणाम, उनके भागफल और / या शेष की गणना करता है।
विभाजन एल्गोरिदम दो मुख्य मध्यम विभाजन और उच्च विभाजन श्रेणियों में आते हैं मध्यम विभाजन एल्गोरिदम प्रति पुनरावृत्ति अंतिम भागफल का एक अंक उत्पन्न करता है। मध्यम विभाजन के उदाहरणों में पुनर्स्थापन, गैर-निष्पादित पुनर्स्थापना, गैर-पुनर्स्थापना और एसआरटी विभाजन सम्मिलित हैं। उच्च विभाजन विधियाँ अंतिम भागफल के सन्निकटन के साथ प्रारम्भ होती हैं और प्रत्येक पुनरावृत्ति पर अंतिम भागफल के दोगुने अंकों का उत्पादन करती हैं। न्यूटन-रफसन और गोल्डश्मिट एल्गोरिदम इसी श्रेणी में के अंतर्गत आते हैं।


विभाजन एल्गोरिदम दो मुख्य श्रेणियों में आते हैं: स्लो विभाजन और फास्ट विभाजन। धीमा विभाजन एल्गोरिदम प्रति पुनरावृत्ति अंतिम भागफल का एक अंक उत्पन्न करता है। धीमे विभाजन के उदाहरणों में पुनर्स्थापन, गैर-निष्पादित पुनर्स्थापना, गैर-पुनर्स्थापना और एसआरटी विभाजन शामिल हैं। तीव्र विभाजन विधियाँ अंतिम भागफल के निकट सन्निकटन के साथ शुरू होती हैं और प्रत्येक पुनरावृत्ति पर अंतिम भागफल के दोगुने अंकों का उत्पादन करती हैं। न्यूटन-रफसन और गोल्डश्मिट एल्गोरिदम इस श्रेणी में आते हैं।
इन एल्गोरिदम के भिन्न तीव्रता से गुणन एल्गोरिदम का उपयोग करने की स्वीकृति देते हैं। इसका परिणाम यह होता है कि बड़े पूर्णांकों के एक विभाजन के लिए आवश्यक कंप्यूटर समय एक समान होता है एक स्थिर कारक या गुणन के लिए आवश्यक समय के रूप में गुणन [[कलन विधि|एल्गोरिथम]] का उपयोग किया जाता है।


इन एल्गोरिदम के वेरिएंट तेजी से गुणा एल्गोरिदम का उपयोग करने की अनुमति देते हैं। इसका परिणाम यह होता है कि, बड़े पूर्णांकों के लिए, एक विभाजन के लिए आवश्यक कंप्यूटर समय एक समान होता है, एक स्थिर कारक तक, गुणन के लिए आवश्यक समय के रूप में, जो भी गुणन [[कलन विधि|एल्गोरिथम]] का उपयोग किया जाता है।
<math>N/D = (Q, R)</math> एक उपयुक्त समीकरण को प्रदर्शित करता है -


चर्चा फॉर्म को संदर्भित करेगी <math>N/D = (Q, R)</math>, कहाँ
जहाँ पर
* एन = अंश (लाभांश)
* N = अंश (लाभांश)
* डी = भाजक (भाजक)
* D = हर (भाजक)
इनपुट है, और
* क्यू = भागफल
* आर = शेष


आउटपुट है।
* ''Q'' = भागफल
* ''R'' = शेषफल


== बार-बार घटाव द्वारा विभाजन ==
== पुनरावर्ती घटाव द्वारा विभाजन ==
सबसे सरल विभाजन एल्गोरिथ्म, ऐतिहासिक रूप से यूक्लिड के तत्वों, पुस्तक VII, प्रस्ताव 1 में प्रस्तुत एक महानतम सामान्य विभाजक एल्गोरिथ्म में शामिल किया गया है, केवल घटाव और तुलना का उपयोग करके शेष दो सकारात्मक पूर्णांक प्राप्त करता है:
यूक्लिड के तत्वों, पुस्तक VII, प्रस्ताव 1 में प्रस्तुत एक महत्तम सामान्य भाजक एल्गोरिथ्म में ऐतिहासिक रूप से सम्मिलित सबसे सरल विभाजन एल्गोरिथ्म केवल घटाव और समतुल्यता का उपयोग करके शेष दो धनात्मक पूर्णांक प्राप्त करता है:
   R:= N Q:= 0
   R:= N Q:= 0
  while R ≥ D do
  while R ≥ D do
Line 26: Line 24:
  end
  end
  return (Q,R)
  return (Q,R)
सबूत है कि भागफल और शेष मौजूद हैं और अद्वितीय हैं (यूक्लिडियन विभाजन में वर्णित) एक पूर्ण विभाजन एल्गोरिदम को जन्म देता है, जो कि नकारात्मक और सकारात्मक दोनों संख्याओं पर लागू होता है, जो कि जोड़, घटाव और तुलना का उपयोग करता है:
यह सिद्ध है कि भागफल और शेषफल दोनों अद्वितीय (यूक्लिडियन विभाजन में वर्णित) रूप से सम्मिलित हैं जो एक पूर्ण विभाजन एल्गोरिदम को उत्पन्न करते है तथा ऋणात्मक और घनात्मक दोनों संख्याओं पर प्रयुक्त होते है जो जोड़, घटाना और समतुल्यता का उपयोग करते है:
   function divide(N, D)  if D = 0 then error(DivisionByZero) end
   function divide(N, D)  if D = 0 then error(DivisionByZero) end
   if D < 0 then (Q, R):= divide(N, −D); return (−Q, R) end
   if D < 0 then (Q, R):= divide(N, −D); return (−Q, R) end
Line 45: Line 43:
   return (Q, R)
   return (Q, R)
  end
  end
यह प्रक्रिया हमेशा R ≥ 0 उत्पन्न करती है। हालांकि बहुत सरल है, यह Ω(Q) कदम उठाती है, और इसलिए लंबे विभाजन जैसे धीमे विभाजन एल्गोरिदम की तुलना में घातीय रूप से धीमी है। यह उपयोगी है अगर क्यू को छोटा माना जाता है ([[आउटपुट-संवेदनशील एल्गोरिदम]] होने के नाते) और एक निष्पादन योग्य विनिर्देश के रूप में काम कर सकता है।
यह प्रक्रिया सदैव R ≥ 0 उत्पन्न करती है। हालांकि बहुत सरल और Ω(Q) के रूप मे होती है इसलिए विस्तृत विभाजन जैसे मध्यम विभाजन एल्गोरिदम की तुलना में घातीय रूप से धीमी होती है। यदि Q को छोटा माना जाता है तो यह [[आउटपुट-संवेदनशील एल्गोरिदम]] तरह उपयोगी होती है और एक निष्पादन योग्य विनिर्देश के रूप में कार्य कर सकती है।


== लंबा विभाजन ==
== विस्तृत विभाजन ==
{{Main|Long division#Algorithm for arbitrary base}}
{{Main|विस्तृत विभाजन# यादृच्छिक आधार के लिए एल्गोरिथम}}
लांग डिवीज़न दशमलव अंकन में व्यक्त बहु-अंकीय संख्याओं के पेन-एंड-पेपर विभाजन के लिए उपयोग किया जाने वाला मानक एल्गोरिथम है। यह प्रत्येक चरण में भाजक के सबसे बड़े संभावित गुणक (अंक स्तर पर) को घटाते हुए, लाभांश के बाएं से दाएं अंत में धीरे-धीरे स्थानांतरित होता है; गुणक तब भागफल के अंक बन जाते हैं, और अंतिम अंतर तब शेषफल होता है।


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


=== पूर्णांक विभाजन (अहस्ताक्षरित) शेष के साथ ===
जब यह एक बाइनरी सूत्र के साथ प्रयोग किया जाता है, तो यह विधि नीचे शेष एल्गोरिथम के साथ (अहस्ताक्षरित) पूर्णांक विभाजन के लिए आधार बनाती है। [[लघु विभाजन]] एक अंकीय भाजक के लिए उपयुक्त विस्तृत विभाजन का संक्षिप्त रूप है। [[चंकिंग (विभाजन)|चंकिंग विभाजन]] - जिसे आंशिक भागफल विधि या हैंगमैन विधि के रूप में भी जाना जाता है यह विस्तृत विभाजन का कम कुशल रूप है जिसे समझना आसान हो सकता है। जिसके वर्तमान के प्रत्येक चरण में जितने गुणक हैं, उससे अधिक गुणकों को घटाने की स्वीकृति देकर, विस्तृत विभाजन का एक अधिक मुक्त रूप संस्करण भी विकसित किया जा सकता है।
{{Main||दीर्घ विभाजन#द्विआधारी विभाजन}}
 
=== शेषफल के साथ पूर्णांक विभाजन (अहस्ताक्षरित) ===
{{Main||विस्तृत विभाजन# बाइनरी विभाजन}}
{{See also|बाइनरी संख्या#विभाजन}}
{{See also|बाइनरी संख्या#विभाजन}}
निम्नलिखित एल्गोरिदम, प्रसिद्ध लंबे विभाजन का बाइनरी संस्करण, एन को डी से विभाजित करेगा, भागफल को क्यू में और शेष को आर में रखकर। निम्नलिखित छद्म कोड में, सभी मानों को अहस्ताक्षरित पूर्णांक के रूप में माना जाता है।
निम्नलिखित एल्गोरिदम, प्रसिद्ध विस्तृत विभाजन का बाइनरी संस्करण, N को D से भागफल को Q में और शेषफल को R में रखकर विभाजित करेगा। निम्नलिखित कूट कोड में, सभी मानों को अहस्ताक्षरित पूर्णांक के रूप में माना जाता है।
  if D = 0 then error(DivisionByZeroException) end
  if D = 0 then error(DivisionByZeroException) end
  Q := 0                  -- भागफल और शेष को शून्य पर प्रारंभ करें
  Q := 0                  -- भागफल और शेष को शून्य पर प्रारंभ करें
  R := 0                     
  R := 0                     
  for i := n − 1 .. 0 do  -- जहाँ n, N में बिट्स की संख्या है
  for i := n − 1 .. 0 do  -- जहाँ n, N में बिट्स की संख्या है
   R := R << 1          -- लेफ्ट-शिफ्ट R 1 बिट से
   R := R << 1          -- लेफ्ट-शिफ्ट R 1 बिट  
   R(0) := N(i)          -- समुच्चय मे अंश के बिट i के बराबर R का न्यूनतम-महत्वपूर्ण बिट
   R(0) := N(i)          -- अंश के i बिट के बराबर R का न्यूनतम-सार्थक बिट समुच्चय
   if R ≥ D then
   if R ≥ D then
     R := R − D
     R := R − D
Line 73: Line 72:


  चरण 1: समुच्चय R=0 और Q=0
  चरण 1: समुच्चय R=0 और Q=0
  चरण 2: i=3 (N में बिट्स की संख्या से एक कम) <br />चरण 3: R=00 (1 द्वारा बाएं स्थानांतरित) <br />चरण 4: R=01 (सेटिंग R(0) से N(i)) <br />चरण 5: R <D इस कथन को छोड़ दे
  चरण 2: i=3 (N में बिट्स की संख्या से एक कम) <br />चरण 3: R=00 (1 द्वारा बाएं स्थानांतरित) <br />चरण 4: R=01 (समुच्चयिंग R(0) से N(i)) <br />चरण 5: R <D इस कथन को छोड़ दे


  चरण 2: समुच्चय i=2<br />चरण 3: R = 010 <br />चरण 4: R = 011 <br />चरण 5: R <D इस कथन को छोड़ दे
  चरण 2: समुच्चय i=2<br />चरण 3: R = 010 <br />चरण 4: R = 011 <br />चरण 5: R <D इस कथन को छोड़ दे
Line 85: Line 84:
  '''end''': Q=11<sub>2</sub> (3<sub>10</sub>) और R=0.
  '''end''': Q=11<sub>2</sub> (3<sub>10</sub>) और R=0.


== धीमी विभाजन विधियाँ ==
== मध्यम विभाजन विधियाँ ==
धीमी विभाजन विधियाँ सभी एक मानक पुनरावृत्ति समीकरण पर आधारित हैं <ref>{{Cite book|last1=Morris|first1=James E.| url=https://books.google.com/books?id=wAhEDwAAQBAJ&q=restoring+division+fixed-point+fractional+numbers&pg=PA243| title=Nanoelectronic Device Applications Handbook|last2=Iniewski|first2=Krzysztof|date=2017-11-22|publisher=CRC Press| isbn=978-1-351-83197-0|language=en}}</ref>
मध्यम विभाजन विधियाँ एक मानक पुनरावृत्ति समीकरण पर आधारित होती हैं <ref>{{Cite book|last1=Morris|first1=James E.| url=https://books.google.com/books?id=wAhEDwAAQBAJ&q=restoring+division+fixed-point+fractional+numbers&pg=PA243| title=Nanoelectronic Device Applications Handbook|last2=Iniewski|first2=Krzysztof|date=2017-11-22|publisher=CRC Press| isbn=978-1-351-83197-0|language=en}}</ref>
:<math>R_{j+1} = B \times R_j - q_{n-(j+1)}\times D ,</math>
:<math>R_{j+1} = B \times R_j - q_{n-(j+1)}\times D ,</math>
कहाँ:
जहाँ पर
* Rj विभाजन का j-वाँ आंशिक शेषफल है
* ''R<sub>j</sub>'' विभाजन का j-वाँ आंशिक शेषफल है
* बी [[मूलांक]] है (आधार, आमतौर पर कंप्यूटर और कैलकुलेटर में आंतरिक रूप से 2)
* B [[मूलांक]] है (आधार, सामान्यतः 2 आंतरिक रूप से कंप्यूटर और कैलकुलेटर में)
* q n − (j + 1) स्थिति n−(j+1) में भागफल का अंक है, जहां अंकों की स्थिति को सबसे महत्वपूर्ण 0 से सबसे महत्वपूर्ण n−1 तक क्रमांकित किया जाता है।
* ''q'' <sub>''n'' − (''j'' + 1)</sub> स्थिति ''n''−(''j''+1) में भागफल का अंक है, जहां अंकों की स्थिति को सबसे सार्थक अंक 0 से सबसे सार्थक अंक n−1 तक क्रमांकित किया जाता है।
* n भागफल में अंकों की संख्या है
* n भागफल में अंकों की संख्या है
* D भाजक है
* D भाजक है


===विभाजन बहाल करना===
===प्रत्यानयन विभाजन===
पुनर्स्थापन विभाजन [[निश्चित बिंदु अंकगणित]] संख्याओं पर संचालित होता है और धारणा 0 <D <N पर निर्भर करता है।{{citation needed|date=February 2012}}


भागफल अंक q अंक समुच्चय {0,1} से बनते हैं।
* प्रत्यानयन विभाजन [[निश्चित बिंदु अंकगणित|निश्चित-बिंदु भिन्नात्मक]] संख्याओं पर संचालित होता है और काल्पनिक संख्या 0 <D <N पर निर्भर करता है।{{citation needed|date=February 2012}}
* भागफल अंक q अंक समुच्चय {0,1} से बनते हैं।
* बाइनरी (सूत्र 2) प्रत्यानयन विभाजन के लिए मूल एल्गोरिथम है:


बाइनरी (रेडिक्स 2) रीस्टोरिंग विभाजन के लिए बुनियादी एल्गोरिथम है:
  R := N
  R := N
  D := D << n            -- R and D need twice the word width of N and Q
  D := D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
  for i := n − 1 .. 0 do  -- For example 31..0 for 32 bits
  for i := n − 1 .. 0 do  -- For example 31..0 for 32 bits
   R := 2 * R − D          -- Trial subtraction from shifted value (multiplication by 2 is a shift in binary representation)
   R := 2 * R − D          -- स्थानांतरित मान से परीक्षण घटाव (2 से गुणा करना बाइनरी प्रतिनिधित्व में परिवर्तन है)
   if R >= 0 then
   if R >= 0 then
     q(i) := 1          -- Result-bit 1
     q(i) := 1          -- परिणामी बिट 1
   else
   else
     q(i) := 0          -- Result-bit 0
     q(i) := 0          -- परिणामी बिट 0
     R := R + D        -- New partial remainder is (restored) shifted value
     R := R + D        -- नया आंशिक शेषफल (पुनर्स्थापना) स्थानांतरित मान है
   end
   end
  end
  end
  जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट
गैर निष्पादित-प्रत्यानयन विभाजन, प्रत्यानयन विभाजन के समान है गैर निष्पादित-प्रत्यानयन विभाजन मे 2R के मान को जोड़ा जाता है, इसलिए R < 0 की स्थिति में D को वापस जोड़ने की आवश्यकता नहीं होती है।


जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट
=== गैर-प्रत्यानयन विभाजन ===
नॉन-परफॉर्मिंग रिस्टोरिंग विभाजन रीस्टोरिंग विभाजन के समान है सिवाय इसके कि 2R का मान सहेजा जाता है, इसलिए R < 0 के मामले में D को वापस जोड़ने की आवश्यकता नहीं है।
गैर-प्रत्यानयन विभाजन {0, 1} के अतिरिक्त भागफल अंकों के लिए अंक समुच्चय {−1, 1} का उपयोग करता है। यह एल्गोरिथ्म अधिक जटिल है लेकिन हार्डवेयर में प्रयुक्त होने पर इसका लाभ यह होता है कि केवल एक ही निर्णय होता है और प्रति अंश बिट में जोड़/घटाव होता है घटाव के बाद कोई प्रत्यानयन भाग नहीं होता है<ref>{{Cite journal |last=Shaw |first=Robert F. |date=1950 |title=Arithmetic Operations in a Binary Computer |url=http://aip.scitation.org/doi/10.1063/1.1745692 |journal=Review of Scientific Instruments |language=en |volume=21 |issue=8 |pages=690 |doi=10.1063/1.1745692 |bibcode=1950RScI...21..687S |issn=0034-6748}}</ref> जो संभावित रूप से संचालन की संख्या को आधे तक कम कर देता है और इसे तीव्रता से निष्पादित करने की स्वीकृति देता है।<ref>{{Cite web|url=https://web.stanford.edu/class/ee486/doc/chap5.pdf|title=Stanford EE486 (Advanced Computer Arithmetic Division){{snd}} Chapter 5 Handout (Division)|last=Flynn|website=Stanford University}}</ref> गैर-ऋणात्मक संख्याओं के बाइनरी (मूलांक 2) गैर-प्रत्यानयन विभाजन के लिए मूल एल्गोरिथ्म है:  
 
=== गैर-पुनर्स्थापना विभाजन ===
गैर-पुनर्स्थापना विभाजन {0, 1} के बजाय भागफल अंकों के लिए अंक सेट {−1, 1} का उपयोग करता है। एल्गोरिथ्म अधिक जटिल है, लेकिन हार्डवेयर में लागू होने पर इसका लाभ होता है कि केवल एक ही निर्णय होता है और प्रति अंश बिट में जोड़/घटाव होता है; घटाव के बाद कोई पुनर्स्थापना कदम नहीं है<ref>{{Cite journal |last=Shaw |first=Robert F. |date=1950 |title=Arithmetic Operations in a Binary Computer |url=http://aip.scitation.org/doi/10.1063/1.1745692 |journal=Review of Scientific Instruments |language=en |volume=21 |issue=8 |pages=690 |doi=10.1063/1.1745692 |bibcode=1950RScI...21..687S |issn=0034-6748}}</ref> जो संभावित रूप से संचालन की संख्या को आधे तक कम कर देता है और इसे तेजी से निष्पादित करने देता है।<ref>{{Cite web|url=https://web.stanford.edu/class/ee486/doc/chap5.pdf|title=Stanford EE486 (Advanced Computer Arithmetic Division){{snd}} Chapter 5 Handout (Division)|last=Flynn|website=Stanford University}}</ref> गैर-नकारात्मक संख्याओं के बाइनरी (मूलांक 2) गैर-पुनर्स्थापना विभाजन के लिए मूल एल्गोरिथ्म है:  
  R := N
  R := N
  D := D << n            -- R and D need twice the word width of N and Q
  D := D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
  for i = n − 1 .. 0 do  -- for example 31..0 for 32 bits
  for i = n − 1 .. 0 do  -- उदाहरण 31..0 के लिए 32 बिट
   if R >= 0 then
   if R >= 0 then
     q(i) := +1
     q(i) := +1
Line 129: Line 128:
   end if
   end if
  end
  end
 
  जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट
जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट
इस एल्गोरिथम के बाद, भागफल एक गैर-मानक रूप में होता है जिसमें -1 और +1 के अंक होते हैं। अंतिम भागफल बनाने के लिए इस विधि को बाइनरी में परिवर्तित करने की अवश्यकता है। उदाहरण के लिए -
इस एल्गोरिथम के बाद, भागफल एक गैर-मानक रूप में होता है जिसमें -1 और +1 के अंक होते हैं। अंतिम भागफल बनाने के लिए इस फॉर्म को बाइनरी में बदलने की जरूरत है। उदाहरण:
{| border="0" cellpadding="0"
{| border="0" cellpadding="0"
| colspan="2" |निम्न भागफल को अंकों के सेट {0,1} में बदलें:
| colspan="2" |निम्न भागफल को अंकों के समुच्चय {0,1} में बदलें:
|-
|-
|प्रारम्भ || <math>Q = 111\bar{1}1\bar{1}1\bar{1}</math>
|प्रारम्भ || <math>Q = 111\bar{1}1\bar{1}1\bar{1}</math>
Line 145: Line 143:
| colspan="2" |*.( Signed binary notation with [[one's complement]] without [[two's complement]])  
| colspan="2" |*.( Signed binary notation with [[one's complement]] without [[two's complement]])  
|}
|}
यदि −1 के अंक <math>Q</math> शून्य (0) के रूप में संग्रहीत किया जाता है जैसा कि आम है <math>P</math> है <math>Q</math> और कंप्यूटिंग <math>M</math> तुच्छ है: मूल पर एक का पूरक (थोड़ा-थोड़ा पूरक) करें <math>Q</math>.
'''यदि −1 के अंक <math>Q</math> शून्य (0) के रूप में संग्रहीत किया जाता है जैसा''' कि आम है <math>P</math> है <math>Q</math> और कंप्यूटिंग <math>M</math> तुच्छ है: मूल पर एक का पूरक (थोड़ा-थोड़ा पूरक) करें <math>Q</math>.
<वाक्यविन्यास लैंग = लुआ>
<वाक्यविन्यास लैंग = लुआ>
Q := Q − bit.bnot(Q) -- उपयुक्त है यदि Q में −1 अंकों को शून्य के रूप में दर्शाया जाता है जैसा कि सामान्य है।
Q := Q − bit.bnot(Q) -- उपयुक्त है यदि Q में −1 अंकों को शून्य के रूप में दर्शाया जाता है जैसा कि सामान्य है।
Line 160: Line 158:
एसआरटी विभाजन कई [[माइक्रोप्रोसेसर]] कार्यान्वयन में विभाजन के लिए एक लोकप्रिय तरीका है।<ref>{{cite techreport |url=http://pages.hmc.edu/harris/research/srtlong.pdf |title=SRT Division: Architectures, Models, and Implementations |first1=David L. |last1=Harris |first2=Stuart F. |last2=Oberman |first3=Mark A. |last3=Horowitz |publisher=Stanford University |date=9 September 1998}}</ref><ref>{{cite journal |url=https://ieeexplore.ieee.org/document/614875 |title=SRT Division Algorithms as Dynamical Systems |first1=Mark |last1=McCann |first2=Nicholas |last2=Pippenger |journal=SIAM Journal on Computing |volume=34 |issue=6 |pages=1279–1301 |year=2005 |doi=10.1137/S009753970444106X |citeseerx=10.1.1.72.6993}}</ref> एल्गोरिदम का नाम डी.डब्ल्यू. [[आईबीएम]] के स्वीनी, [[इलिनोइस विश्वविद्यालय]] के जेम्स ई। रॉबर्टसन और [[इंपीरियल कॉलेज लंदन]] के केडी टॉचर। उन सभी ने लगभग एक ही समय में स्वतंत्र रूप से एल्गोरिदम विकसित किया (क्रमशः फरवरी 1957, सितंबर 1958 और जनवरी 1958 में प्रकाशित)।<ref>{{Citation |title=High speed arithmetic in a parallel device |last1=Cocke |first1=John |pages=20 |url=https://www.computerhistory.org/collections/catalog/102632302 |publication-date=11 February 1957 |last2=Sweeney |first2=D.W. |type=Company Memo |publication-place=IBM}}</ref><ref>{{Cite journal |title=A New Class of Digital Division Methods |journal=IRE Transactions on Electronic Computers |url=https://ieeexplore.ieee.org/document/5222579 |last=Robertson |first=James |date=1958-09-01 |volume=EC-7 |pages=218–222 |publisher=IEEE|doi=10.1109/TEC.1958.5222579 |hdl=2027/uiuo.ark:/13960/t0gt7529c |hdl-access=free }}</ref><ref>{{Cite journal |title=TECHNIQUES OF MULTIPLICATION AND DIVISION FOR AUTOMATIC BINARY COMPUTERS |journal=The Quarterly Journal of Mechanics and Applied Mathematics |url=https://academic.oup.com/qjmam/article-abstract/11/3/364/1883426 |last=Tocher |first=K.D. |date=1958-01-01 |issue=3 |volume=11 |pages=20}}</ref>
एसआरटी विभाजन कई [[माइक्रोप्रोसेसर]] कार्यान्वयन में विभाजन के लिए एक लोकप्रिय तरीका है।<ref>{{cite techreport |url=http://pages.hmc.edu/harris/research/srtlong.pdf |title=SRT Division: Architectures, Models, and Implementations |first1=David L. |last1=Harris |first2=Stuart F. |last2=Oberman |first3=Mark A. |last3=Horowitz |publisher=Stanford University |date=9 September 1998}}</ref><ref>{{cite journal |url=https://ieeexplore.ieee.org/document/614875 |title=SRT Division Algorithms as Dynamical Systems |first1=Mark |last1=McCann |first2=Nicholas |last2=Pippenger |journal=SIAM Journal on Computing |volume=34 |issue=6 |pages=1279–1301 |year=2005 |doi=10.1137/S009753970444106X |citeseerx=10.1.1.72.6993}}</ref> एल्गोरिदम का नाम डी.डब्ल्यू. [[आईबीएम]] के स्वीनी, [[इलिनोइस विश्वविद्यालय]] के जेम्स ई। रॉबर्टसन और [[इंपीरियल कॉलेज लंदन]] के केडी टॉचर। उन सभी ने लगभग एक ही समय में स्वतंत्र रूप से एल्गोरिदम विकसित किया (क्रमशः फरवरी 1957, सितंबर 1958 और जनवरी 1958 में प्रकाशित)।<ref>{{Citation |title=High speed arithmetic in a parallel device |last1=Cocke |first1=John |pages=20 |url=https://www.computerhistory.org/collections/catalog/102632302 |publication-date=11 February 1957 |last2=Sweeney |first2=D.W. |type=Company Memo |publication-place=IBM}}</ref><ref>{{Cite journal |title=A New Class of Digital Division Methods |journal=IRE Transactions on Electronic Computers |url=https://ieeexplore.ieee.org/document/5222579 |last=Robertson |first=James |date=1958-09-01 |volume=EC-7 |pages=218–222 |publisher=IEEE|doi=10.1109/TEC.1958.5222579 |hdl=2027/uiuo.ark:/13960/t0gt7529c |hdl-access=free }}</ref><ref>{{Cite journal |title=TECHNIQUES OF MULTIPLICATION AND DIVISION FOR AUTOMATIC BINARY COMPUTERS |journal=The Quarterly Journal of Mechanics and Applied Mathematics |url=https://academic.oup.com/qjmam/article-abstract/11/3/364/1883426 |last=Tocher |first=K.D. |date=1958-01-01 |issue=3 |volume=11 |pages=20}}</ref>


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


सबसे महत्वपूर्ण अंतर यह है कि भागफल के लिए अनावश्यक प्रतिनिधित्व का उपयोग किया जाता है। उदाहरण के लिए, रेडिक्स-4 एसआरटी विभाजन को लागू करते समय, प्रत्येक भागफल अंक को पांच संभावनाओं {−2, −1, 0, +1, +2} में से चुना जाता है। इस वजह से, भागफल अंक का चुनाव सही नहीं होना चाहिए बाद में भागफल अंक मामूली त्रुटियों के लिए सही हो सकते हैं। (उदाहरण के लिए, भागफल अंक जोड़े (0, +2) और (1, -2) समतुल्य हैं, क्योंकि 0×4+2 = 1×4−2।) यह सहिष्णुता भागफल अंकों को केवल कुछ का उपयोग करके चुनने की अनुमति देती है। पूर्ण-चौड़ाई घटाव की आवश्यकता के बजाय लाभांश और भाजक के सबसे महत्वपूर्ण बिट। बदले में यह सरलीकरण 2 से अधिक मूलांक का उपयोग करने की अनुमति देता है।
सबसे महत्वपूर्ण अंतर यह है कि भागफल के लिए अनावश्यक प्रतिनिधित्व का उपयोग किया जाता है। उदाहरण के लिए, रेडिक्स-4 एसआरटी विभाजन को लागू करते समय, प्रत्येक भागफल अंक को पांच संभावनाओं {−2, −1, 0, +1, +2} में से चुना जाता है। इस वजह से, भागफल अंक का चुनाव सही नहीं होना चाहिए बाद में भागफल अंक मामूली त्रुटियों के लिए सही हो सकते हैं। (उदाहरण के लिए, भागफल अंक जोड़े (0, +2) और (1, -2) समतुल्य हैं, क्योंकि 0×4+2 = 1×4−2।) यह सहिष्णुता भागफल अंकों को केवल कुछ का उपयोग करके चुनने की स्वीकृति देती है। पूर्ण-चौड़ाई घटाव की आवश्यकता के बजाय लाभांश और भाजक के सबसे महत्वपूर्ण बिट। बदले में यह सरलीकरण 2 से अधिक मूलांक का उपयोग करने की स्वीकृति देता है।


गैर-पुनर्स्थापना विभाजन की तरह, अंतिम चरण अंतिम भागफल बिट को हल करने के लिए अंतिम पूर्ण-चौड़ाई घटाव है, और भागफल का मानक बाइनरी रूप में रूपांतरण।
गैर-प्रत्यानयन विभाजन की तरह, अंतिम चरण अंतिम भागफल बिट को हल करने के लिए अंतिम पूर्ण-चौड़ाई घटाव है, और भागफल का मानक बाइनरी रूप में रूपांतरण।


[[मूल इंटेल पेंटियम (P5 माइक्रोआर्किटेक्चर)]] प्रोसेसर का कुख्यात फ़्लोटिंग-पॉइंट विभाजन बग [[पेंटियम FDIV बग|(एफडीआईवी)]] गलत कोडित लुकअप [[तालिका देखो|तालिका]] के कारण हुआ था। 1066 प्रविष्टियों में से पांच को गलती से छोड़ दिया गया था। <ref>{{cite web |url=http://www.intel.com/support/processors/pentium/sb/cs-012997.htm |title=Statistical Analysis of Floating Point Flaw |publisher=Intel Corporation |year=1994 |access-date=22 October 2013 }}</ref><ref>{{cite techreport |url=http://i.stanford.edu/pub/cstr/reports/csl/tr/95/675/CSL-TR-95-675.pdf |title=An Analysis of Division Algorithms and Implementations|first1=Stuart F. |last1=Oberman |first2=Michael J. |last2=Flynn |id=CSL-TR-95-675 |date=July 1995 |publisher=Stanford University}}</ref>
[[मूल इंटेल पेंटियम (P5 माइक्रोआर्किटेक्चर)]] प्रोसेसर का कुख्यात फ़्लोटिंग-पॉइंट विभाजन बग [[पेंटियम FDIV बग|(एफडीआईवी)]] गलत कोडित लुकअप [[तालिका देखो|तालिका]] के कारण हुआ था। 1066 प्रविष्टियों में से पांच को गलती से छोड़ दिया गया था। <ref>{{cite web |url=http://www.intel.com/support/processors/pentium/sb/cs-012997.htm |title=Statistical Analysis of Floating Point Flaw |publisher=Intel Corporation |year=1994 |access-date=22 October 2013 }}</ref><ref>{{cite techreport |url=http://i.stanford.edu/pub/cstr/reports/csl/tr/95/675/CSL-TR-95-675.pdf |title=An Analysis of Division Algorithms and Implementations|first1=Stuart F. |last1=Oberman |first2=Michael J. |last2=Flynn |id=CSL-TR-95-675 |date=July 1995 |publisher=Stanford University}}</ref>
Line 176: Line 174:
# भाजक के व्युत्क्रम द्वारा लाभांश को गुणा करके भागफल की गणना करें: <math>Q = N X_S</math>.
# भाजक के व्युत्क्रम द्वारा लाभांश को गुणा करके भागफल की गणना करें: <math>Q = N X_S</math>.


के व्युत्क्रम को खोजने के लिए न्यूटन की विधि को लागू करने के लिए <math>D</math>, एक फ़ंक्शन खोजना आवश्यक है <math>f(X)</math> जिसमें शून्य है <math>X=1/D</math>. स्पष्ट ऐसा कार्य है <math>f(X)=DX-1</math>, लेकिन इसके लिए न्यूटन-रैफसन पुनरावृत्ति अनुपयोगी है, क्योंकि इसके व्युत्क्रम को जाने बिना इसकी गणना नहीं की जा सकती <math>D</math> (इसके अलावा यह पुनरावृत्त सुधारों की अनुमति देने के बजाय एक चरण में सटीक पारस्परिक गणना करने का प्रयास करता है)। कार्य करने वाला कार्य है <math>f(X)=(1/X)-D</math>, जिसके लिए न्यूटन-रफसन पुनरावृति देता है
के व्युत्क्रम को खोजने के लिए न्यूटन की विधि को लागू करने के लिए <math>D</math>, एक फ़ंक्शन खोजना आवश्यक है <math>f(X)</math> जिसमें शून्य है <math>X=1/D</math>. स्पष्ट ऐसा कार्य है <math>f(X)=DX-1</math>, लेकिन इसके लिए न्यूटन-रैफसन पुनरावृत्ति अनुपयोगी है, क्योंकि इसके व्युत्क्रम को जाने बिना इसकी गणना नहीं की जा सकती <math>D</math> (इसके अलावा यह पुनरावृत्त सुधारों की स्वीकृति देने के बजाय एक चरण में सटीक पारस्परिक गणना करने का प्रयास करता है)। कार्य करने वाला कार्य है <math>f(X)=(1/X)-D</math>, जिसके लिए न्यूटन-रफसन पुनरावृति देता है
: <math>X_{i+1} = X_i - {f(X_i)\over f'(X_i)} = X_i - {1/X_i - D\over -1/X_i^2} = X_i + X_i(1-DX_i) = X_i(2-DX_i),</math>
: <math>X_{i+1} = X_i - {f(X_i)\over f'(X_i)} = X_i - {1/X_i - D\over -1/X_i^2} = X_i + X_i(1-DX_i) = X_i(2-DX_i),</math>
जिससे गणना की जा सकती है <math>X_i</math> केवल गुणा और घटाव का उपयोग करना, या दो जुड़े हुए गुणा-जोड़ का उपयोग करना।
जिससे गणना की जा सकती है <math>X_i</math> केवल गुणा और घटाव का उपयोग करना, या दो जुड़े हुए गुणा-जोड़ का उपयोग करना।
Line 190: Line 188:
               &= {\varepsilon_i}^2. \\
               &= {\varepsilon_i}^2. \\
\end{align}</math>
\end{align}</math>
प्रत्येक पुनरावृत्ति चरण में त्रुटि का यह वर्ग{{snd}} तथाकथित न्यूटन की विधि#न्यूटन-रैफसन की विधि के व्यावहारिक विचार{{snd}} इसका प्रभाव यह है कि परिणाम में सही अंकों की संख्या लगभग प्रत्येक पुनरावृत्ति के लिए दोगुनी हो जाती है, एक संपत्ति जो अत्यंत मानवान हो जाती है जब शामिल संख्याओं में कई अंक होते हैं (जैसे बड़े पूर्णांक डोमेन में)। लेकिन इसका मतलब यह भी है कि विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है, खासकर यदि प्रारंभिक अनुमान <math>X_0</math> खराब चुना गया है।
प्रत्येक पुनरावृत्ति चरण में त्रुटि का यह वर्ग{{snd}} तथाकथित न्यूटन की विधि#न्यूटन-रैफसन की विधि के व्यावहारिक विचार{{snd}} इसका प्रभाव यह है कि परिणाम में सही अंकों की संख्या लगभग प्रत्येक पुनरावृत्ति के लिए दोगुनी हो जाती है, एक संपत्ति जो अत्यंत मानवान हो जाती है जब सम्मिलित संख्याओं में कई अंक होते हैं (जैसे बड़े पूर्णांक डोमेन में)। लेकिन इसका मतलब यह भी है कि विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है, खासकर यदि प्रारंभिक अनुमान <math>X_0</math> खराब चुना गया है।


प्रारंभिक अनुमान चुनने की उप-समस्या के लिए <math>X_0</math>, इसे स्केल करने के लिए भाजक D पर बिट-शिफ्ट लागू करना सुविधाजनक है ताकि 0.5 ≤ D ≤ 1; अंश N पर समान बिट-शिफ्ट लगाने से, यह सुनिश्चित होता है कि भागफल नहीं बदलता है। तब कोई रूप में एक रेखीय [[सन्निकटन]] का उपयोग कर सकता है
प्रारंभिक अनुमान चुनने की उप-समस्या के लिए <math>X_0</math>, इसे स्केल करने के लिए भाजक D पर बिट-शिफ्ट लागू करना सुविधाजनक है ताकि 0.5 ≤ D ≤ 1; अंश N पर समान बिट-शिफ्ट लगाने से, यह सुनिश्चित होता है कि भागफल नहीं बदलता है। तब कोई रूप में एक रेखीय [[सन्निकटन]] का उपयोग कर सकता है
Line 254: Line 252:
Goldschmidt पद्धति का उपयोग [[AMD]] Athlon CPU और बाद के मॉडल में किया जाता है।<ref>{{cite journal |first=Stuart F. |last=Oberman |title=Floating Point Division and Square Root Algorithms and Implementation in the AMD-K7 Microprocessor |journal=Proceedings of the IEEE Symposium on Computer Arithmetic |pages=106&ndash;115 |date=1999 |doi=10.1109/ARITH.1999.762835 |s2cid=12793819 |url=http://www.acsel-lab.com/arithmetic/arith14/papers/ARITH14_Oberman.pdf }}</ref><ref>{{cite journal |first1=Peter |last1=Soderquist |first2=Miriam |last2=Leeser |title=Division and Square Root: Choosing the Right Implementation |journal=IEEE Micro |volume=17 |issue=4 |pages=56&ndash;66 |date=July–August 1997 |url=https://www.researchgate.net/publication/2511700 |doi=10.1109/40.612224 }}</ref> इसे एंडरसन अर्ल गोल्डश्मिड्ट पॉवर्स (एईजीपी) एल्गोरिथम के रूप में भी जाना जाता है और इसे विभिन्न आईबीएम प्रोसेसर द्वारा कार्यान्वित किया जाता है।<ref>S. F. Anderson, J. G. Earle, R. E. Goldschmidt, D. M. Powers. ''The IBM 360/370 model 91: floating-point execution unit'', [[IBM Journal of Research and Development]], January 1997</ref><ref name="goldschmidt-analysis">{{cite journal |last1=Guy |first1=Even |last2=Peter |first2=Siedel |last3=Ferguson |first3=Warren |title=A parametric error analysis of Goldschmidt's division algorithm |journal=Journal of Computer and System Sciences |date=1 February 2005 |volume=70 |issue=1 |pages=118–139 |doi=10.1016/j.jcss.2004.08.004 |doi-access=free }}</ref> यद्यपि यह न्यूटन-रैफसन कार्यान्वयन के समान दर पर अभिसरण करता है, गोल्डस्मिथ पद्धति का एक लाभ यह है कि अंश और भाजक में गुणा समानांतर में किया जा सकता है।<ref name="goldschmidt-analysis" />
Goldschmidt पद्धति का उपयोग [[AMD]] Athlon CPU और बाद के मॉडल में किया जाता है।<ref>{{cite journal |first=Stuart F. |last=Oberman |title=Floating Point Division and Square Root Algorithms and Implementation in the AMD-K7 Microprocessor |journal=Proceedings of the IEEE Symposium on Computer Arithmetic |pages=106&ndash;115 |date=1999 |doi=10.1109/ARITH.1999.762835 |s2cid=12793819 |url=http://www.acsel-lab.com/arithmetic/arith14/papers/ARITH14_Oberman.pdf }}</ref><ref>{{cite journal |first1=Peter |last1=Soderquist |first2=Miriam |last2=Leeser |title=Division and Square Root: Choosing the Right Implementation |journal=IEEE Micro |volume=17 |issue=4 |pages=56&ndash;66 |date=July–August 1997 |url=https://www.researchgate.net/publication/2511700 |doi=10.1109/40.612224 }}</ref> इसे एंडरसन अर्ल गोल्डश्मिड्ट पॉवर्स (एईजीपी) एल्गोरिथम के रूप में भी जाना जाता है और इसे विभिन्न आईबीएम प्रोसेसर द्वारा कार्यान्वित किया जाता है।<ref>S. F. Anderson, J. G. Earle, R. E. Goldschmidt, D. M. Powers. ''The IBM 360/370 model 91: floating-point execution unit'', [[IBM Journal of Research and Development]], January 1997</ref><ref name="goldschmidt-analysis">{{cite journal |last1=Guy |first1=Even |last2=Peter |first2=Siedel |last3=Ferguson |first3=Warren |title=A parametric error analysis of Goldschmidt's division algorithm |journal=Journal of Computer and System Sciences |date=1 February 2005 |volume=70 |issue=1 |pages=118–139 |doi=10.1016/j.jcss.2004.08.004 |doi-access=free }}</ref> यद्यपि यह न्यूटन-रैफसन कार्यान्वयन के समान दर पर अभिसरण करता है, गोल्डस्मिथ पद्धति का एक लाभ यह है कि अंश और भाजक में गुणा समानांतर में किया जा सकता है।<ref name="goldschmidt-analysis" />
==== [[द्विपद प्रमेय]] ====
==== [[द्विपद प्रमेय]] ====
गोल्डश्मिट विधि का उपयोग उन कारकों के साथ किया जा सकता है जो द्विपद प्रमेय द्वारा सरलीकरण की अनुमति देते हैं।
गोल्डश्मिट विधि का उपयोग उन कारकों के साथ किया जा सकता है जो द्विपद प्रमेय द्वारा सरलीकरण की स्वीकृति देते हैं।
मान लें कि एन/डी को [[दो की शक्ति]] से बढ़ाया गया है <math>D\in(\tfrac{1}{2},1]</math>.
मान लें कि एन/डी को [[दो की शक्ति]] से बढ़ाया गया है <math>D\in(\tfrac{1}{2},1]</math>.
हम चुनते हैं <math>D = 1-x</math> और <math>F_{i} = 1+x^{2^i}</math>.
हम चुनते हैं <math>D = 1-x</math> और <math>F_{i} = 1+x^{2^i}</math>.
Line 275: Line 273:


== बड़े-पूर्णांक तरीके ==
== बड़े-पूर्णांक तरीके ==
हार्डवेयर कार्यान्वयन के लिए डिज़ाइन किए गए तरीके आमतौर पर हजारों या लाखों दशमलव अंकों के साथ पूर्णांकों को मापते नहीं हैं; ये अक्सर होते हैं, उदाहरण के लिए, [[क्रिप्टोग्राफी]] में [[मॉड्यूलर अंकगणित|मॉड्यूलर]] कटौती में। इन बड़े पूर्णांकों के लिए, अधिक कुशल विभाजन एल्गोरिदम समस्या को कम संख्या में गुणन का उपयोग करने के लिए रूपांतरित करते हैं, जो तब [[करत्सुबा एल्गोरिथम]], टूम-कुक गुणन या शॉनहेज-स्ट्रैसन एल्गोरिथम जैसे असम्बद्ध रूप से कुशल गुणन एल्गोरिथ्म का उपयोग करके किया जा सकता है। परिणाम यह है कि विभाजन की कम्प्यूटेशनल जटिलता गुणा के समान क्रम (गुणक स्थिरांक तक) की है। उदाहरणों में ऊपर वर्णित न्यूटन की विधि द्वारा गुणा में कमी शामिल है<ref>{{Cite thesis |degree=M.Sc. in Computer Science |title=Fast Division of Large Integers: A Comparison of Algorithms |url=https://treskal.com/s/masters-thesis.pdf |last=Hasselström |first=Karl |year=2003 |publisher=Royal Institute of Technology |access-date=2017-07-08 |archive-date=8 July 2017 |archive-url=https://web.archive.org/web/20170708221722/https://static1.squarespace.com/static/5692a9ad7086d724272eb00a/t/5692dbe6b204d50df79e577f/1452465127528/masters-thesis.pdf}}</ref> साथ ही थोड़ा तेज [[बर्निकेल-ज़ीग्लर डिवीजन|बर्निकेल-ज़ीग्लर विभाजन]]<ref>{{citation |url=https://domino.mpi-inf.mpg.de/internet/reports.nsf/efc044f1568a0058c125642e0064c817/a8cfefdd1ac031bbc125669b00493127/$FILE/MPI-I-98-1-022.ps |title=Fast Recursive Division |first=Christoph Burnikel |last=Joachim Ziegler |year=1998 |location=Max-Planck-Institut für Informatik }}</ref> [[बैरेट कमी]] और [[मोंटगोमरी कमी]] एल्गोरिदम।<ref>{{cite conference |url=http://portal.acm.org/citation.cfm?id=36688 |title=Implementing the Rivest Shamir and Adleman public key encryption algorithm on a standard digital signal processor |first=Paul |last=Barrett |year=1987 |publisher=Springer-Verlag |book-title=Proceedings on Advances in cryptology---CRYPTO '86 |pages=311&ndash;323 |location=London, UK |isbn=0-387-18047-8 }}</ref>{{verification needed|date=June 2015|reason=Barrett reduction is usually understood to be the algorithm for computing the remainder that one gets from having precomputed the inverse of the denominator. Rather than providing a solution to the problem of division, it requires that a separate solution is already available!}}  न्यूटन की विधि परिदृश्यों में विशेष रूप से कुशल है जहां एक ही विभाजक द्वारा कई बार विभाजित किया जाना चाहिए, क्योंकि प्रारंभिक न्यूटन व्युत्क्रम के बाद प्रत्येक विभाजन के लिए केवल एक (संक्षिप्त) गुणन की आवश्यकता होती है।
हार्डवेयर कार्यान्वयन के लिए डिज़ाइन किए गए तरीके आमतौर पर हजारों या लाखों दशमलव अंकों के साथ पूर्णांकों को मापते नहीं हैं; ये अक्सर होते हैं, उदाहरण के लिए, [[क्रिप्टोग्राफी]] में [[मॉड्यूलर अंकगणित|मॉड्यूलर]] कटौती में। इन बड़े पूर्णांकों के लिए, अधिक कुशल विभाजन एल्गोरिदम समस्या को कम संख्या में गुणन का उपयोग करने के लिए रूपांतरित करते हैं, जो तब [[करत्सुबा एल्गोरिथम]], टूम-कुक गुणन या शॉनहेज-स्ट्रैसन एल्गोरिथम जैसे असम्बद्ध रूप से कुशल गुणन एल्गोरिथ्म का उपयोग करके किया जा सकता है। परिणाम यह है कि विभाजन की कम्प्यूटेशनल जटिलता गुणा के समान क्रम (गुणक स्थिरांक तक) की है। उदाहरणों में ऊपर वर्णित न्यूटन की विधि द्वारा गुणा में कमी सम्मिलित है<ref>{{Cite thesis |degree=M.Sc. in Computer Science |title=Fast Division of Large Integers: A Comparison of Algorithms |url=https://treskal.com/s/masters-thesis.pdf |last=Hasselström |first=Karl |year=2003 |publisher=Royal Institute of Technology |access-date=2017-07-08 |archive-date=8 July 2017 |archive-url=https://web.archive.org/web/20170708221722/https://static1.squarespace.com/static/5692a9ad7086d724272eb00a/t/5692dbe6b204d50df79e577f/1452465127528/masters-thesis.pdf}}</ref> साथ ही थोड़ा तेज [[बर्निकेल-ज़ीग्लर डिवीजन|बर्निकेल-ज़ीग्लर विभाजन]]<ref>{{citation |url=https://domino.mpi-inf.mpg.de/internet/reports.nsf/efc044f1568a0058c125642e0064c817/a8cfefdd1ac031bbc125669b00493127/$FILE/MPI-I-98-1-022.ps |title=Fast Recursive Division |first=Christoph Burnikel |last=Joachim Ziegler |year=1998 |location=Max-Planck-Institut für Informatik }}</ref> [[बैरेट कमी]] और [[मोंटगोमरी कमी]] एल्गोरिदम।<ref>{{cite conference |url=http://portal.acm.org/citation.cfm?id=36688 |title=Implementing the Rivest Shamir and Adleman public key encryption algorithm on a standard digital signal processor |first=Paul |last=Barrett |year=1987 |publisher=Springer-Verlag |book-title=Proceedings on Advances in cryptology---CRYPTO '86 |pages=311&ndash;323 |location=London, UK |isbn=0-387-18047-8 }}</ref>{{verification needed|date=June 2015|reason=Barrett reduction is usually understood to be the algorithm for computing the remainder that one gets from having precomputed the inverse of the denominator. Rather than providing a solution to the problem of division, it requires that a separate solution is already available!}}  न्यूटन की विधि परिदृश्यों में विशेष रूप से कुशल है जहां एक ही विभाजक द्वारा कई बार विभाजित किया जाना चाहिए, क्योंकि प्रारंभिक न्यूटन व्युत्क्रम के बाद प्रत्येक विभाजन के लिए केवल एक (संक्षिप्त) गुणन की आवश्यकता होती है।


== एक स्थिर द्वारा विभाजन ==
== एक स्थिर द्वारा विभाजन ==

Revision as of 23:56, 12 February 2023

विभाजन एल्गोरिदम एक ऐसा एल्गोरिदम है जो यूक्लिडियन विभाजन के दिये गए दो पूर्णांक परिणाम N और D से उनके भागफल या शेषफल की गणना करते हैं। कुछ को मैन्युअल रूप से किया जाता है जबकि अन्य डिजिटल परिपथ डिजाइन और सॉफ्टवेयर द्वारा नियोजित होते हैं।

विभाजन एल्गोरिदम दो मुख्य मध्यम विभाजन और उच्च विभाजन श्रेणियों में आते हैं मध्यम विभाजन एल्गोरिदम प्रति पुनरावृत्ति अंतिम भागफल का एक अंक उत्पन्न करता है। मध्यम विभाजन के उदाहरणों में पुनर्स्थापन, गैर-निष्पादित पुनर्स्थापना, गैर-पुनर्स्थापना और एसआरटी विभाजन सम्मिलित हैं। उच्च विभाजन विधियाँ अंतिम भागफल के सन्निकटन के साथ प्रारम्भ होती हैं और प्रत्येक पुनरावृत्ति पर अंतिम भागफल के दोगुने अंकों का उत्पादन करती हैं। न्यूटन-रफसन और गोल्डश्मिट एल्गोरिदम इसी श्रेणी में के अंतर्गत आते हैं।

इन एल्गोरिदम के भिन्न तीव्रता से गुणन एल्गोरिदम का उपयोग करने की स्वीकृति देते हैं। इसका परिणाम यह होता है कि बड़े पूर्णांकों के एक विभाजन के लिए आवश्यक कंप्यूटर समय एक समान होता है एक स्थिर कारक या गुणन के लिए आवश्यक समय के रूप में गुणन एल्गोरिथम का उपयोग किया जाता है।

एक उपयुक्त समीकरण को प्रदर्शित करता है -

जहाँ पर

  • N = अंश (लाभांश)
  • D = हर (भाजक)
  • Q = भागफल
  • R = शेषफल

पुनरावर्ती घटाव द्वारा विभाजन

यूक्लिड के तत्वों, पुस्तक VII, प्रस्ताव 1 में प्रस्तुत एक महत्तम सामान्य भाजक एल्गोरिथ्म में ऐतिहासिक रूप से सम्मिलित सबसे सरल विभाजन एल्गोरिथ्म केवल घटाव और समतुल्यता का उपयोग करके शेष दो धनात्मक पूर्णांक प्राप्त करता है:

 R:= N Q:= 0
while R ≥ D do
  R:= R − D
  Q:= Q + 1
end
return (Q,R)

यह सिद्ध है कि भागफल और शेषफल दोनों अद्वितीय (यूक्लिडियन विभाजन में वर्णित) रूप से सम्मिलित हैं जो एक पूर्ण विभाजन एल्गोरिदम को उत्पन्न करते है तथा ऋणात्मक और घनात्मक दोनों संख्याओं पर प्रयुक्त होते है जो जोड़, घटाना और समतुल्यता का उपयोग करते है:

 function divide(N, D)  if D = 0 then error(DivisionByZero) end
  if D < 0 then (Q, R):= divide(N, −D); return (−Q, R) end
  if N < 0 then
    (Q,R):= divide(−N, D)
    if R = 0 then return (−Q, 0)
    else return (−Q − 1, D − R) end
  end
  -- At this point, N ≥ 0 and D > 0
  return divide_unsigned(N, D)
end  
function divide_unsigned(N, D)
  Q:= 0; R:= N
  while R ≥ D do
    Q:= Q + 1
    R:= R − D
  end
  return (Q, R)
end

यह प्रक्रिया सदैव R ≥ 0 उत्पन्न करती है। हालांकि बहुत सरल और Ω(Q) के रूप मे होती है इसलिए विस्तृत विभाजन जैसे मध्यम विभाजन एल्गोरिदम की तुलना में घातीय रूप से धीमी होती है। यदि Q को छोटा माना जाता है तो यह आउटपुट-संवेदनशील एल्गोरिदम तरह उपयोगी होती है और एक निष्पादन योग्य विनिर्देश के रूप में कार्य कर सकती है।

विस्तृत विभाजन

विस्तृत विभाजन दशमलव अंकन में व्यक्त बहु-अंकीय संख्याओं के पेन और पेपर विभाजन के लिए उपयोग किया जाने वाला मानक एल्गोरिथम है। यह प्रत्येक चरण में भाजक के सबसे बड़े संभावित गुणक (अंक स्तर पर) को घटाते हुए, लाभांश के बाएं से दाएं की ओर अंत में धीरे-धीरे स्थानांतरित होता है तब गुणक भागफल के अंक बन जाते हैं और अंतिम अंतर तब शेषफल होता है।

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

शेषफल के साथ पूर्णांक विभाजन (अहस्ताक्षरित)

निम्नलिखित एल्गोरिदम, प्रसिद्ध विस्तृत विभाजन का बाइनरी संस्करण, N को D से भागफल को Q में और शेषफल को R में रखकर विभाजित करेगा। निम्नलिखित कूट कोड में, सभी मानों को अहस्ताक्षरित पूर्णांक के रूप में माना जाता है।

if D = 0 then error(DivisionByZeroException) end
Q := 0                  -- भागफल और शेष को शून्य पर प्रारंभ करें
R := 0                     
for i := n − 1 .. 0 do  -- जहाँ n, N में बिट्स की संख्या है
  R := R << 1           -- लेफ्ट-शिफ्ट R 1 बिट 
  R(0) := N(i)          -- अंश के i बिट के बराबर R का न्यूनतम-सार्थक बिट समुच्चय
  if R ≥ D then
    R := R − D
    Q(i) := 1
  end
end

उदाहरण

यदि N=11002 (1210) and D=1002 (410) 
चरण 1: समुच्चय R=0 और Q=0
चरण 2: i=3 (N में बिट्स की संख्या से एक कम) 
चरण 3: R=00 (1 द्वारा बाएं स्थानांतरित)
चरण 4: R=01 (समुच्चयिंग R(0) से N(i))
चरण 5: R <D इस कथन को छोड़ दे
चरण 2: समुच्चय i=2
चरण 3: R = 010
चरण 4: R = 011
चरण 5: R <D इस कथन को छोड़ दे
चरण 2: समुच्चय i=1 
चरण 3: R = 0110
चरण 4: R = 0110
चरण 5: R>=D, कथन को लिखा गया है चरण 5b: R=10 (R−D) चरण 5c: Q=10 (समुच्चय Q(i) to 1)
चरण 2: समुच्चय i=0 
चरण 3: R = 100
चरण 4: R = 100
चरण 5: R>=D, कथन को लिखा गया है
चरण 5b: R=0 (R−D)
चरण 5c: Q=11 (समुच्चय Q(i) to 1)
end: Q=112 (310) और R=0.

मध्यम विभाजन विधियाँ

मध्यम विभाजन विधियाँ एक मानक पुनरावृत्ति समीकरण पर आधारित होती हैं [1]

जहाँ पर

  • Rj विभाजन का j-वाँ आंशिक शेषफल है
  • B मूलांक है (आधार, सामान्यतः 2 आंतरिक रूप से कंप्यूटर और कैलकुलेटर में)
  • q n − (j + 1) स्थिति n−(j+1) में भागफल का अंक है, जहां अंकों की स्थिति को सबसे सार्थक अंक 0 से सबसे सार्थक अंक n−1 तक क्रमांकित किया जाता है।
  • n भागफल में अंकों की संख्या है
  • D भाजक है

प्रत्यानयन विभाजन

  • प्रत्यानयन विभाजन निश्चित-बिंदु भिन्नात्मक संख्याओं पर संचालित होता है और काल्पनिक संख्या 0 <D <N पर निर्भर करता है।[citation needed]
  • भागफल अंक q अंक समुच्चय {0,1} से बनते हैं।
  • बाइनरी (सूत्र 2) प्रत्यानयन विभाजन के लिए मूल एल्गोरिथम है:
R := N
D := D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
for i := n − 1 .. 0 do  -- For example 31..0 for 32 bits
  R := 2 * R − D          -- स्थानांतरित मान से परीक्षण घटाव (2 से गुणा करना बाइनरी प्रतिनिधित्व में परिवर्तन है)
  if R >= 0 then
    q(i) := 1          -- परिणामी बिट 1
  else
    q(i) := 0          -- परिणामी बिट 0
    R := R + D         -- नया आंशिक शेषफल (पुनर्स्थापना) स्थानांतरित मान है
  end
end

 जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट

गैर निष्पादित-प्रत्यानयन विभाजन, प्रत्यानयन विभाजन के समान है गैर निष्पादित-प्रत्यानयन विभाजन मे 2R के मान को जोड़ा जाता है, इसलिए R < 0 की स्थिति में D को वापस जोड़ने की आवश्यकता नहीं होती है।

गैर-प्रत्यानयन विभाजन

गैर-प्रत्यानयन विभाजन {0, 1} के अतिरिक्त भागफल अंकों के लिए अंक समुच्चय {−1, 1} का उपयोग करता है। यह एल्गोरिथ्म अधिक जटिल है लेकिन हार्डवेयर में प्रयुक्त होने पर इसका लाभ यह होता है कि केवल एक ही निर्णय होता है और प्रति अंश बिट में जोड़/घटाव होता है घटाव के बाद कोई प्रत्यानयन भाग नहीं होता है[2] जो संभावित रूप से संचालन की संख्या को आधे तक कम कर देता है और इसे तीव्रता से निष्पादित करने की स्वीकृति देता है।[3] गैर-ऋणात्मक संख्याओं के बाइनरी (मूलांक 2) गैर-प्रत्यानयन विभाजन के लिए मूल एल्गोरिथ्म है:

R := N
D := D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
for i = n − 1 .. 0 do  -- उदाहरण 31..0 के लिए 32 बिट
  if R >= 0 then
    q(i) := +1
    R := 2 * R − D
  else
    q(i) := −1
    R := 2 * R + D
  end if
end
 जहाँ: N=अंश, D=भाजक, n=#बिट्स, R=आंशिक शेष, q(i)=भागफल का बिट

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

निम्न भागफल को अंकों के समुच्चय {0,1} में बदलें:
प्रारम्भ
1. Form the positive term:
2. Mask the negative term*:
3. Subtract: :
*.( Signed binary notation with one's complement without two's complement)

यदि −1 के अंक शून्य (0) के रूप में संग्रहीत किया जाता है जैसा कि आम है है और कंप्यूटिंग तुच्छ है: मूल पर एक का पूरक (थोड़ा-थोड़ा पूरक) करें . <वाक्यविन्यास लैंग = लुआ> Q := Q − bit.bnot(Q) -- उपयुक्त है यदि Q में −1 अंकों को शून्य के रूप में दर्शाया जाता है जैसा कि सामान्य है। </वाक्यविन्यास हाइलाइट>

 Q:= Q − bit.bnot(Q)      -- यदि उपयुक्त Q में -1 अंक को शून्य के रूप में दर्शाया जाता है जैसा कि सामान्य है।

अंत में, इस एल्गोरिथम द्वारा परिकलित भागफल हमेशा विषम होते हैं, और R में शेष −D ≤ R < D की श्रेणी में होता है। उदाहरण के लिए, 5/2 = 3 R −1। धनात्मक शेषफल में बदलने के लिए, Q के गैर-मानक रूप से मानक रूप में परिवर्तित होने के बाद एकल पुनर्स्थापन चरण करें:

if R < 0 then
  Q:= Q − 1
  R:= R + D  -- यह केवल तभी आवश्यक है जब शेष ब्याज का हो।
end if

वास्तविक शेषफल R >> n है। (जैसा कि विभाजन को बहाल करने के साथ आर के निम्न-क्रम बिट्स को उसी दर पर उपयोग किया जाता है जैसे भागफल क्यू के बिट्स का उत्पादन होता है और दोनों के लिए एकल शिफ्ट रजिस्टर का उपयोग करना आम बात है।)

एसआरटी विभाजन

एसआरटी विभाजन कई माइक्रोप्रोसेसर कार्यान्वयन में विभाजन के लिए एक लोकप्रिय तरीका है।[4][5] एल्गोरिदम का नाम डी.डब्ल्यू. आईबीएम के स्वीनी, इलिनोइस विश्वविद्यालय के जेम्स ई। रॉबर्टसन और इंपीरियल कॉलेज लंदन के केडी टॉचर। उन सभी ने लगभग एक ही समय में स्वतंत्र रूप से एल्गोरिदम विकसित किया (क्रमशः फरवरी 1957, सितंबर 1958 और जनवरी 1958 में प्रकाशित)।[6][7][8]

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

सबसे महत्वपूर्ण अंतर यह है कि भागफल के लिए अनावश्यक प्रतिनिधित्व का उपयोग किया जाता है। उदाहरण के लिए, रेडिक्स-4 एसआरटी विभाजन को लागू करते समय, प्रत्येक भागफल अंक को पांच संभावनाओं {−2, −1, 0, +1, +2} में से चुना जाता है। इस वजह से, भागफल अंक का चुनाव सही नहीं होना चाहिए बाद में भागफल अंक मामूली त्रुटियों के लिए सही हो सकते हैं। (उदाहरण के लिए, भागफल अंक जोड़े (0, +2) और (1, -2) समतुल्य हैं, क्योंकि 0×4+2 = 1×4−2।) यह सहिष्णुता भागफल अंकों को केवल कुछ का उपयोग करके चुनने की स्वीकृति देती है। पूर्ण-चौड़ाई घटाव की आवश्यकता के बजाय लाभांश और भाजक के सबसे महत्वपूर्ण बिट। बदले में यह सरलीकरण 2 से अधिक मूलांक का उपयोग करने की स्वीकृति देता है।

गैर-प्रत्यानयन विभाजन की तरह, अंतिम चरण अंतिम भागफल बिट को हल करने के लिए अंतिम पूर्ण-चौड़ाई घटाव है, और भागफल का मानक बाइनरी रूप में रूपांतरण।

मूल इंटेल पेंटियम (P5 माइक्रोआर्किटेक्चर) प्रोसेसर का कुख्यात फ़्लोटिंग-पॉइंट विभाजन बग (एफडीआईवी) गलत कोडित लुकअप तालिका के कारण हुआ था। 1066 प्रविष्टियों में से पांच को गलती से छोड़ दिया गया था। [9][10]

फास्ट विभाजन के तरीके

न्यूटन-रैफसन विभाजन

न्यूटन-रैफसन का गुणक व्युत्क्रम ज्ञात करने के लिए न्यूटन की विधि का उपयोग करता है और उस व्युत्क्रम को से गुणा करें खोजने के लिए final quotient . न्यूटन-रेफसन विभाजन के चरण हैं:

  1. एक अनुमान की गणना करें पारस्परिक के लिए भाजक का .
  2. क्रमिक रूप से अधिक सटीक अनुमानों की गणना करें पारस्परिक का। यह वह जगह है जहां कोई न्यूटन-रैफसन पद्धति को इस तरह से नियोजित करता है।
  3. भाजक के व्युत्क्रम द्वारा लाभांश को गुणा करके भागफल की गणना करें: .

के व्युत्क्रम को खोजने के लिए न्यूटन की विधि को लागू करने के लिए , एक फ़ंक्शन खोजना आवश्यक है जिसमें शून्य है . स्पष्ट ऐसा कार्य है , लेकिन इसके लिए न्यूटन-रैफसन पुनरावृत्ति अनुपयोगी है, क्योंकि इसके व्युत्क्रम को जाने बिना इसकी गणना नहीं की जा सकती (इसके अलावा यह पुनरावृत्त सुधारों की स्वीकृति देने के बजाय एक चरण में सटीक पारस्परिक गणना करने का प्रयास करता है)। कार्य करने वाला कार्य है , जिसके लिए न्यूटन-रफसन पुनरावृति देता है

जिससे गणना की जा सकती है केवल गुणा और घटाव का उपयोग करना, या दो जुड़े हुए गुणा-जोड़ का उपयोग करना।

गणना के दृष्टिकोण से, भाव और समकक्ष नहीं हैं। दूसरी अभिव्यक्ति का उपयोग करते समय 2n बिट्स की सटीकता के साथ एक परिणाम प्राप्त करने के लिए, उत्पाद के बीच की गणना करनी चाहिए और की दी गई सटीकता से दोगुनी है (एन बिट्स)।[citation needed] इसके विपरीत, उत्पाद के बीच और केवल n बिट्स की सटीकता के साथ गणना करने की आवश्यकता है, क्योंकि अग्रणी n बिट्स (बाइनरी पॉइंट के बाद)। शून्य हैं।

यदि त्रुटि के रूप में परिभाषित किया गया है , तब:

प्रत्येक पुनरावृत्ति चरण में त्रुटि का यह वर्ग – तथाकथित न्यूटन की विधि#न्यूटन-रैफसन की विधि के व्यावहारिक विचार – इसका प्रभाव यह है कि परिणाम में सही अंकों की संख्या लगभग प्रत्येक पुनरावृत्ति के लिए दोगुनी हो जाती है, एक संपत्ति जो अत्यंत मानवान हो जाती है जब सम्मिलित संख्याओं में कई अंक होते हैं (जैसे बड़े पूर्णांक डोमेन में)। लेकिन इसका मतलब यह भी है कि विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है, खासकर यदि प्रारंभिक अनुमान खराब चुना गया है।

प्रारंभिक अनुमान चुनने की उप-समस्या के लिए , इसे स्केल करने के लिए भाजक D पर बिट-शिफ्ट लागू करना सुविधाजनक है ताकि 0.5 ≤ D ≤ 1; अंश N पर समान बिट-शिफ्ट लगाने से, यह सुनिश्चित होता है कि भागफल नहीं बदलता है। तब कोई रूप में एक रेखीय सन्निकटन का उपयोग कर सकता है

न्यूटन-रैफसन को इनिशियलाइज़ करने के लिए। अंतराल पर इस सन्निकटन की त्रुटि के निरपेक्ष मान के अधिकतम को कम करने के लिए , प्रयोग करना चाहिए

रैखिक सन्निकटन के गुणांक निम्नानुसार निर्धारित किए जाते हैं। त्रुटि का निरपेक्ष मान है . त्रुटि के अधिकतम निरपेक्ष मान का न्यूनतम उपयोग किए गए समदोलन प्रमेय द्वारा निर्धारित किया जाता है . स्थानीय न्यूनतम तब होता है जब , जिसका समाधान है . उस न्यूनतम पर फ़ंक्शन विपरीत चिह्न का होना चाहिए, जैसा कि अंत बिंदु पर फ़ंक्शन, अर्थात्, . दो अज्ञात में दो समीकरणों का एक अनूठा समाधान है और , और अधिकतम त्रुटि है . इस सन्निकटन का उपयोग करते हुए, प्रारंभिक मान की त्रुटि का निरपेक्ष मान से कम है

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

चूंकि इस विधि के लिए अभिसरण की दर बिल्कुल द्विघात है, यह उसी का अनुसरण करता है

तक के मान की गणना करने के लिए चरण पर्याप्त हैं द्विआधारी स्थान। यह आईईईई एकल परिशुद्धता के लिए 3 और दोहरी परिशुद्धता और विस्तारित परिशुद्धता प्रारूप दोनों के लिए 4 का मानांकन करता है।

स्यूडोकोड

निम्नलिखित के भागफल की गणना करता है N और D सटीकता के साथ P द्विआधारी स्थान:

Express D as M × 2e where 1 ≤ M < 2 (standard floating point representation)
D' := D / 2e+1   // scale between 0.5 and 1, can be performed with bit shift / exponent subtraction
N' := N / 2e+1
X := 48/17 − 32/17 × D'   // precompute constants with same precision as D
repeat  times  // can be precomputed based on fixed P
    X := X + X × (1 - D' × X)
end
return N' × X

उदाहरण के लिए, डबल-परिशुद्धता फ़्लोटिंग-पॉइंट विभाजन के लिए, यह विधि 10 गुणा, 9 जोड़ और 2 शिफ्ट का उपयोग करती है।

वैरिएंट न्यूटन-रैफसन विभाजन

न्यूटन-रफसन विभाजन विधि को निम्नानुसार थोड़ा तेज करने के लिए संशोधित किया जा सकता है। एन और डी को स्थानांतरित करने के बाद ताकि डी [0.5, 1.0] में हो, के साथ प्रारंभ करें

यह 1/डी के लिए सबसे अच्छा द्विघात फिट है और 1/99 से कम या उसके बराबर त्रुटि का पूर्ण मान देता है। इसे पहली तरह के चेबिशेव बहुपद के तीसरे क्रम के पुन: स्केल किए गए त्रुटि के बराबर बनाने के लिए चुना गया है। गुणांक पूर्व-गणना और हार्ड-कोडेड होना चाहिए।

फिर लूप में, एक पुनरावृत्ति का उपयोग करें जो त्रुटि को घनित करता है।

Y·E पद नया है।

यदि लूप को तब तक निष्पादित किया जाता है जब तक कि एक्स इसके अग्रणी पी बिट्स पर 1/डी से सहमत नहीं हो जाता है, तो पुनरावृत्तियों की संख्या इससे अधिक नहीं होगी

जो 2 प्राप्त करने के लिए 99 को घन करने की संख्या हैपी+1. तब

P बिट्स का भागफल है।

इनिशियलाइज़ेशन या पुनरावृत्ति में उच्च डिग्री बहुपदों का उपयोग करने से प्रदर्शन में गिरावट आती है क्योंकि अतिरिक्त गुणन की आवश्यकता अधिक पुनरावृत्तियों को करने पर बेहतर खर्च होगी।

गोल्डस्मिथ विभाजन

गोल्डस्मिथ विभाजन[11] (रॉबर्ट इलियट गोल्डश्मिड्ट के बाद[12]) लाभांश और भाजक दोनों को एक सामान्य कारक F द्वारा बार-बार गुणा करने की पुनरावृत्त प्रक्रिया का उपयोग करता हैi, इस तरह चुना जाता है कि भाजक 1 में परिवर्तित हो जाता है। यह लाभांश को मांगे गए भागफल क्यू में परिवर्तित करने का कारण बनता है:

गोल्डश्मिड्ट विभाजन के चरण हैं:

  1. गुणन कारक F के लिए एक अनुमान उत्पन्न करेंi.
  2. लाभांश और भाजक को F से गुणा करेंi.
  3. यदि विभाजक पर्याप्त रूप से 1 के करीब है, तो लाभांश वापस करें, अन्यथा चरण 1 पर लूप करें।

मान लें कि N/D को इस तरह बढ़ाया गया है कि 0 < D < 1, प्रत्येक Fiडी पर आधारित है:

भाज्य और भाजक को गुणनखंड से गुणा करने पर प्राप्त होता है:

पुनरावृत्तियों की पर्याप्त संख्या k के बाद .

Goldschmidt पद्धति का उपयोग AMD Athlon CPU और बाद के मॉडल में किया जाता है।[13][14] इसे एंडरसन अर्ल गोल्डश्मिड्ट पॉवर्स (एईजीपी) एल्गोरिथम के रूप में भी जाना जाता है और इसे विभिन्न आईबीएम प्रोसेसर द्वारा कार्यान्वित किया जाता है।[15][16] यद्यपि यह न्यूटन-रैफसन कार्यान्वयन के समान दर पर अभिसरण करता है, गोल्डस्मिथ पद्धति का एक लाभ यह है कि अंश और भाजक में गुणा समानांतर में किया जा सकता है।[16]

द्विपद प्रमेय

गोल्डश्मिट विधि का उपयोग उन कारकों के साथ किया जा सकता है जो द्विपद प्रमेय द्वारा सरलीकरण की स्वीकृति देते हैं। मान लें कि एन/डी को दो की शक्ति से बढ़ाया गया है . हम चुनते हैं और . यह प्रदान करता है

.

बाद कदम , भाजक तक गोल किया जा सकता है सापेक्ष त्रुटि के साथ

जो कि अधिकतम है कब , इस प्रकार न्यूनतम सटीकता प्रदान करता है बाइनरी अंक।

बड़े-पूर्णांक तरीके

हार्डवेयर कार्यान्वयन के लिए डिज़ाइन किए गए तरीके आमतौर पर हजारों या लाखों दशमलव अंकों के साथ पूर्णांकों को मापते नहीं हैं; ये अक्सर होते हैं, उदाहरण के लिए, क्रिप्टोग्राफी में मॉड्यूलर कटौती में। इन बड़े पूर्णांकों के लिए, अधिक कुशल विभाजन एल्गोरिदम समस्या को कम संख्या में गुणन का उपयोग करने के लिए रूपांतरित करते हैं, जो तब करत्सुबा एल्गोरिथम, टूम-कुक गुणन या शॉनहेज-स्ट्रैसन एल्गोरिथम जैसे असम्बद्ध रूप से कुशल गुणन एल्गोरिथ्म का उपयोग करके किया जा सकता है। परिणाम यह है कि विभाजन की कम्प्यूटेशनल जटिलता गुणा के समान क्रम (गुणक स्थिरांक तक) की है। उदाहरणों में ऊपर वर्णित न्यूटन की विधि द्वारा गुणा में कमी सम्मिलित है[17] साथ ही थोड़ा तेज बर्निकेल-ज़ीग्लर विभाजन[18] बैरेट कमी और मोंटगोमरी कमी एल्गोरिदम।[19][verification needed] न्यूटन की विधि परिदृश्यों में विशेष रूप से कुशल है जहां एक ही विभाजक द्वारा कई बार विभाजित किया जाना चाहिए, क्योंकि प्रारंभिक न्यूटन व्युत्क्रम के बाद प्रत्येक विभाजन के लिए केवल एक (संक्षिप्त) गुणन की आवश्यकता होती है।

एक स्थिर द्वारा विभाजन

एक निरंतर डी द्वारा विभाजन इसके गुणक व्युत्क्रम द्वारा गुणा के बराबर है। चूँकि हर स्थिर है, इसलिए इसका व्युत्क्रम (1/D) है। इस प्रकार संकलन समय पर एक बार (1/D) के मान की गणना करना संभव है, और रन टाइम पर विभाजन N/D के बजाय गुणन N·(1/D) करें। तैरनेवाला स्थल अंकगणित में (1/D) का उपयोग छोटी समस्या प्रस्तुत करता है,[lower-alpha 1] लेकिन पूर्णांक (कंप्यूटर विज्ञान) अंकगणित में पारस्परिक हमेशा शून्य का मानांकन करेगा (यह मानते हुए |D| > 1)।

विशेष रूप से (1/D) का उपयोग करना आवश्यक नहीं है; कोई भी मान (X/Y) जो (1/D) तक कम हो जाता है, का उपयोग किया जा सकता है। उदाहरण के लिए, 3 से विभाजन के लिए, कारक 1/3, 2/6, 3/9, या 194/582 का उपयोग किया जा सकता है। नतीजतन, यदि वाई दो की शक्ति होती तो विभाजन चरण तेजी से दाएं बिट शिफ्ट में कम हो जाता। (एन·एक्स)/वाई के रूप में एन/डी की गणना करने का प्रभाव एक विभाजन को एक गुणा और एक बदलाव से बदल देता है। ध्यान दें कि कोष्ठक महत्वपूर्ण हैं, क्योंकि N·(X/Y) का मानांकन शून्य होगा।

हालाँकि, जब तक D स्वयं दो की शक्ति नहीं है, तब तक कोई X और Y नहीं है जो उपरोक्त शर्तों को पूरा करता हो। सौभाग्य से, (N·X)/Y पूर्णांक अंकगणित में N/D के समान परिणाम देता है, भले ही (X/Y) 1/D के बिल्कुल बराबर न हो, लेकिन इतना करीब हो कि सन्निकटन द्वारा प्रस्तुत त्रुटि में हो बिट्स जो शिफ्ट ऑपरेशन द्वारा छोड़े गए हैं।[20][21][22] बैरेट रिडक्शन वाई के मान के लिए 2 की शक्तियों का उपयोग करता है ताकि वाई द्वारा विभाजन को एक सरल दायां शिफ्ट बनाया जा सके।[lower-alpha 2] एक ठोस निश्चित-बिंदु अंकगणितीय उदाहरण के रूप में, 32-बिट अहस्ताक्षरित पूर्णांकों के लिए, 3 से विभाजन को गुणा द्वारा प्रतिस्थापित किया जा सकता है 2863311531/233, 2863311531 (हेक्साडेसिमल 0xAAAAAAAB) द्वारा एक गुणा और उसके बाद 33 दाएँ बिट शिफ़्ट। 2863311531 के मान की गणना इस प्रकार की जाती है 233/3, फिर गोल किया। इसी तरह, 10 से विभाजन को 3435973837 (0xCCCCCCCD) के गुणन के बाद 2 से विभाजन के रूप में व्यक्त किया जा सकता है35 (या 35 राइट बिट शिफ्ट)।[24]: p230-234  OEIS गुणन के लिए स्थिरांकों के अनुक्रम प्रदान करता है A346495 और सही बदलाव के लिए A346496.

सामान्य के लिए -बिट अहस्ताक्षरित पूर्णांक विभाजन जहां विभाजक 2 की शक्ति नहीं है, निम्नलिखित पहचान विभाजन को दो में परिवर्तित करती है -बिट जोड़/घटाव, एक -बिट द्वारा -बिट गुणन (जहां परिणाम के केवल ऊपरी आधे हिस्से का उपयोग किया जाता है) और कई बदलाव, प्रीकंप्यूटिंग के बाद और :

कहाँ कुछ मामलों में, एक स्थिरांक द्वारा विभाजन को और भी कम समय में गुणन को एक गुणन एल्गोरिथम #Shift और add में एक स्थिरांक द्वारा परिवर्तित करके पूरा किया जा सकता है।[25] विशेष रुचि 10 से विभाजन है, जिसके लिए यदि आवश्यक हो तो शेष के साथ, सटीक भागफल प्राप्त किया जाता है।[26]

राउंडिंग एरर

सीमित परिशुद्धता (कंप्यूटर विज्ञान) के कारण विभाजन संचालन द्वारा राउंड-ऑफ त्रुटि पेश की जा सकती है।

यह भी देखें

टिप्पणियाँ

  1. Despite how "little" problem the optimization causes, this reciprocal optimization is still usually hidden behind a "fast math" flag in modern compilers as it is inexact.
  2. Modern compilers commonly perform this integer multiply-and-shift optimization; for a constant only known at run-time, however, the program must implement the optimization itself.[23]


संदर्भ

  1. Morris, James E.; Iniewski, Krzysztof (2017-11-22). Nanoelectronic Device Applications Handbook (in English). CRC Press. ISBN 978-1-351-83197-0.
  2. Shaw, Robert F. (1950). "Arithmetic Operations in a Binary Computer". Review of Scientific Instruments (in English). 21 (8): 690. Bibcode:1950RScI...21..687S. doi:10.1063/1.1745692. ISSN 0034-6748.
  3. Flynn. "Stanford EE486 (Advanced Computer Arithmetic Division) – Chapter 5 Handout (Division)" (PDF). Stanford University.
  4. Harris, David L.; Oberman, Stuart F.; Horowitz, Mark A. (9 September 1998). SRT Division: Architectures, Models, and Implementations (PDF) (Technical report). Stanford University.
  5. McCann, Mark; Pippenger, Nicholas (2005). "SRT Division Algorithms as Dynamical Systems". SIAM Journal on Computing. 34 (6): 1279–1301. CiteSeerX 10.1.1.72.6993. doi:10.1137/S009753970444106X.
  6. Cocke, John; Sweeney, D.W. (11 February 1957), High speed arithmetic in a parallel device (Company Memo), IBM, p. 20{{citation}}: CS1 maint: location missing publisher (link)
  7. Robertson, James (1958-09-01). "A New Class of Digital Division Methods". IRE Transactions on Electronic Computers. IEEE. EC-7: 218–222. doi:10.1109/TEC.1958.5222579. hdl:2027/uiuo.ark:/13960/t0gt7529c.
  8. Tocher, K.D. (1958-01-01). "TECHNIQUES OF MULTIPLICATION AND DIVISION FOR AUTOMATIC BINARY COMPUTERS". The Quarterly Journal of Mechanics and Applied Mathematics. 11 (3): 20.
  9. "Statistical Analysis of Floating Point Flaw". Intel Corporation. 1994. Retrieved 22 October 2013.
  10. Oberman, Stuart F.; Flynn, Michael J. (July 1995). An Analysis of Division Algorithms and Implementations (PDF) (Technical report). Stanford University. CSL-TR-95-675.
  11. Goldschmidt, Robert E. (1964). Applications of Division by Convergence (PDF) (Thesis). M.Sc. dissertation. M.I.T. OCLC 34136725.
  12. https://web.archive.org/web/20180718114413/https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5392026
  13. Oberman, Stuart F. (1999). "Floating Point Division and Square Root Algorithms and Implementation in the AMD-K7 Microprocessor" (PDF). Proceedings of the IEEE Symposium on Computer Arithmetic: 106–115. doi:10.1109/ARITH.1999.762835. S2CID 12793819.
  14. Soderquist, Peter; Leeser, Miriam (July–August 1997). "Division and Square Root: Choosing the Right Implementation". IEEE Micro. 17 (4): 56–66. doi:10.1109/40.612224.
  15. S. F. Anderson, J. G. Earle, R. E. Goldschmidt, D. M. Powers. The IBM 360/370 model 91: floating-point execution unit, IBM Journal of Research and Development, January 1997
  16. 16.0 16.1 Guy, Even; Peter, Siedel; Ferguson, Warren (1 February 2005). "A parametric error analysis of Goldschmidt's division algorithm". Journal of Computer and System Sciences. 70 (1): 118–139. doi:10.1016/j.jcss.2004.08.004.
  17. Hasselström, Karl (2003). Fast Division of Large Integers: A Comparison of Algorithms (PDF) (M.Sc. in Computer Science thesis). Royal Institute of Technology. Archived from the original (PDF) on 8 July 2017. Retrieved 2017-07-08.
  18. Joachim Ziegler, Christoph Burnikel (1998), Fast Recursive Division, Max-Planck-Institut für Informatik{{citation}}: CS1 maint: location missing publisher (link)
  19. Barrett, Paul (1987). "Implementing the Rivest Shamir and Adleman public key encryption algorithm on a standard digital signal processor". Proceedings on Advances in cryptology---CRYPTO '86. London, UK: Springer-Verlag. pp. 311–323. ISBN 0-387-18047-8.
  20. Granlund, Torbjörn; Montgomery, Peter L. (June 1994). "Division by Invariant Integers using Multiplication" (PDF). SIGPLAN Notices. 29 (6): 61–72. CiteSeerX 10.1.1.1.2556. doi:10.1145/773473.178249.
  21. Möller, Niels; Granlund, Torbjörn (February 2011). "Improved Division by Invariant Integers" (PDF). IEEE Transactions on Computers. 60 (2): 165–175. doi:10.1109/TC.2010.143. S2CID 13347152.
  22. ridiculous_fish. "Labor of Division (Episode III): Faster Unsigned Division by Constants". 2011.
  23. ridiculous_fish. "libdivide, optimized integer division". Retrieved 6 July 2021.
  24. Warren Jr., Henry S. (2013). Hacker's Delight (2 ed.). Addison Wesley - Pearson Education, Inc. ISBN 978-0-321-84268-8.
  25. LaBudde, Robert A.; Golovchenko, Nikolai; Newton, James; and Parker, David; Massmind: "Binary Division by a Constant"
  26. Vowels, R. A. (1992). "Division by 10". Australian Computer Journal. 24 (3): 81–85.


अग्रिम पठन