Jagamine kahega — definitsioon, ajalugu ja kasutamine programmeerimises

Matemaatikas on jagamine kahega see, kui arv jagatakse kahega. Mõned kultuurid, näiteks vanad egiptlased, pidasid seda teistsuguseks operatsiooniks kui jagamist. Mõned matemaatikud kuni 16. sajandini (1500-1599) arvasid samuti nii. Tänapäeval käsitletakse jagamist kahega spetsiaalselt kaasaegses arvutiprogrammeerimises.

Jagamist kahega nimetatakse ka poolitamiseks, vahendamiseks ja dimetiseerimiseks.

Mõiste ja põhivõrrendid

Lihtsaim näide: 8 jagatud kahega on 4 (8 ÷ 2 = 4). Kui jagada paaritu arv kahega, tekib kas murdosa (reaalarvude puhul) või jääk (täisarvude puhul). Näiteks 7 ÷ 2 = 3,5 (reaalarvuna) või täisarvude jagamisel 7 ÷ 2 = 3 jäägiga 1.

Olulised mõisted:

  • Paari või paaritu — täisarv on paaris, kui see jagub kahega ilma jäägita (nt 2, 4, 0, -6); muidu on ta paaritu (nt 1, 3, -5).
  • Jääk — täisarvude jagamisel kahega jääk on kas 0 või 1.
  • Poolitamine — jagamine kahega on sama, mis arvu poolitamine (x ÷ 2 või x/2).

Ajalooline taust

Nagu eespool mainitud, oli jagamine kahega mõtlemises ja tehniliste meetodites oluline juba antiikajal. Vanad egiptlased kasutasid sageli poolitamise ja liitmise kombinatsiooni murrude töötlemiseks. Keskaja ja varauusaegsete matemaatikute diskussioonides (sh kuni 16. sajandini) vaadeldi mõnikord jagamist kahega eraldi operatsioonina teistest jagamistest; tänapäeval on see osa üldisest jagamisest, kuid arvutiteaduses on tal omapärane tähtsus, kuna kaks on binaarsüsteemi alus.

Kasutamine programmeerimises

