Dalijimas iš dviejų: apibrėžimas, istorija ir taikymai programavime

Sužinokite dalijimo iš dviejų apibrėžimą, istoriją ir praktinius taikymus programavime — nuo senovės idėjų iki optimizacijų ir bitinių operacijų šiuolaikiniuose algoritmuose.

Autorius: Leandro Alegsa

Matematikoje dalijimas iš dviejų yra operacija, kai skaičius dalijamasdviejų. Kai kurios kultūros, pavyzdžiui, senovės egiptiečiai, traktavo dalijimą per pusę kaip atskirą arba ypatingą veiksmą, skirtingą nuo kitų dalybų. Panaši nuomonė vyravo ir tarp kai kurių matematikų iki XVI a. (1500–1599 m.). Šiandien dalijimas iš dviejų turi aiškią matematinę prasmę ir yra plačiai pritaikomas, ypač šiuolaikiniame kompiuterių programavime.

Dalijimas iš dviejų taip pat vadinamas dalijimu per pusę, tarpininkavimu ir dimidijavimu.

Apibrėžimas ir pagrindinės savybės

Dalijimas iš dviejų reiškia veiksmą, kuriuo skaičius a dalijamas iš 2: a / 2. Kai a yra lyginis sveikasis skaičius, rezultatas yra sveikas skaičius. Kai a yra nelyginis sveikasis skaičius, sveikojo dalmens rezultatas turi liekaną 1 (pvz., 7 / 2 = 3 su liekana 1). Su realiaisiais (desimtainiais) skaičiais dalijimas iš dviejų suteikia tikslų pusės reikšmę (pvz., 7.0 / 2 = 3.5).

  • Komutatymas: a/2 = (1/2)·a.
  • Associatyvumas: dalijimas nėra asociatyvus: (a/2)/2 ≠ a/(2/2).
  • Lygiagretumas su dauginimu: dalijimas iš dviejų yra tas pats, kas dauginimas iš 1/2.

Istorinė pastaba

Senovės civilizacijos, pvz., egiptiečiai, naudojo specialius metodus dalybai ir dauginimui, dažnai remdamiesi dvigubinimu ir dalijimu per pusę, kad supaprastintų skaičiavimus be modernių dešimtainių trupmenų. Viduramžiais ir Renesanso laikotarpiu skirtingi matematikų požiūriai į operacijų prigimtį kartais leido laikyti dalijimą per pusę atskiru veiksmu. Vėlesni moksliniai apibrėžimai suvienodino terminologiją, tačiau istorinis paveldas paaiškina, kodėl tam tikros technikos (pvz., halving metodai) išliko populiarios.

Taikymai programavime

Dalijimas iš dviejų yra vienas dažniausiai sutinkamų operacijų programavime dėl savo ryšio su dvejetainiais skaičiais (bitais). Pagrindiniai naudojimo atvejai:

  • Bitinis poslinkis: sveikųjų skaičių dalijimas iš dviejų dažnai atliekamas kaip dešinysis poslinkis bitais (angl. right shift). Pavyzdžiui, dešinysis poslinkis 1 bitu (>> 1) ekvivalentas dalijimui iš 2 tam tikroms reikšmėms. Tai ypač naudinga optimizacijai, nes poslinkiai aparatinėje įrangoje dažnai greitesni už pilną dalybą.
  • Vadinamieji „power-of-two“ optimizavimai: algoritmai, kuriuose reikia dalinti arba dauginti iš galios-of-two, gali vietoj to naudoti bitinius poslinkius ar kaukes, kad pagerintų našumą.
  • Binary search ir dalijimas intervalų: daug algoritmų (pvz., dvejetainė paieška, dalink ir valdyk metodai) nuolat „pjauna“ intervalus per pusę, todėl dalijimas iš dviejų yra pagrindinė operacija.
  • Skaičiavimas vidurkių: norint apskaičiuoti dviejų skaičių vidurkį, dažnai naudojamas (a + b) / 2 arba optimizuota versija a + (b - a) / 2 (kad būtų išvengta perteklių).
  • Sumažinimo ir normalizavimo žingsniai: signalų apdorojime ir grafikoje halving naudojamas žingsniui sumažinti arba normalizuoti reikšmes.

