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

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


Line 17: Line 16:


== पुनरावर्ती घटाव द्वारा विभाजन ==
== पुनरावर्ती घटाव द्वारा विभाजन ==
यूक्लिड के तत्वों, पुस्तक VII, प्रस्ताव 1 में प्रस्तुत एक महत्तम सामान्य भाजक एल्गोरिथ्म में ऐतिहासिक रूप से सम्मिलित सबसे सरल विभाजन एल्गोरिथ्म केवल घटाव और समतुल्यता का उपयोग करके शेष दो धनात्मक पूर्णांक प्राप्त करता है:
यूक्लिड के तत्वों जैसे पुस्तक VII, प्रस्ताव-1 में प्रस्तुत एक महत्तम सामान्य भाजक एल्गोरिथ्म में ऐतिहासिक रूप से सम्मिलित सबसे सरल विभाजन एल्गोरिथ्म केवल घटाव और समतुल्यता का उपयोग करके शेष दो धनात्मक पूर्णांक प्राप्त करता है:
   R:= N Q:= 0
   R:= N Q:= 0
  while R ≥ D do
  while R ≥ D do
Line 101: Line 100:


  R := N
  R := N
  D := D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
  DD:= 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 बिट
   R := 2 * R − D          -- स्थानांतरित मान से परीक्षण घटाव (2 से गुणा करना बाइनरी प्रतिनिधित्व में परिवर्तन है)
   R := 2 * R − D          -- स्थानांतरित मान से परीक्षण घटाव (2 से गुणा करना बाइनरी प्रतिनिधित्व में परिवर्तन है)
   if R >= 0 then
   if R >= 0 then
Line 108: Line 107:
   else
   else
     q(i) := 0          -- परिणामी बिट 0
     q(i) := 0          -- परिणामी बिट 0
     R := R + D        -- नया आंशिक शेषफल (पुनर्स्थापना) स्थानांतरित मान है
     R0:= R + D        -- नया आंशिक शेषफल (पुनर्स्थापना) स्थानांतरित मान है
   end
   end
  end
  end
Line 129: Line 128:
  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 139: Line 138:
|2. ऋणात्मक शब्द का मास्क मान      ||<math>M = 00010101\,</math>
|2. ऋणात्मक शब्द का मास्क मान      ||<math>M = 00010101\,</math>
|-
|-
|3. व्यवकलन : <math>P - M</math>: ||<math>Q = 11010101\,</math>
|3. व्यवकलन: <math>P - M</math>: ||<math>Q = 11010101\,</math>
|-
|-
| colspan="2" |*.[[two's complement|दो पूरक]] के अतिरिक्त किसी [[one's complement|एक पूरक]] के साथ हस्ताक्षरित बाइनरी संकेत  
| colspan="2" |*.[[two's complement|दो पूरक]] के अतिरिक्त किसी [[one's complement|एक पूरक]] के साथ हस्ताक्षरित बाइनरी संकेत  
Line 153: Line 152:


===एसआरटी विभाजन{{anchor|SRT}} ===
===एसआरटी विभाजन{{anchor|SRT}} ===
एसआरटी विभाजन कई [[माइक्रोप्रोसेसर]] कार्यान्वयन में विभाजन के लिए एक लोकप्रिय तरीका है।<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> एल्गोरिदम का नाम D.डब्ल्यू. [[आईबीएम]] के स्वीनी [[इलिनोइस विश्वविद्यालय]] के जेम्स ई रॉबर्टसन और [[इंपीरियल कॉलेज लंदन]] के केD टॉचर इन सभी ने लगभग एक ही समय में स्वतंत्र रूप से क्रमशः फरवरी 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 बग|(एफDआईवी)]] गलत कोडित लुकअप [[तालिका देखो|तालिका]] के कारण हुआ था। जिसकी 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>
== फास्ट विभाजन के तरीके ==
== तीव्रगामी विभाजन के तरीके ==


===न्यूटन-रैफसन विभाजन ===
===न्यूटन-रैफसन विभाजन ===
न्यूटन-रैफसन का गुणक व्युत्क्रम ज्ञात करने के लिए न्यूटन की विधि का उपयोग करता है <math>D</math> और उस व्युत्क्रम को से गुणा करें <math>N</math> खोजने के लिए {{nowrap|final quotient <math>Q</math>.}}
न्यूटन-रैफसन का गुणक व्युत्क्रम ज्ञात करने के लिए न्यूटन की विधि का उपयोग करता है <math>D</math> और उस व्युत्क्रम को <math>N</math> से गुणा करके {{nowrap|अंतिम भागफल <math>Q</math>}}ज्ञात करें।
न्यूटन-रेफसन विभाजन के चरण हैं:
 
# एक अनुमान की गणना करें <math>X_0</math> पारस्परिक के लिए <math>1/D</math> भाजक का <math>D</math>.
न्यूटन-रेफसन विभाजन के निम्न चरण हैं:
# क्रमिक रूप से अधिक सटीक अनुमानों की गणना करें <math>X_1,X_2,\ldots,X_S</math> पारस्परिक का। यह वह जगह है जहां कोई न्यूटन-रैफसन पद्धति को इस तरह से नियोजित करता है।
# भाजक <math>X_0</math> के व्युत्क्रम <math>D</math> के लिए एक अनुमान <math>1/D</math> की गणना करें।
# भाजक के व्युत्क्रम द्वारा लाभांश को गुणा करके भागफल की गणना करें: <math>Q = N X_S</math>.
# व्युत्क्रम के क्रमिक रूप से अधिक स्पष्ट अनुमान <math>X_1,X_2,\ldots,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> से केवल गुणा और घटाकर या दो जुड़े हुए गुणा-जोड़ों का उपयोग करके की जा सकती है।


