Împărțire pe două

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În matematică , împărțirea la două sau la jumătate a fost considerată o operație diferită de înmulțirea sau împărțirea cu alte numere încă de pe vremea vechilor egipteni , care au folosit o tehnică de multiplicare care a adoptat împărțirea la doi ca unul dintre elementele fundamentale [1] . Unii matematicieni de la sfârșitul secolului al XVI-lea au continuat să o vadă ca pe o operație distinctă [2] [3] și este adesea tratată ca atare în programarea modernă [4] . Împărțirea la două este o operație simplă de efectuat în aritmetică zecimală, sistemul de numere binare utilizat în programarea computerului și alte sisteme de numerotare bazate pe numere pare .

Sistem de numere binare

În sistemul de numere binare , împărțirea la doi poate fi efectuată ca o operație care deplasează numărul (schimbarea de biți) un loc spre dreapta. Acesta este un caz de optimizare prin reducerea forței. De exemplu, prin deplasarea numărului binar 1101001 (reprezentând numărul zecimal 105) la dreapta cu un loc, se obține 110100 (numărul zecimal 52): bitul de ordinul cel mai mic, 1, este eliminat. În mod similar, împărțirea pentru fiecare putere a două 2k se poate face prin deplasarea k pozițiilor spre dreapta. Deoarece deplasările numerice sunt operațiuni mult mai rapide decât diviziunile, înlocuirea unei diviziuni cu o deplasare poate fi un aspect important al optimizării . Cu toate acestea, în interesul portabilității și lizibilității, este mai adecvat să scrieți programe folosind operația de divizare, bazându-vă pe capacitatea compilatorului de a efectua substituții adecvate [5] .

Totuși, acest lucru nu este întotdeauna adevărat în cazul împărțirii numerelor relative în funcție de reprezentarea binară. În acest caz, deplasarea de 1 bit spre dreapta se împarte întotdeauna la doi cu o rotunjire în jos . Cu toate acestea, în unele limbi, împărțirea numerelor relative binare se rotunjește către 0 (ceea ce înseamnă rotunjire în sus dacă rezultatul este negativ). în limbajul Java , de exemplu, -3 / 2 rezultă în -1 , în timp ce -3 >> 1 rezultă în -2 . Prin urmare, în aceste cazuri, compilatorul nu poate optimiza împărțirea cu doi prin înlocuirea acesteia cu o schimbare de biți , deoarece dividendul ar putea fi negativ.

Punctul de plutire

În aritmetica binară în virgulă mobilă , împărțirea la doi se poate face prin scăderea valorii exponentului cu unul - cu condiția ca rezultatul să nu se încadreze în numerele denormalizate . Multe limbaje de programare au funcții care pot fi utilizate pentru a împărți un număr în virgulă mobilă la două. De exemplu, Java folosește funcția java.lang.Math.scalb [6] , în timp ce C folosește funcția ldexp în același scop [7] .

Zecimale

Următorul algoritm se aplică numerelor zecimale, cu toate acestea poate fi folosit ca model pentru construirea unui algoritm care împarte orice număr N cu valoare de bază pare la două.

  • Scrieți numărul N , precedându-l cu un zero în stânga.
  • Continuați de-a lungul figurilor care alcătuiesc N în perechi suprapuse, scriind cifrele obținute din următorul tabel:
Dacă prima cifră este Chiar Chiar Chiar Chiar Chiar Imagini Imagini Imagini Imagini Imagini
Și a doua cifră este 0 sau 1 2 sau 3 4 sau 5 6 sau 7 8 sau 9 0 sau 1 2 sau 3 4 sau 5 6 sau 7 8 sau 9
Scrie 0 1 2 3 4 5 6 7 8 9

Exemplu: 1738/2 =?

Scrieți 01738 și calculați rezultatul:

  • 01: cifră pare urmată de 1, scrieți 0.
  • 17: cifră impar urmată de 7, scrie 8.
  • 73: cifră impar urmată de 3, scrieți 6.
  • 38: cifră impar urmată de 8, scrieți 9.

Rezultat: 0869.

Din exemplu obținem că 0 este un număr par.

Dacă ultima cifră a unui număr N este impar, trebuie adăugat 0,5 la rezultat.

Notă

  1. ^ Jean-Luc Chabert și Évelyne Barbin, O istorie a algoritmilor: de la pietricică la microcip , Springer-Verlag, 1999, p. 16, ISBN 978-3-540-63369-3 .
  2. ^ Lambert Lincoln Jackson, Semnificația educațională a aritmeticii secolului al XVI-lea din punctul de vedere al timpului prezent , Contribuții la educație, vol. 8, Universitatea Columbia, 1906, p. 76 ..
  3. ^ EGR Waters, Un al cincilea secol francez Algorism din Liége , în Isis , vol. 12, nr. 2, 1929, pp. 194-236.
  4. ^ Kevin R. Wadleigh și Isom L. Crawford,Software optimization for high-performance computing , Prentice Hall, 2000, p. 92, ISBN 978-0-13-017008-8 .
  5. ^ Brian Hook, Scrie cod portabil: o introducere în dezvoltarea de software pentru mai multe platforme , No Starch Press, 2005, p. 133, ISBN 978-1-59327-056-8 .
  6. ^ Math.scalb , pe Java Platform Standard Ed.6 . Accesat la 11 octombrie 2009 .
  7. ^ Limbaje de programare - C, Standardul Internațional ISO / IEC 9899 , 1999. , Secțiunea 7.12.6.6

Elemente conexe

  • Mediană , valoarea care împarte un set de date în două părți egale.
  • Bisectoare , planul, linia sau dreapta care împarte un obiect geometric în părți egale.
  • Shift , o operație aritmetică care constă în deplasarea poziției cifrelor unui număr la dreapta sau la stânga.
Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă de matematică