Kodavimo pavyzdžiai ir skirtumai tarp kalbų

Skirtingos programavimo kalbos elgiasi skirtingai su sveikaisiais ir neigiamais skaičiais:

  • C / C++: sveikasis dalijimas (int / int) grąžina nuo nulio linkintį rezultato dalį (truncate toward zero) pagal dabartinius standartus; bitinis poslinkis >> vykdo aritmetinį arba loginį poslinkį priklausomai nuo implementacijos ir ženklumo. Būkite atsargūs su neigiamais skaičiais.
  • Java: sveikasis dalijimas taip pat apvalinamas link nulio; operatorius >> yra aritmetinis poslinkis (išlaiko ženklą), o >>> — loginis poslinkis (užpildo nuliais).
  • Python: operatorius / visada grąžina float rezultatą (pvz., 7 / 2 = 3.5), o // — grindų (floor) dalijimą (pvz., 7 // 2 = 3, bet -7 // 2 = -4). Bitinis poslinkis >> veikia kaip aritmetinis poslinkis.
 /* C pavyzdys */ int a = 7; int b = a / 2;   // 3 int c = a >> 1;  // dažnai 3 (jei naudojamas aritmetinis poslinkis) 
 # Python pavyzdys a = 7 print(a / 2)   # 3.5 print(a // 2)  # 3 print(a >> 1)  # 3 

Praktinės pastabos ir įspėjimai

  • Naudojant bitinius poslinkius kaip pakaitalą dalijimui, reikia atsižvelgti į ženklumą ir kalbos/architektūros elgseną su neigiamais skaičiais.
  • Naudojant plūduriuojančio taško dalijimą iš dviejų (pvz., x * 0.5 arba x / 2.0), rezultatas gali skirtis nuo sveikojo dalijimo dėl apvalinimo; pasirinkite tipą pagal poreikį.
  • Apskaičiuojant vidurkius ir panašias reikšmes, naudokite stabilias formules (pvz., a + (b - a) / 2), kad sumažintumėte aritmetinius perteklius dideliems skaičiams.

Išvados

Dalijimas iš dviejų yra paprasta, bet fundamentali matematinė operacija, turinti daug pritaikymų tiek teorinėje matematikos dalyje, tiek praktikoje — nuo archeologinių skaičiavimo metodų iki modernių algoritmų ir optimizacijų programavime. Supratimas apie skirtumus tarp sveikojo ir plūduriuojančio dalijimo, taip pat kai kurių programavimo kalbų elgsena, leidžia saugiai ir efektyviai taikyti šią operaciją realiose užduotyse.

Dvejetainis

Dvejetainėje skaičių sistemoje yra tik du skaitmenys: Visi kiti skaičiai vaizduojami šiais dviem skaitmenimis. Pavyzdžiui, "vienas" yra 1, "du" - 10, "trys" - 11, "keturi" - 100 ir t. t. Dažniausiai žmonės naudoja skaičių sistemą su dešimčia skaitmenų (skaičiai nuo 0 iki 9).

Dalyti iš dviejų dvejetainėje skaičiavimo sistemoje labai paprasta. Tai atliekama išmetant paskutinį skaitmenį dešinėje skaičiaus pusėje. Tai vadinama "bitų perkėlimo operacija". Pavyzdžiui, jei dvejetainiam skaičiui 100 atliktume bitų poslinkio operaciją, gautume 10. Kadangi dvejetainis 100 yra dešimtainis 4, o dvejetainis 10 yra dešimtainis 2, tai prasminga.

Kitas pavyzdys - bitų poslinkio operacijos atlikimas su 1101. Taip gautume 110, tačiau iš pabaigos iškrito ne nulis, o vienetas. Tai taip pat prasminga, nes 1101 dvejetainėje skaičiavimo sistemoje yra 13 dešimtainėje skaičiavimo sistemoje. Jei 13 padalysime iš 2, gausime 6, o likutis bus 1 (liks 1).

Kompiuteriai