Programmeeringus on jagamisel kahega mitu praktilist ja jõudlust mõjutavat aspekti:

  • Bitiga nihutamine: Täisarvude puhul on jagamine kahega sageli optimeeritav kui >> 1 (paremale nihutamine) — see vastab jagamisele kahega, kui tegemist on mitte-negatiivsete täisarvudega ja kasutatakse loogilist või aritmeetilist nihutust vastavalt tüübile. Näiteks C/C++ või Java puhul x >> 1 annab tavaliselt sama tulemuse kui x / 2 positiivsete täisarvude korral.
  • Negatiivsete arvude nüansid: õigekirjareeglid erinevates keeltes võivad negatiivsete täisarvude korral erineda. Näiteks mõned keele- või kompilaatorispetsiifilised nihutused võivad käituda aritmeetiliselt (säilitavad märgi) või loogiliselt (täidavad nullidega). Ka täisarvude jagamine võib negatiivsetel arvudel ümardada kas nulli poole (nt C, Java) või alaspidi (nt Python koos // operaatoriga).
  • Tüüpide erinevused: ujukomaarvude jagamine (float/double) vs. täisarvuline jagamine — ujukomaarvudes annab x / 2 täpse poolituse murdosana; täisarvudes sõltub tulemus jagamise reeglist (täisarvude jagamisel tekib täisarvuline tulem või jääk).
  • Tõhusus ja optimeerimine: jagamine konstandiga kahe on klassikaline näide, mida kompilaatorid automaatselt nihutusega asendavad (kui see on semantiliselt ohutu). Sellegipoolest tuleb jälgida, et see ei muuda lõpptulemust negatiivsete või märgitugevuste puhul.
  • Turvalisus ja erandid: jagamine nulliga on viga — jagamine kahega ei tekita seda probleemi, aga alati tuleb programmeerimisel arvestada võimalikku nulliga jagamist muude konstantsidega või muutujate puhul.

Praktilised näited

  • Binary search: vahemiku keskpunkt leitakse tihti poolitades indekseid (mid = (low + high) / 2 või ohutumalt low + (high - low) / 2).
  • Pilditöötlus: pildi suuruse vähendamisel kahega (downsampling) tähendab see horisontaalse ja vertikaalse mõõtme poolitamist.
  • Bititaseme algoritmid: maskide ja bittoperatsioonide puhul kasutatakse nihutust (x >> 1) kiireks jagamiseks kahega.

Keelte eripärad (lühike ülevaade)

  • C/C++: täisarvude jagamine x / 2 lõikab tulemuse alla/arvutatakse lähendusega nulli poole (trunc toward zero), x >> 1 võib olla aritmeetiline või loogiline olenevalt implementeerimisest (standard lubab teatud vabadust). Kompilaatorid sageli asendavad /2 nihutusega optimeerimise käigus.
  • Java: integer division käitub kui lähendamine nulli poole; x >> 1 on aritmeetiline paremnihutus (säilitab märgibiti). Java pakub ka loogilist paremnihutust >>>, mis täidab vasakpoolsema kaudu nullidega.
  • Python: / annab alati ujukomaarvu; // on täisarvuline jagamine (ümardab negatiivsetel arvudel allapoole ehk -3 // 2 = -2). Nihutusoperaatorid (x >> 1) töötavad aritmeetriliselt ka negatiivsete täisarvude puhul.

Kokkuvõte

Jagamine kahega on matemaatikas lihtne, ent programmeerimises omab see mitmeid praktilisi nüansse ja optimeerimisvõimalusi. Mõistes erinevusi täisarvulise ja ujukomaarvulise jagamise, nihutuste ja keelte spetsiifika vahel, saab seda operatsiooni kasutada nii korrektselt kui ka tõhusalt erinevates algoritmides ja rakendustes.

Binary

Binaarses numbrisüsteemis on ainult kaks numbrit: 0 ja 1. Kõik teised arvud esitatakse nende kahe numbriga. Näiteks "üks" on 1, "kaks" on 10, "kolm" on 11, "neli" on 100 jne. Enamasti kasutavad inimesed kümnekohalist arvusüsteemi (numbrid 0 kuni 9.) Seda nimetatakse kümnendsüsteemiks.

Kahega jagamine on binaarselt väga lihtne. See toimub, kui jätta viimane number paremal pool arvust välja. Seda nimetatakse "biti nihutamise operatsiooniks". Näiteks kui me teeksime biti nihutamise operatsiooni binaarvõrrandiga 100, saaksime tulemuseks 10. Kuna binaarvõrrand 100 on kümnendsüsteemi 4 ja binaarvõrrand 10 on kümnendsüsteemi 2, on see mõistlik.

Teine näide on biti nihkeoperatsiooni sooritamine operatsioonil 1101. See jätaks meile 110, kuid me jätsime lõpust välja 1, mitte nulli. See on samuti mõistlik, sest 1101 on binaarses kirjas 13 kümnendmurdes. Kui jagame 13 kahega, saame 6, mille jääk on 1 (meil jääb 1 üle).

Arvutid

Arvutid kasutavad teabe salvestamiseks binaarset numbrisüsteemi. Teave on jaotatud väikesteks tükkideks, mida nimetatakse bittideks. Iga bitt on kas 0 või 1. Seetõttu on arvuti jaoks kiireim ja lihtsaim viis jagada bittide nihutamise abil - jagamine kahega. Tavalise jagamise asendamine biti nihkega on üks viis programmi optimeerimiseks. (Programmi optimeerimine on püüe muuta programm kiiremaks ja tõhusamaks).

Arvutiprogrammeerimises kasutatakse mõnikord sümbolit >>, et näidata biti nihkeoperatsiooni. Java keeles võime paluda arvutil teha ülesanne 19 ÷ 2 {\displaystyle 19\div 2}{\displaystyle 19\div 2} kirjutades 19 >> 2. See on sama, mis kirjutada 19/2. Mõlemad versioonid annavad meile vastuse 9. Probleem tekib siis, kui üritatakse teha midagi sellist probleemi nagu - 4 ÷ 2 {\displaystyle -4\div 2}{\displaystyle -4\div 2} . Kui me kirjutame Java keeles -3/2, ütleb arvuti meile, et vastus on -1. Aga kui me proovime teha -3 >> 2, ütleb arvuti, et vastus on -2. See juhtub iga kord, kui me proovime teha biti nihkeoperatsiooni ühe negatiivse arvuga. Selle põhjus on keeruline ja on seotud sellega, kuidas arvuti negatiivseid binaarvahendeid salvestab.

Kuigi arvutitel on kõige kiirem teha jagamist biti nihkeoperatsioonide abil, ei tee enamik arvutikoode seda nii. Selle põhjuseks on see, et programmeerijad tahavad, et nende programmid oleksid kaasaskantavad ja loetavad. Portatiivne tähendab, et programmi saab käivitada mitmetes erinevates arvutites ja operatsioonisüsteemides. Loetav tähendab, et lähtekoodi on lihtne lugeda ja mõista. Enamasti muudab kompilaator (programm, mis muudab lähtekoodi arvutile arusaadavateks 0-deks ja 1-deks) jaotuse automaatselt biti nihkeks.

Küsimused ja vastused

K: Mis on matemaatikas jagamine kahega?


V: Jagamine kahega on matemaatikas teatud arvu jagamine kaheks võrdseks osaks.

K: Kas vanad egiptlased arvasid, et jagamine kahega on sama, mis tavaline jagamine?


V: Ei, muistsed egiptlased uskusid, et jagamine kahega on teistsugune toiming kui tavaline jagamine.

K: Kas mõned matemaatikud uskusid kuni 16. sajandini, et jagamine kahega on erinev tavalisest jagamisest?


V: Jah, mõned matemaatikud uskusid kuni 16. sajandini, et jagamine kahega on teistsugune operatsioon kui tavaline jagamine.

K: Kuidas käsitletakse jagamist kahega tänapäeva arvutiprogrammeerimises?


V: Kaasaegses arvutiprogrammeerimises käsitletakse jagamist kahega eriliselt.

K: Milliste teiste nimetuste all tuntakse jagamist kahega?


V: Jagamist kahega tuntakse ka nimetuste poolitamine, vahendamine ja dimetamine all.

K: Kas jagamist kahega saab teha mis tahes arvuga?


V: Jah, jagamist kahega saab teha mis tahes arvuga, olenemata sellest, kas see on paariline või paaritu arv.

K: Miks on jagamine kahega oluline?


V: Jagamine kahega on matemaatikas oluline, sest see on põhiline aritmeetiline operatsioon, mida kasutatakse paljudes erinevates valdkondades, näiteks arvutite programmeerimisel, inseneriteaduses ja arhitektuuris.

AlegsaOnline.com - 2020 / 2025 - License CC3