गणना के दृष्टिकोण से, भाव <math>X_{i+1} = X_i + X_i(1-DX_i)</math> और <math>X_{i+1} = X_i(2-DX_i)</math> समकक्ष नहीं हैं। दूसरी अभिव्यक्ति का उपयोग करते समय 2n बिट्स की सटीकता के साथ एक परिणाम प्राप्त करने के लिए, उत्पाद के बीच की गणना करनी चाहिए <math>X_i</math> और <math>(2-DX_i)</math> की दी गई सटीकता से दोगुनी है <math>X_i</math>(एन बिट्स)।{{citation needed|date=February 2014}} इसके विपरीत, उत्पाद के बीच <math>X_i</math> और <math>(1-DX_i)</math> केवल n बिट्स की सटीकता के साथ गणना करने की आवश्यकता है, क्योंकि अग्रणी n बिट्स (बाइनरी पॉइंट के बाद)। <math>(1-DX_i)</math> शून्य हैं।
गणना के दृष्टिकोण से, कारक <math>X_{i+1} = X_i + X_i(1-DX_i)</math> और <math>X_{i+1} = X_i(2-DX_i)</math> समकक्ष नहीं होते हैं। दूसरी अभिव्यक्ति का उपयोग करते समय 2n बिट्स की सटीकता के साथ एक परिणाम प्राप्त करने के लिए, उत्पाद के बीच की गणना करनी चाहिए <math>X_i</math> और <math>(2-DX_i)</math> की दी गई सटीकता <math>X_i</math>(एन बिट्स) से दोगुनी है ।{{citation needed|date=February 2014}} इसके विपरीत, उत्पाद के बीच <math>X_i</math> और <math>(1-DX_i)</math> केवल n बिट्स की सटीकता के साथ गणना करने की आवश्यकता है, क्योंकि <math>(1-DX_i)</math> के प्रमुख n बिट्स (बाइनरी बिंदु के बाद) शून्य हैं।


यदि त्रुटि के रूप में परिभाषित किया गया है <math>\varepsilon_i = 1 - D X_i</math>, तब:
यदि त्रुटि को <math>\varepsilon_i = 1 - D X_i</math> के रूप में परिभाषित किया गया है, तब
:<math>\begin{align}
:<math>\begin{align}
\varepsilon_{i+1} &= 1 - D X_{i+1} \\
\varepsilon_{i+1} &= 1 - D X_{i+1} \\
Line 185: Line 185:
               &= {\varepsilon_i}^2. \\
               &= {\varepsilon_i}^2. \\
\end{align}</math>
\end{align}</math>
प्रत्येक पुनरावृत्ति चरण में त्रुटि का यह वर्ग{{snd}} तथाकथित न्यूटन की विधि#न्यूटन-रैफसन की विधि के व्यावहारिक विचार{{snd}} इसका प्रभाव यह है कि परिणाम में सही अंकों की संख्या लगभग प्रत्येक पुनरावृत्ति के लिए दोगुनी हो जाती है, एक संपत्ति जो अत्यंत मानवान हो जाती है जब सम्मिलित संख्याओं में कई अंक होते हैं (जैसे बड़े पूर्णांक डोमेन में)लेकिन इसका मतलब यह भी है कि विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है, खासकर यदि प्रारंभिक अनुमान <math>X_0</math> खराब चुना गया है।
प्रत्येक पुनरावृत्ति पर त्रुटि का यह वर्ग न्यूटन-रैफसन की विधि के तथाकथित द्विघात अभिसरण चरण का प्रभाव है कि परिणाम में सही अंकों की संख्या प्रत्येक पुनरावृत्ति के लिए सामान्यतः दोगुनी हो जाती है, एक वित्त जो बहुत मूल्यवान हो जाती है जब इसमें सम्मिलित संख्याएँ बहुत अधिक अंक (जैसे बड़े पूर्णांक डोमेन में) होती हैं लेकिन इसका तात्पर्य यह भी है कि इस विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है,प्रायः यदि प्रारंभिक अनुमान <math>X_0</math> गलत चयनित किया गया है। प्रारंभिक अनुमान चुनने की उप-समस्या के लिए <math>X_0</math>, इसे बढ़ाने करने के लिए भाजक D पर बिट-शिफ्ट पप्रयुक्त करना सुविधाजनक होता है ताकि 0.5 ≤ D ≤ 1 अंश N पर समान बिट-शिफ्ट प्रयुक्त करने से, यह सुनिश्चित होता है कि भागफल परिवर्तित नही होता है। तब किसी भी रूप में एक रेखीय [[सन्निकटन]] का उपयोग किया जा सकता है।
 
प्रारंभिक अनुमान चुनने की उप-समस्या के लिए <math>X_0</math>, इसे स्केल करने के लिए भाजक D पर बिट-शिफ्ट लागू करना सुविधाजनक है ताकि 0.5 ≤ D ≤ 1; अंश N पर समान बिट-शिफ्ट लगाने से, यह सुनिश्चित होता है कि भागफल नहीं बदलता है। तब कोई रूप में एक रेखीय [[सन्निकटन]] का उपयोग कर सकता है
:<math>X_0 = T_1 + T_2 D \approx \frac{1}{D} \,</math>
:<math>X_0 = T_1 + T_2 D \approx \frac{1}{D} \,</math>
न्यूटन-रैफसन को इनिशियलाइज़ करने के लिए। अंतराल पर इस सन्निकटन की त्रुटि के निरपेक्ष मान के अधिकतम को कम करने के लिए <math>[0.5,1]</math>, प्रयोग करना चाहिए
न्यूटन-रैफसन को हस्ताक्षरित करने के लिए अपेक्षाकृत कण अंतराल पर इस सन्निकटन की त्रुटि के निरपेक्ष मान को अधिकतम कम करने के लिए <math>[0.5,1]</math> का उपयोग किया जाता है।
:<math>X_0 = {48 \over 17} - {32 \over 17} D. \,</math>
:<math>X_0 = {48 \over 17} - {32 \over 17} D. \,</math>
रैखिक सन्निकटन के गुणांक निम्नानुसार निर्धारित किए जाते हैं। त्रुटि का निरपेक्ष मान है <math>|\varepsilon_0| = |1 - D(T_1 + T_2 D)|</math>. त्रुटि के अधिकतम निरपेक्ष मान का न्यूनतम उपयोग किए गए [[समदोलन प्रमेय]] द्वारा निर्धारित किया जाता है <math>F(D) = 1 - D(T_1 + T_2 D)</math>. स्थानीय न्यूनतम <math>F(D)</math> तब होता है जब <math>F'(D) = 0</math>, जिसका समाधान है <math>D = -T_1/(2T_2)</math>. उस न्यूनतम पर फ़ंक्शन विपरीत चिह्न का होना चाहिए, जैसा कि अंत बिंदु पर फ़ंक्शन, अर्थात्, <math>F(1/2) = F(1) = -F(-T_1/(2T_2))</math>. दो अज्ञात में दो समीकरणों का एक अनूठा समाधान है <math>T_1 = 48/17</math> और <math>T_2 = -32/17</math>, और अधिकतम त्रुटि है <math>F(1) = 1/17</math>. इस सन्निकटन का उपयोग करते हुए, प्रारंभिक मान की त्रुटि का निरपेक्ष मान से कम है
रैखिक सन्निकटन के गुणांक निम्नानुसार निर्धारित किए जाते हैं। त्रुटि का निरपेक्ष मान <math>|\varepsilon_0| = |1 - D(T_1 + T_2 D)|</math> है त्रुटि के अधिकतम निरपेक्ष मान का न्यूनतम उपयोग किए गए [[समदोलन प्रमेय]] द्वारा <math>F(D) = 1 - D(T_1 + T_2 D)</math> निर्धारित किया जाता है स्थानीय न्यूनतम <math>F(D)</math> तब होता है जब <math>F'(D) = 0</math>, जिसका हल <math>D = -T_1/(2T_2)</math> है उस न्यूनतम पर कारक विपरीत चिह्न का होना चाहिए, जैसा कि अंत बिंदु पर कारक अर्थात्, <math>F(1/2) = F(1) = -F(-T_1/(2T_2))</math>. दो अज्ञात में दो समीकरणों का एक अद्वितीय समाधान <math>T_1 = 48/17</math> और <math>T_2 = -32/17</math> है और अधिकतम त्रुटि <math>F(1) = 1/17</math> है। इस सन्निकटन का उपयोग करते हुए, प्रारंभिक मान की त्रुटि का निरपेक्ष मान <math>\vert \varepsilon_0 \vert \leq {1 \over 17} \approx 0.059 . \,</math> से कम है
:<math>\vert \varepsilon_0 \vert \leq {1 \over 17} \approx 0.059 . \,</math>
[[रेमेज़ एल्गोरिथ्म]] का उपयोग करके गुणांक की गणना करते हुए, 1 से बड़ी डिग्री का बहुपद फिट उत्पन्न करना संभव है। व्यापार-बंद यह है कि प्रारंभिक अनुमान के लिए अधिक कम्प्यूटेशनल चक्रों की आवश्यकता होती है लेकिन उम्मीद है कि न्यूटन-रैफसन के कम पुनरावृत्तियों के बदले में।


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