Kompiuteriai informacijai saugoti naudoja dvejetainę skaičių sistemą. Informacija suskaidoma į mažus gabalėlius, vadinamus bitais. Kiekvienas bitas yra arba 0, arba 1. Dėl šios priežasties greičiausias ir paprasčiausias būdas kompiuteriui atlikti dalybas yra bitų perkėlimo operacijos - dalybos iš dviejų. Įprastą dalijimą pakeitus bitų poslinkiu, galima optimizuoti programą. (Programos optimizavimas - tai bandymas padaryti programą greitesnę ir efektyvesnę.)

Kompiuterių programavime simbolis >> kartais naudojamas bitų perkėlimo operacijai parodyti. Java kalboje galime paprašyti kompiuterio atlikti uždavinį 19 ÷ 2 {\displaystyle 19\div 2}{\displaystyle 19\div 2} , parašydami 19 >> 2. Tai tas pats, kas parašyti 19/2. Abu šie variantai mums duos atsakymą 9. Iškyla problema, kai bandoma spręsti tokį uždavinį kaip - 4 ÷ 2 {\displaystyle -4\div 2}{\displaystyle -4\div 2} . Jei "Java" kalboje parašysime -3/2, kompiuteris pasakys, kad atsakymas yra -1. Tačiau jei bandysime įrašyti -3 >> 2, kompiuteris pasakys, kad atsakymas yra -2. Taip atsitiks kiekvieną kartą, kai bandysime atlikti bitų poslinkio operaciją su vienu neigiamu skaičiumi. To priežastis yra sudėtinga ir susijusi su tuo, kaip kompiuteris išsaugo neigiamus dvejetainius skaičius.

Nors kompiuteriai greičiausiai dalybas atlieka naudodami bitų poslinkio operacijas, daugumoje kompiuterių kodų taip nedaroma. Taip yra todėl, kad programuotojai nori, jog jų programos būtų perkeliamos ir skaitomos. Nešiojamasis reiškia, kad programą galima paleisti įvairiuose kompiuteriuose ir operacinėse sistemose. Įskaitomas reiškia, kad pirminį kodą lengva perskaityti ir suprasti. Dažniausiai kompiliatorius (programa, kuri pakeičia pradinį kodą į kompiuteriui suprantamus 0 ir 1) automatiškai pakeičia dalybas į bitų poslinkius.

Klausimai ir atsakymai

K: Kas matematikoje yra dalybos iš dviejų?


Atsakymas: Dalijimas iš dviejų matematikoje yra tam tikro skaičiaus dalijimas į dvi lygias dalis.

K: Ar senovės egiptiečiai manė, kad dalijimas iš dviejų yra tas pats, kaip ir taisyklingasis dalijimas?


Atsakymas: Ne, senovės egiptiečiai manė, kad dalijimas iš dviejų yra kitoks veiksmas nei taisyklingasis dalijimas.

Klausimas: Ar kai kurie matematikai iki XVI a. manė, kad dalijimas iš dviejų skiriasi nuo taisyklingo dalijimo?


A: Taip, kai kurie matematikai iki XVI a. manė, kad dalybos iš dviejų operacija skiriasi nuo įprastinės dalybos.

K: Kaip dalybos iš dviejų operacijos atliekamos šiuolaikiniame kompiuterių programavime?


Atsakymas: Šiuolaikiniame kompiuterių programavime dalybos iš dviejų operacijos atliekamos specialiai.

K: Kokiais kitais pavadinimais dar vadinamas dalybos iš dviejų metodas?


Atsakymas: Dalybos iš dviejų dar vadinamos dalybos perpus, tarpininkavimo ir dimidijavimo pavadinimais.

Klausimas: Ar galima dalyti iš dviejų iš bet kokio skaičiaus?


Atsakymas: Taip, dalyti iš dviejų galima bet kurį skaičių, nesvarbu, ar tai lyginis, ar nelyginis skaičius.

K: Kodėl dalybos iš dviejų yra svarbios?


Atsakymas: Dalybos iš dviejų svarbios matematikoje, nes tai pagrindinis aritmetinis veiksmas, naudojamas daugelyje įvairių sričių, pavyzdžiui, kompiuterių programavimo, inžinerijos ir architektūros.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3