:<math>S = \left \lceil \log_2 \frac{P + 1}{\log_2 17} \right \rceil \,</math>
चूंकि इस विधि के लिए [[अभिसरण की दर]] प्रायः द्विघात होती है, जो <math>S = \left \lceil \log_2 \frac{P + 1}{\log_2 17} \right \rceil \,</math> का अनुसरण करती है।
तक के मान की गणना करने के लिए चरण पर्याप्त हैं <math>P \,</math> द्विआधारी स्थान। यह आईईईई [[एकल परिशुद्धता]] के लिए 3 और दोहरी परिशुद्धता और [[विस्तारित परिशुद्धता]] प्रारूप दोनों के लिए 4 का मानांकन करता है।
 
<math>P \,</math> बाइनरी स्थानों तक के मान की गणना करने के लिए चरण पर्याप्त हैं। यह इंस्टीट्यूट ऑफ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर (आईईईई) [[एकल परिशुद्धता]] के लिए 3 और दोहरी परिशुद्धता और [[विस्तारित परिशुद्धता]] प्रारूप दोनों के लिए 4 का मानांकन करता है।


==== स्यूडोकोड ====
==== स्यूडोकोड ====
निम्नलिखित के भागफल की गणना करता है {{var|N}} और {{var|D}} सटीकता के साथ {{var|P}} द्विआधारी स्थान:
निम्नलिखित {{var|P}} बाइनरी स्थानों की परिशुद्धता के साथ  {{var|N}} और {{var|D}} के भागफल की गणना करता है:
  Express D as M × 2<sup>e</sup> where 1 ≤ M < 2 (standard floating point representation)
  Express D as M × 2<sup>e</sup> where 1 ≤ M < 2 (standard floating point representation)
  D' := D / 2<sup>e+1</sup>  ''// scale between 0.5 and 1, can be performed with bit shift / exponent subtraction''
  D' := D / 2<sup>e+1</sup>  ''// scale between 0.5 and 1, can be performed with bit shift / exponent subtraction''
  N' := N / 2<sup>e+1</sup>
  N' := N / 2<sup>e+1</sup>
  X := 48/17 − 32/17 × D'  ''// precompute constants with same precision as D''
  X := 48/17 − 32/17 × D'  ''// precompute constants with same precision as D''
  {{nowrap|'''repeat''' <math>\left \lceil \log_2 \frac{P + 1}{\log_2 17} \right \rceil \,</math> '''times'''}}  ''// can be precomputed based on fixed P''
  '''repeat'''  '''times'''   ''// can be precomputed based on fixed P''
     X := X + X × (1 - D' × X)
     X := X + X × (1 - D' × X)
  '''end'''
  '''end'''
  '''return''' N' × X
  '''return''' N' × X
उदाहरण के लिए, डबल-परिशुद्धता फ़्लोटिंग-पॉइंट विभाजन के लिए, यह विधि 10 गुणा, 9 जोड़ और 2 शिफ्ट का उपयोग करती है।
उदाहरण के लिए, एक दोहरी-परिशुद्धता अस्थायी-बिन्दु विभाजन के लिए यह विधि 10 गुणा 9 जोड़ और 2 शिफ्ट का उपयोग करती है।


====वैरिएंट न्यूटन-रैफसन विभाजन====
====वैरिएंट न्यूटन-रैफसन विभाजन====
न्यूटन-रफसन विभाजन विधि को निम्नानुसार थोड़ा तेज करने के लिए संशोधित किया जा सकता है। एन और डी को स्थानांतरित करने के बाद ताकि डी [0.5, 1.0] में हो, के साथ प्रारंभ करें
न्यूटन-रफसन विभाजन विधि को निम्नानुसार अपेक्षाकृत तीव्र करने के लिए संशोधित किया जा सकता है। एन और D को स्थानांतरित करने के बाद ताकि {{var|D}} को [0.5, 1.0] के साथ प्रारंभ किया जा सके।
:<math> X := \frac{140}{33} + D \cdot \left(\frac{-64}{11} + D \cdot \frac{256}{99}\right) .</math>
:<math> X := \frac{140}{33} + D \cdot \left(\frac{-64}{11} + D \cdot \frac{256}{99}\right) .</math>
यह 1/डी के लिए सबसे अच्छा द्विघात फिट है और 1/99 से कम या उसके बराबर त्रुटि का पूर्ण मान देता है। इसे पहली तरह के [[चेबिशेव बहुपद]] के तीसरे क्रम के पुन: स्केल किए गए त्रुटि के बराबर बनाने के लिए चुना गया है। गुणांक पूर्व-गणना और हार्ड-कोडेड होना चाहिए।
यह 1/D के लिए सबसे अच्छा द्विघात है और 1/99 से कम या उसके बराबर त्रुटि का पूर्ण मान देता है। इसे पहली तरह के [[चेबिशेव बहुपद]] के तीसरे क्रम के रूप मे पुन: स्केल किए गए त्रुटि के बराबर बनाने के लिए चुना गया है। गुणांक पूर्व-गणना और हार्ड-कोडेड होना चाहिए।


फिर लूप में, एक पुनरावृत्ति का उपयोग करें जो त्रुटि को घनित करता है।
फिर पाश(लूप) में, एक पुनरावृत्ति का उपयोग किया जाता है जो त्रुटि को पूर्णतः घनित करता है।
:<math> E := 1 - D \cdot X </math>
:<math> E := 1 - D \cdot X </math>
:<math> Y := X \cdot E </math>
:<math> Y := X \cdot E </math>
:<math> X := X + Y + Y \cdot E .</math>
:<math> X := X + Y + Y \cdot E .</math>
Y·E पद नया है।
इसमे Y·E एक नया पद है।


यदि लूप को तब तक निष्पादित किया जाता है जब तक कि एक्स इसके अग्रणी पी बिट्स पर 1/डी से सहमत नहीं हो जाता है, तो पुनरावृत्तियों की संख्या इससे अधिक नहीं होगी
यदि पाश को तब तक निष्पादित किया जाता है जब तक कि x इसके प्रमुख P बिट्स पर 1/D से सहमत नहीं हो जाता है, तब पुनरावृत्तियों की संख्या इससे अधिक नहीं होती है।
:<math> \left \lceil \log_3 \left(\frac{P + 1}{\log_2 99} \right) \right \rceil </math>
:<math> \left \lceil \log_3 \left(\frac{P + 1}{\log_2 99} \right) \right \rceil </math>
जो 2 प्राप्त करने के लिए 99 को घन करने की संख्या है<sup>पी+1</sup>. तब
जो 2<sup>P+1</sup> प्राप्त करने के लिए 99 को घन करने की संख्या है।
:<math> Q:= N \cdot X </math>
:<math> Q:= N \cdot X </math>
P बिट्स का भागफल है।
यह P बिट्स का भागफल है।


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


==={{anchor|AEGP}}गोल्डस्मिथ विभाजन ===
===गोल्डश्मिट विभाजन{{anchor|AEGP}} ===
गोल्डस्मिथ विभाजन<ref>{{cite thesis |first=Robert E. |last=Goldschmidt |title=Applications of Division by Convergence |series=M.Sc. dissertation |publisher=M.I.T. |date=1964 |oclc=34136725 |url=http://dspace.mit.edu/bitstream/handle/1721.1/11113/34136725-MIT.pdf }}</ref> (रॉबर्ट इलियट गोल्डश्मिड्ट के बाद<ref><!-- some bio bits for possible article -->https://web.archive.org/web/20180718114413/https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5392026</ref>) लाभांश और भाजक दोनों को एक सामान्य कारक F द्वारा बार-बार गुणा करने की पुनरावृत्त प्रक्रिया का उपयोग करता है<sub>''i''</sub>, इस तरह चुना जाता है कि भाजक 1 में परिवर्तित हो जाता है। यह लाभांश को मांगे गए भागफल क्यू में परिवर्तित करने का कारण बनता है:
गोल्डश्मिट विभाजन<ref>{{cite thesis |first=Robert E. |last=Goldschmidt |title=Applications of Division by Convergence |series=M.Sc. dissertation |publisher=M.I.T. |date=1964 |oclc=34136725 |url=http://dspace.mit.edu/bitstream/handle/1721.1/11113/34136725-MIT.pdf }}</ref> (रॉबर्ट इलियट गोल्डस्मिड्ट के बाद)<ref><!-- some bio bits for possible article -->https://web.archive.org/web/20180718114413/https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5392026</ref> लाभांश और भाजक दोनों को एक सामान्य कारक (F<sub>i</sub>) द्वारा बार-बार गुणा करने की पुनरावृत्त प्रक्रिया का उपयोग करता है, यह इस प्रकार चयनित किया जाता है कि विभाजक 1 में परिवर्तित हो जाता है। यह लाभांश के भागफल Q में परिवर्तित करने का कारण बनता है:


:<math>Q = \frac{N}{D} \frac{F_1}{F_1} \frac{F_2}{F_2}  \frac{F_\ldots}{F_\ldots}.</math>
:<math>Q = \frac{N}{D} \frac{F_1}{F_1} \frac{F_2}{F_2}  \frac{F_\ldots}{F_\ldots}.</math>
गोल्डश्मिड्ट विभाजन के चरण हैं:
गोल्डश्मिट विभाजन के निम्नलिखित चरण हैं:
# गुणन कारक F के लिए एक अनुमान उत्पन्न करें<sub>i</sub>.
# गुणन कारक F<sub>i</sub> के लिए एक अनुमान उत्पन्न करें।
# लाभांश और भाजक को F से गुणा करें<sub>i</sub>.
# लाभांश और भाजक को F<sub>i</sub> से गुणा करें।
# यदि विभाजक पर्याप्त रूप से 1 के करीब है, तो लाभांश वापस करें, अन्यथा चरण 1 पर लूप करें।
# यदि विभाजक पर्याप्त रूप से 1 के निकट है, तो लाभांश वापस करें, अन्यथा चरण 1 पर पाश(लूप ) प्रयुक्त करे।


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


:<math>F_{i+1} = 2 - D_i.</math>
:<math>F_{i+1} = 2 - D_i.</math>
भाज्य और भाजक को गुणनखंड से गुणा करने पर प्राप्त होता है:
भाज्य और भाजक को गुणनखंड से गुणा करने पर प्राप्त होता है:
:<math>\frac{N_{i+1}}{D_{i+1}} = \frac{N_i}{D_i}\frac{F_{i+1}}{F_{i+1}}.</math>
:<math>\frac{N_{i+1}}{D_{i+1}} = \frac{N_i}{D_i}\frac{F_{i+1}}{F_{i+1}}.</math>
पुनरावृत्तियों की पर्याप्त संख्या k के बाद <math>Q=N_k</math>.
पुनरावृत्तियों <math>Q=N_k</math> की पर्याप्त संख्या k के बाद गोल्डश्मिट पद्धति का उपयोग [[AMD|एएमD]] एथलॉन सीपीयू और बाद के मॉडल में किया जाता है।<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 = 1-x</math> और <math>F_{i} = 1+x^{2^i}</math>.
माना कि N/D को [[दो की शक्ति|दो की घात]] से बढ़ाया गया है <math>D\in(\tfrac{1}{2},1]</math>.  
यह प्रदान करता है
 
जब हम <math>D = 1-x</math> और <math>F_{i} = 1+x^{2^i}</math>का चयन करते है तब -


: <math>
: <math>
Line 262: Line 258:
</math>.
</math>.


बाद <math>n</math> कदम <math>( x\in[0,\tfrac{1}{2}) )</math>, भाजक <math>1-x^{2^n}</math> तक गोल किया जा सकता है <math>1</math> सापेक्ष त्रुटि के साथ
बाद मे <math>n</math> चरण <math>( x\in[0,\tfrac{1}{2}) )</math>, भाजक <math>1-x^{2^n}</math> तक <math>1</math> सापेक्ष त्रुटि के साथ यह निर्धारित किया जा सकता है:


:<math>
:<math>
\varepsilon_n = \frac{Q' - N'}{Q'}  =  x^{2^n}
\varepsilon_n = \frac{Q' - N'}{Q'}  =  x^{2^n}
</math>
</math>
जो कि अधिकतम है <math>2^{-2^n}</math> कब <math>x = {1 \over 2}</math>, इस प्रकार न्यूनतम सटीकता प्रदान करता है <math>2^n</math> बाइनरी अंक।
जो कि <math>2^{-2^n}</math> पर अधिकतम है जब <math>x = {1 \over 2}</math>, इस प्रकार न्यूनतम <math>2^n</math> बाइनरी अंक प्रदान करता है।


== बड़े-पूर्णांक तरीके ==
== विस्तृत-पूर्णांक विधि ==
हार्डवेयर कार्यान्वयन के लिए डिज़ाइन किए गए तरीके आमतौर पर हजारों या लाखों दशमलव अंकों के साथ पूर्णांकों को मापते नहीं हैं; ये अक्सर होते हैं, उदाहरण के लिए, [[क्रिप्टोग्राफी]] में [[मॉड्यूलर अंकगणित|मॉड्यूलर]] कटौती में। इन बड़े पूर्णांकों के लिए, अधिक कुशल विभाजन एल्गोरिदम समस्या को कम संख्या में गुणन का उपयोग करने के लिए रूपांतरित करते हैं, जो तब [[करत्सुबा एल्गोरिथम]], टूम-कुक गुणन या शॉनहेज-स्ट्रैसन एल्गोरिथम जैसे असम्बद्ध रूप से कुशल गुणन एल्गोरिथ्म का उपयोग करके किया जा सकता है। परिणाम यह है कि विभाजन की कम्प्यूटेशनल जटिलता गुणा के समान क्रम (गुणक स्थिरांक तक) की है। उदाहरणों में ऊपर वर्णित न्यूटन की विधि द्वारा गुणा में कमी सम्मिलित है<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!}} न्यूटन की विधि परिदृश्यों में विशेष रूप से कुशल होती है जहां एक ही विभाजक द्वारा कई बार विभाजित किया जाना चाहिए, क्योंकि प्रारंभिक न्यूटन व्युत्क्रम के बाद प्रत्येक विभाजन के लिए केवल एक (संक्षिप्त) गुणन की आवश्यकता होती है।


== एक स्थिर द्वारा विभाजन ==
== एक स्थिर द्वारा विभाजन ==
एक निरंतर डी द्वारा विभाजन इसके गुणक व्युत्क्रम द्वारा गुणा के बराबर है। चूँकि हर स्थिर है, इसलिए इसका व्युत्क्रम (1/D) है। इस प्रकार संकलन समय पर एक बार (1/D) के मान की गणना करना संभव है, और रन टाइम पर विभाजन N/D के बजाय गुणन N·(1/D) करें। [[तैरनेवाला स्थल]] अंकगणित में (1/D) का उपयोग छोटी समस्या प्रस्तुत करता है,{{efn|Despite how "little" problem the optimization causes, this reciprocal optimization is still usually hidden behind a "fast math" flag in modern [[compiler]]s as it is inexact.}} लेकिन [[पूर्णांक (कंप्यूटर विज्ञान)]] अंकगणित में पारस्परिक हमेशा शून्य का मानांकन करेगा (यह मानते हुए |D| > 1)
एक निरंतर D द्वारा विभाजन इसके गुणक व्युत्क्रम द्वारा गुणा के बराबर होता है। चूँकि हर स्थिर होता है, इसलिए इसका व्युत्क्रम (1/D) होता है। इस प्रकार संकलन समय पर एक बार मे (1/D) के मान की गणना करना संभव होता है और संकलन समय पर विभाजन N/D के अतिरिक्त गुणन N·(1/D) [[तैरनेवाला स्थल|अस्थायी बिन्दु]] अंकगणित में (1/D) का उपयोग छोटी समस्या प्रस्तुत करता है,{{efn|Despite how "little" problem the optimization causes, this reciprocal optimization is still usually hidden behind a "fast math" flag in modern [[compiler]]s as it is inexact.}} लेकिन [[पूर्णांक (कंप्यूटर विज्ञान)]] अंकगणित में पारस्परिक रूप से शून्य का मानांकन (यह मानते हुए |D| > 1) करता है।


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


हालाँकि, जब तक D स्वयं दो की शक्ति नहीं है, तब तक कोई X और Y नहीं है जो उपरोक्त शर्तों को पूरा करता हो। सौभाग्य से, (N·X)/Y पूर्णांक अंकगणित में N/D के समान परिणाम देता है, भले ही (X/Y) 1/D के बिल्कुल बराबर न हो, लेकिन इतना करीब हो कि सन्निकटन द्वारा प्रस्तुत त्रुटि में हो बिट्स जो शिफ्ट ऑपरेशन द्वारा छोड़े गए हैं।<ref>{{cite journal |title=Division by Invariant Integers using Multiplication |first1=Torbjörn |last1=Granlund |first2=Peter L. |last2=Montgomery |journal=SIGPLAN Notices |volume=29 |issue=6 |date=June 1994 |pages=61–72 |doi=10.1145/773473.178249 |url=http://gmplib.org/~tege/divcnst-pldi94.pdf |citeseerx=10.1.1.1.2556 }}</ref><ref>{{cite journal |title=Improved Division by Invariant Integers |first1=Niels |last1=Möller |first2=Torbjörn |last2=Granlund |journal=IEEE Transactions on Computers |date=February 2011 |volume=60 |issue=2 |pages=165–175 |doi=10.1109/TC.2010.143 |s2cid=13347152 |url=http://gmplib.org/~tege/division-paper.pdf }}</ref><ref>
हालाँकि, जब तक D स्वयं दो की घात नहीं है, तब तक कोई X और Y नहीं है जो उपरोक्त शर्तों को पूरा करता हो। सामान्यतः (N·X)/Y पूर्णांक अंकगणित में N/D के समान परिणाम देता है, यद्यपि (X/Y) 1/D के मान बराबर न हो, लेकिन इतना निकट हो कि सन्निकटन द्वारा प्रस्तुत त्रुटि में हो बिट्स जो शिफ्ट संचालन द्वारा छोड़े गए हैं।<ref>{{cite journal |title=Division by Invariant Integers using Multiplication |first1=Torbjörn |last1=Granlund |first2=Peter L. |last2=Montgomery |journal=SIGPLAN Notices |volume=29 |issue=6 |date=June 1994 |pages=61–72 |doi=10.1145/773473.178249 |url=http://gmplib.org/~tege/divcnst-pldi94.pdf |citeseerx=10.1.1.1.2556 }}</ref><ref>{{cite journal |title=Improved Division by Invariant Integers |first1=Niels |last1=Möller |first2=Torbjörn |last2=Granlund |journal=IEEE Transactions on Computers |date=February 2011 |volume=60 |issue=2 |pages=165–175 |doi=10.1109/TC.2010.143 |s2cid=13347152 |url=http://gmplib.org/~tege/division-paper.pdf }}</ref><ref>
ridiculous_fish.
ridiculous_fish.
[http://ridiculousfish.com/files/faster_unsigned_division_by_constants.pdf "Labor of Division (Episode III): Faster Unsigned Division by Constants"].
[http://ridiculousfish.com/files/faster_unsigned_division_by_constants.pdf "Labor of Division (Episode III): Faster Unsigned Division by Constants"].
2011.
2011.
</ref> बैरेट रिडक्शन वाई के मान के लिए 2 की शक्तियों का उपयोग करता है ताकि वाई द्वारा विभाजन को एक सरल दायां शिफ्ट बनाया जा सके।{{efn|1=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.<ref>{{cite web |last1=ridiculous_fish |title=libdivide, optimized integer division |url=https://libdivide.com/ |access-date=6 July 2021}}</ref>}}
</ref> बैरेट घटाव Y के मान के लिए 2 की घातों का उपयोग करता है ताकि Y द्वारा विभाजन को एक सरल दायां शिफ्ट बनाया जा सके।{{efn|1=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.<ref>{{cite web |last1=ridiculous_fish |title=libdivide, optimized integer division |url=https://libdivide.com/ |access-date=6 July 2021}}</ref>}} एक ठोस [[निश्चित-बिंदु अंकगणित|निश्चित-बिंदु अंकगणितीय]] उदाहरण के रूप में, 32-बिट अहस्ताक्षरित पूर्णांकों के लिए, 3 से विभाजन को {{sfrac|2863311531|2<sup>33</sup>}}, 2863311531 ([[हेक्साडेसिमल]] 0xAAAAAAAB) द्वारा एक गुणा और उसके बाद 33 दाएँ बिट शिफ़्ट गुणा द्वारा प्रतिस्थापित किया जा सकता है । 2863311531 के मान की गणना {{sfrac|2<sup>33</sup>|3}} इस प्रकार की जाती है इसी प्रकार, 10 से विभाजन को 3435973837 (0xCCCCCCCD) के गुणन के बाद 2<sup>35</sup> से विभाजन के रूप में या 35 राइट बिट शिफ्ट के रूप मे व्यक्त किया जा सकता है।<ref name="Hacker's Delight">{{Cite book |title=Hacker's Delight |first=Henry S. |last=Warren Jr. |date=2013 |edition=2 |publisher=[[Addison Wesley]] - [[Pearson Education, Inc.]] |isbn=978-0-321-84268-8|title-link=Hacker's Delight}}</ref>{{rp|p230-234}} [[OEIS|ओईआईएस]] गुणन के लिए {{OEIS link|A346495}} के रूप में स्थिरांक और {{OEIS link|A346496}} के रूप में सही शिफ्ट के लिए अनुक्रम प्रदान करता है।
एक ठोस [[निश्चित-बिंदु अंकगणित]]ीय उदाहरण के रूप में, 32-बिट अहस्ताक्षरित पूर्णांकों के लिए, 3 से विभाजन को गुणा द्वारा प्रतिस्थापित किया जा सकता है {{sfrac|2863311531|2<sup>33</sup>}}, 2863311531 ([[हेक्साडेसिमल]] 0xAAAAAAAB) द्वारा एक गुणा और उसके बाद 33 दाएँ बिट शिफ़्ट। 2863311531 के मान की गणना इस प्रकार की जाती है {{sfrac|2<sup>33</sup>|3}}, फिर गोल किया। इसी तरह, 10 से विभाजन को 3435973837 (0xCCCCCCCD) के गुणन के बाद 2 से विभाजन के रूप में व्यक्त किया जा सकता है<sup>35</sup> (या 35 राइट बिट शिफ्ट)।<ref name="Hacker's Delight">{{Cite book |title=Hacker's Delight |first=Henry S. |last=Warren Jr. |date=2013 |edition=2 |publisher=[[Addison Wesley]] - [[Pearson Education, Inc.]] |isbn=978-0-321-84268-8|title-link=Hacker's Delight}}</ref>{{rp|p230-234}} [[OEIS]] गुणन के लिए स्थिरांकों के अनुक्रम प्रदान करता है {{OEIS link|A346495}} और सही बदलाव के लिए {{OEIS link|A346496}}.
 
सामान्य के लिए <math>x</math>-बिट अहस्ताक्षरित पूर्णांक विभाजन जहां विभाजक <math>D</math> दो की घात नहीं है निम्नलिखित पहचान विभाजन को <math>x</math>-बिट जोड़/घटाव, एक <math>x</math>-बिट द्वारा <math>x</math>-बिट गुणन में परिवर्तित करती है जहां परिणाम के केवल ऊपरी आधे भाग का उपयोग किया जाता है और कई परिवर्तन, प्रीकंप्यूटिंग के बाद <math>k=x+\lceil\log_2{D}\rceil</math> और <math>a=\left\lceil\frac{2^k}{D}\right\rceil-2^x</math>:
 
<math>\left\lfloor\frac{N}{D}\right\rfloor=\left\lfloor\frac{\left\lfloor\frac{N-b}{2}\right\rfloor+b}{2^{k-x-1}}\right\rfloor</math> जहां <math>b=\left\lfloor\frac{Na}{2^x}\right\rfloor</math>


सामान्य के लिए <math>x</math>-बिट अहस्ताक्षरित पूर्णांक विभाजन जहां विभाजक <math>D</math> 2 की शक्ति नहीं है, निम्नलिखित पहचान विभाजन को दो में परिवर्तित करती है <math>x</math>-बिट जोड़/घटाव, एक <math>x</math>-बिट द्वारा <math>x</math>-बिट गुणन (जहां परिणाम के केवल ऊपरी आधे हिस्से का उपयोग किया जाता है) और कई बदलाव, प्रीकंप्यूटिंग के बाद <math>k=x+\lceil\log_2{D}\rceil</math> और <math>a=\left\lceil\frac{2^k}{D}\right\rceil-2^x</math>:
कुछ स्थितियों में, एक स्थिरांक द्वारा विभाजन को और भी कम समय में गुणन को एक गुणन एल्गोरिथम #Shift और add में एक स्थिरांक द्वारा परिवर्तित करके पूरा किया जा सकता है।<ref name=":0">LaBudde, Robert A.; Golovchenko, Nikolai; Newton, James; and Parker, David; [http://techref.massmind.org/techref/method/math/divconst.htm ''Massmind: "Binary Division by a Constant"'']</ref> विशेष दर 10 से विभाजन है, जिसके लिए यदि आवश्यक हो तो शेष के साथ, सटीक भागफल प्राप्त किया जाता है।<ref name=":1">{{cite journal |first=R. A. |last=Vowels |title=Division by 10 |journal=Australian Computer Journal |volume=24 |issue=3 |year=1992 |pages=81–85 }}</ref>


<math>\left\lfloor\frac{N}{D}\right\rfloor=\left\lfloor\frac{\left\lfloor\frac{N-b}{2}\right\rfloor+b}{2^{k-x-1}}\right\rfloor</math>
कुछ स्थितियों में, एक स्थिरांक द्वारा विभाजन को (एक स्थिरांक से गुणा करें) गुणन एल्गोरिथम की एक श्रृंखला में परिवर्तित करके और जोड़ या घटाकर और भी कम समय में पूर्ण किया जा सकता है।<ref name=":0" /> जिसकी विशेष दर 10 से विभाजन है जिसके लिए यदि आवश्यक हो तो शेषफल के साथ, उपयुक्त भागफल प्राप्त किया जाता है।<ref name=":1" />
कहाँ <math>b=\left\lfloor\frac{Na}{2^x}\right\rfloor</math>
== पूरक त्रुटि ==
कुछ मामलों में, एक स्थिरांक द्वारा विभाजन को और भी कम समय में गुणन को एक गुणन एल्गोरिथम #Shift और add में एक स्थिरांक द्वारा परिवर्तित करके पूरा किया जा सकता है।<ref>LaBudde, Robert A.; Golovchenko, Nikolai; Newton, James; and Parker, David; [http://techref.massmind.org/techref/method/math/divconst.htm ''Massmind: "Binary Division by a Constant"'']</ref> विशेष रुचि 10 से विभाजन है, जिसके लिए यदि आवश्यक हो तो शेष के साथ, सटीक भागफल प्राप्त किया जाता है।<ref>{{cite journal |first=R. A. |last=Vowels |title=Division by 10 |journal=Australian Computer Journal |volume=24 |issue=3 |year=1992 |pages=81–85 }}</ref>
सीमित परिशुद्धता (कंप्यूटर विज्ञान) के कारण विभाजन संचालन द्वारा [[राउंड-ऑफ त्रुटि|निकटन त्रुटि]] प्रस्तावित की जा सकती है।
== राउंडिंग एरर ==
{{expand section|date=September 2012}}
सीमित परिशुद्धता (कंप्यूटर विज्ञान) के कारण विभाजन संचालन द्वारा [[राउंड-ऑफ त्रुटि]] पेश की जा सकती है।


{{further | Floating point}}
{{further | अस्थिर बिन्दु}}
== यह भी देखें ==
== यह भी देखें ==
* [[गैली डिवीजन|गैली विभाजन]]
* [[गैली डिवीजन|गैली विभाजन]]
Line 301: Line 297:
== टिप्पणियाँ ==
== टिप्पणियाँ ==
{{notelist|30em}}
{{notelist|30em}}
==संदर्भ==
==संदर्भ==
{{reflist|30em}}
{{reflist|30em}}
Line 310: Line 304:
* {{cite web |title=Advanced Arithmetic Techniques |author-first=John J. G. |author-last=Savard |date=2018 |orig-year=2006 |work=quadibloc |url=http://www.quadibloc.com/comp/cp0202.htm |access-date=2018-07-16 |url-status=live |archive-url=https://web.archive.org/web/20180703001722/http://www.quadibloc.com/comp/cp0202.htm |archive-date=2018-07-03}}
* {{cite web |title=Advanced Arithmetic Techniques |author-first=John J. G. |author-last=Savard |date=2018 |orig-year=2006 |work=quadibloc |url=http://www.quadibloc.com/comp/cp0202.htm |access-date=2018-07-16 |url-status=live |archive-url=https://web.archive.org/web/20180703001722/http://www.quadibloc.com/comp/cp0202.htm |archive-date=2018-07-03}}


{{Number-theoretic algorithms}}
{{DEFAULTSORT:Division (Digital)}}
 
{{DEFAULTSORT:Division (Digital)}}[[Category: बाइनरी अंकगणित]] [[Category: कंप्यूटर अंकगणित]] [[Category: डिवीजन (गणित)|डिजिटल]] [[Category: स्यूडोकोड के उदाहरण वाले लेख]] [[Category: कंप्यूटर अंकगणितीय एल्गोरिदम]]
 
 


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements|Division (Digital)]]
[[Category:Created On 07/02/2023]]
[[Category:All pages needing factual verification|Division (Digital)]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Division (Digital)]]
[[Category:Articles with invalid date parameter in template|Division (Digital)]]
[[Category:Articles with unsourced statements from February 2012|Division (Digital)]]
[[Category:Articles with unsourced statements from February 2014|Division (Digital)]]
[[Category:CS1 English-language sources (en)]]
[[Category:Created On 07/02/2023|Division (Digital)]]
[[Category:Lua-based templates|Division (Digital)]]
[[Category:Machine Translated Page|Division (Digital)]]
[[Category:Pages with script errors|Division (Digital)]]
[[Category:Short description with empty Wikidata description|Division (Digital)]]
[[Category:Templates Vigyan Ready|Division (Digital)]]
[[Category:Templates that add a tracking category|Division (Digital)]]
[[Category:Templates that generate short descriptions|Division (Digital)]]
[[Category:Templates using TemplateData|Division (Digital)]]
[[Category:Wikipedia articles needing factual verification from June 2015|Division (Digital)]]
[[Category:कंप्यूटर अंकगणित|Division (Digital)]]
[[Category:कंप्यूटर अंकगणितीय एल्गोरिदम|Division (Digital)]]
[[Category:डिवीजन (गणित)|डिजिटल]]
[[Category:बाइनरी अंकगणित|Division (Digital)]]
[[Category:स्यूडोकोड के उदाहरण वाले लेख|Division (Digital)]]

Latest revision as of 13:30, 17 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
DD:= D << n            -- R और D को N और Q की शब्द चौड़ाई की दोगुनी आवश्यकता होती है
for i := n − 1 .. 0 do  -- उदाहरण 31..0 के लिए 32 बिट
  R := 2 * R − D          -- स्थानांतरित मान से परीक्षण घटाव (2 से गुणा करना बाइनरी प्रतिनिधित्व में परिवर्तन है)
  if R >= 0 then
    q(i) := 1          -- परिणामी बिट 1
  else
    q(i) := 0          -- परिणामी बिट 0
    R0:= 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.धनात्मक मान
2. ऋणात्मक शब्द का मास्क मान
3. व्यवकलन: :
*.दो पूरक के अतिरिक्त किसी एक पूरक के साथ हस्ताक्षरित बाइनरी संकेत

यदि −1 के अंक को शून्य (0) के रूप में संग्रहीत किया जाता है जैसा कि सामान्य , और कंप्यूटिंग तुच्छ मान है जो मूल पर एक पूरक (बिट पूरक) है।

 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 है। (प्रत्यानयन विभाजन के साथ, R के निम्न-क्रम बिट्स के उसी दर पर उपयोग किए जाते हैं जैसे भागफल Q के बिट्स का उत्पादन होता है और दोनों के लिए एकल विस्थापन रजिस्टर का उपयोग करना सामान्य है।)

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

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

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

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

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

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

तीव्रगामी विभाजन के तरीके

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

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

न्यूटन-रेफसन विभाजन के निम्न चरण हैं:

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

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

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

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

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

प्रत्येक पुनरावृत्ति पर त्रुटि का यह वर्ग न्यूटन-रैफसन की विधि के तथाकथित द्विघात अभिसरण चरण का प्रभाव है कि परिणाम में सही अंकों की संख्या प्रत्येक पुनरावृत्ति के लिए सामान्यतः दोगुनी हो जाती है, एक वित्त जो बहुत मूल्यवान हो जाती है जब इसमें सम्मिलित संख्याएँ बहुत अधिक अंक (जैसे बड़े पूर्णांक डोमेन में) होती हैं लेकिन इसका तात्पर्य यह भी है कि इस विधि का प्रारंभिक अभिसरण तुलनात्मक रूप से धीमा हो सकता है,प्रायः यदि प्रारंभिक अनुमान गलत चयनित किया गया है। प्रारंभिक अनुमान चुनने की उप-समस्या के लिए , इसे बढ़ाने करने के लिए भाजक D पर बिट-शिफ्ट पप्रयुक्त करना सुविधाजनक होता है ताकि 0.5 ≤ D ≤ 1 अंश N पर समान बिट-शिफ्ट प्रयुक्त करने से, यह सुनिश्चित होता है कि भागफल परिवर्तित नही होता है। तब किसी भी रूप में एक रेखीय सन्निकटन का उपयोग किया जा सकता है।

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

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

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

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

बाइनरी स्थानों तक के मान की गणना करने के लिए चरण पर्याप्त हैं। यह इंस्टीट्यूट ऑफ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर (आईईईई) एकल परिशुद्धता के लिए 3 और दोहरी परिशुद्धता और विस्तारित परिशुद्धता प्रारूप दोनों के लिए 4 का मानांकन करता है।

स्यूडोकोड

निम्नलिखित P बाइनरी स्थानों की परिशुद्धता के साथ N और D के भागफल की गणना करता है:

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 शिफ्ट का उपयोग करती है।

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

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

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

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

इसमे Y·E एक नया पद है।

यदि पाश को तब तक निष्पादित किया जाता है जब तक कि x इसके प्रमुख P बिट्स पर 1/D से सहमत नहीं हो जाता है, तब पुनरावृत्तियों की संख्या इससे अधिक नहीं होती है।

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

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

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

गोल्डश्मिट विभाजन

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

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

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

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

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

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

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

गोल्डश्मिट विधि का उपयोग उन कारकों के साथ किया जा सकता है जो द्विपद प्रमेय द्वारा सरलीकरण की स्वीकृति देते हैं।

माना कि N/D को दो की घात से बढ़ाया गया है .

जब हम और का चयन करते है तब -

.

बाद मे चरण , भाजक तक सापेक्ष त्रुटि के साथ यह निर्धारित किया जा सकता है:

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

विस्तृत-पूर्णांक विधि

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

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

एक निरंतर D द्वारा विभाजन इसके गुणक व्युत्क्रम द्वारा गुणा के बराबर होता है। चूँकि हर स्थिर होता है, इसलिए इसका व्युत्क्रम (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 का उपयोग किया जा सकता है। जिसके परिणामस्वरूप यदि Y की घात 2 होती है तो विभाजन चरण तीव्रता से दाएं बिट शिफ्ट में कम हो जाता है (N·X)/Y के रूप में N/D की गणना करने का प्रभाव एक विभाजन को एक गुणा मे परिवर्तित कर देता है। ध्यान दें कि कोष्ठक महत्वपूर्ण हैं, क्योंकि N·(X/Y) का मानांकन शून्य होगा।

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

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

जहां

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

कुछ स्थितियों में, एक स्थिरांक द्वारा विभाजन को (एक स्थिरांक से गुणा करें) गुणन एल्गोरिथम की एक श्रृंखला में परिवर्तित करके और जोड़ या घटाकर और भी कम समय में पूर्ण किया जा सकता है।[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. 25.0 25.1 LaBudde, Robert A.; Golovchenko, Nikolai; Newton, James; and Parker, David; Massmind: "Binary Division by a Constant"
  26. 26.0 26.1 Vowels, R. A. (1992). "Division by 10". Australian Computer Journal. 24 (3): 81–85.


अग्रिम पठन