Deljenje z 2 (razpolovitev): definicija, zgodovina in uporaba v programiranju
V matematiki je deljenje z dva tisto, pri katerem število delimo z dva. Nekatere kulture, kot so stari Egipčani, so menile, da je to drugačna operacija kot deljenje. Tako so mislili tudi nekateri matematiki do 16. stoletja (1500-1599). Danes se deljenje z dvema posebej obravnava v sodobnem računalniškem programiranju.
Deljenje z dvema imenujemo tudi razpolovitev, posredovanje in dimidiranje.
Definicija
Razpolovitev pomeni izračunati vrednost števila, ko ga delimo z 2. Za poljubno realno število x velja:
- x / 2 je rezultat deljenja z 2 (enako kot množenje z 0,5: x * 0.5).
- Če je x celo število, je rezultat lahko celo število (če je x sod) ali neceloten decimalni številski izraz (če je x liho).
- Za celo število n se pogosto zanima tudi ostanek pri deljenju z 2, ki ga dobimo z n % 2 — ostanek je 0 za sode in 1 (ali −1 pri nekaterih definicijah) za lihe, odvisno od znaka in definicije deljenja.
Zgodovina
Razpolovitev je ena najstarejših aritmetičnih operacij. V mnogih zgodovinskih kulturah so jo obravnavali posebej zaradi praktične uporabnosti (razdeljevanje dobrin, merjenje površin, gradbeni izračuni). Stari Egipčani so imeli metode, ki so temeljile na dvojitvah in zlomkih enotskih delov (unit fractions), zato je bila razpolovitev in množice deljenj z 2 pogosto obravnavana drugače kot splošno deljenje. V renesansi in po njej so se postopoma uveljavile sodobne aritmetične zakonitosti in zapisovanje deljenja kot enakopravne operacije.
Matematične lastnosti
- Za realna ali kompleksna števila deljenje z 2 nima posebnih omejitev — gre za množenje z 1/2.
- Za cela števila so pomembne različne definicije celi del (npr. zaokroževanje navzdol, navzgor ali trunciranje proti nič): v programskih jezikih se razlikujejo implementacije in operatorji.
- Deljenje z 2 je linearna operacija: (a + b) / 2 = a / 2 + b / 2.
- Pri binarnem zapisu števil odgovarja deljenje z 2 premiku bitov v desno za eno mesto (pri celoštevilskih predstavitvah), kar omogoča učinkovite algoritme.
Uporaba v programiranju
Razpolovitev je zelo pogosto dejanje v programiranju; uporablja se v aritmetiki, algoritmih in optimizacijah. Pomembne točke:
- Bitovni premik: Pri celoštevilskih vrednostih (posebej pri nenegativnih) se deljenje z 2 pogosto izvede z desnim bitnim premikom (n >> 1). Ta operacija je hitra, saj so bitni premiki osnovna strojna operacija.
- Negativna števila in pomnilniške reprezentacije: Pri znakovanih celih številih je uporaba bitnega premika lahko odvisna od jezika in strojne implementacije — desni premik lahko ohranja znak (aritmetični premik) ali vstavi ničle (logični premik). Zato pri negativnih številih pazite na obnašanje in raje uporabite običajno deljenje, če želite določeno pravilo za zaokroževanje.
- Zaokroževanje: Različni jeziki imajo različna pravila. Na primer:
- V C in Javi je celiško deljenje z znakovnimi celoštevilskimi tipy odrezalo (truncate) proti nič (C od C99 naprej, Java od začetka).
- V Pythonu operator // izvede deljenje navzdol (floor): -3 // 2 = -2, medtem ko -3 / 2 = -1.5 in (-3) >> 1 = -2 (aritmetični premik pri Pythonovih nespremenljivih int-ih).
- Optimizacija: V starejših ali nizkonivojskih programih se pogosto uporablja množenje z 0.5 ali bitni premik namesto deljenja, ker je bila delitev počasnejša. Sodoben prevajalniki pa so pogosto dovolj pametni, da te optimizacije opravijo samodejno.
- Algoritmi: Deljenje z 2 se pogosto pojavi v binarnem iskanju (izračun sredine intervala), v podatkovnih strukturah (npr. iskanje staršev ali otrok v binarnem drevesu glede na indeks) in pri izračunu medsebojne razdalje ali srednje vrednosti dveh točk.
- Preprečevanje overflowa pri izračunu sredine: Pri izračunu srednje vrednosti dveh indeksov low in high se pogosto izognejo overflowu z zapisom:
namesto mid = (low + high) / 2, kar prepreči začasno seštevanje velikih števil.mid = low + (high - low) / 2;
Primeri kode
Primeri, kako lahko razpolovitev izvedemo v pogostih programskih jezikih:
// C (celo število) int n = 7; int half = n / 2; // rezultat 3 (trunciranje proti 0) int half_shift = n >> 1; // če je n nenegativno, tudi 3 // Java int n2 = -7; int halfJava = n2 / 2; // -3 (trunciranje proti 0) int halfShift = n2 >> 1; // -4 (aritmetični premik ohrani znak) // Python n3 = 7 half_py = n3 / 2 # 3.5 (float) half_floor = n3 // 2 # 3 (floor za cela števila) half_shift_py = n3 >> 1 # 3 (aritmetični premik za cele števila)
Priporočila in pasti
- Za jasno in prenosljivo vedenje pri deljenju z 2 uporabite eksplicitne operatorje, ki dajejo želeni tip rezultata: / za realne rezultate, // (kjer je na voljo) ali celiško deljenje za celoštevilske rezultate.
- Pri optimizacijah s premiki biti previdni z negativnimi številkami in značilnostmi jezika glede bitnih premikov.
- Če potrebujete natančen matematični rezultat v plavajoči natančnosti, raje uporabite množenje z 0.5 ali standardno deljenje — sodobni prevajalniki pogosto optimizirajo avtomatsko.
Razpolovitev je tako preprosta aritmetična operacija, a z zanimivimi zgodovinskimi, matematičnimi in računalniškimi vidiki, ki jih je vredno poznati, zlasti ko delamo z različno reprezentacijo števil in pri optimizaciji algoritmov.
Binarni
V binarnem številskem sistemu sta samo dve številki: Vsa druga števila so predstavljena s tema dvema številkama. Na primer, "ena" je 1, "dve" je 10, "tri" je 11, "štiri" je 100 itd. Ljudje večinoma uporabljajo številski sistem z desetimi števkami (številke od 0 do 9), ki se imenuje desetiški številski sistem.
Deljenje z dve v binarnem sistemu je zelo enostavno. To storimo tako, da izpustimo zadnjo številko na desni strani števila. To se imenuje "operacija bitnega premika". Če bi na primer izvedli operacijo bitnega premika pri binarnem številu 100, bi dobili 10. Ker je binarno število 100 decimalno 4, binarno število 10 pa decimalno 2, je to smiselno.
Drug primer je izvedba operacije bitnega premika na 1101. Tako bi dobili 110, vendar bi na koncu izpadla enica in ne ničla. To je smiselno tudi zato, ker je 1101 v dvojiškem sistemu 13 v desetiškem. Če 13 delimo z 2, dobimo 6, preostanek pa je 1 (ostane nam 1).
Računalniki
Računalniki za shranjevanje informacij uporabljajo binarni številski sistem. Informacije so razdeljene na majhne koščke, imenovane biti. Vsak bit je bodisi 0 bodisi 1. Zato je najhitrejši in najlažji način za deljenje v računalniku deljenje z bitnim premikom - deljenje z dvema. Zamenjava običajnega deljenja z bitnimi premiki je način optimizacije programa. (Optimizacija programa je poskus, da bi bil program hitrejši in učinkovitejši.)
V računalniškem programiranju se simbol >>
včasih uporablja za prikaz operacije premikanja bitov. V Javi lahko računalnik prosimo, da opravi nalogo 19 ÷ 2 {\displaystyle 19\div 2} , tako da zapišemo
19 >> 2
. To je enako kot zapis 19/2
. Obe različici nam bosta dali odgovor 9
. Težava nastane, ko skušamo narediti problem, kot je - 4 ÷ 2 {\displaystyle -4\div 2} . Če v Javi zapišemo
-3/2,
nam bo računalnik sporočil, da je odgovor -1
. Če pa poskušamo zapisati -3 >> 2,
bo računalnik rekel, da je odgovor -2
. To se zgodi vsakič, ko poskušamo izvesti operacijo bitnega premika z enim negativnim številom. Razlog za to je zapleten in je povezan z načinom, kako računalnik shranjuje negativna binarna števila.
Čeprav je za računalnike najhitrejše deljenje z operacijami premikanja bitov, večina računalniške kode tega ne počne na ta način. Razlog za to je, da programerji želijo, da so njihovi programi prenosljivi in berljivi. Prenosljivost pomeni, da je program mogoče zagnati na različnih vrstah računalnikov in operacijskih sistemov. Berljivo pomeni, da je izvorno kodo enostavno prebrati in razumeti. Večinoma bo prevajalnik (program, ki spremeni izvorno kodo v 0 in 1, ki jih računalnik lahko razume) samodejno spremenil delitev v bitne premike.
Vprašanja in odgovori
V: Kaj je v matematiki deljenje z dvema?
O: Deljenje z dva v matematiki je postopek delitve določenega števila na dva enaka dela.
V: Ali so stari Egipčani mislili, da je deljenje z dvema enako pravilnemu deljenju?
O: Ne, stari Egipčani so menili, da je deljenje z dvema drugačna operacija kot redno deljenje.
V: Ali so nekateri matematiki do 16. stoletja menili, da je deljenje z dvema drugačno od pravilnega deljenja?
O: Da, nekateri matematiki so do 16. stoletja verjeli, da je deljenje z dve drugačno od pravilnega deljenja.
V: Kako se deljenje z dve izvaja v sodobnem računalniškem programiranju?
O: V sodobnem računalniškem programiranju je deljenje z dve posebej obravnavano.
V: Pod katerimi drugimi imeni poznamo deljenje z dve?
O: Deljenje z dve je znano tudi pod imeni razpolovitev, posredovanje in dimidiranje.
V: Ali lahko deljenje z dve izvedemo na katerem koli številu?
O: Da, deljenje z dve lahko izvedemo na katerem koli številu, ne glede na to, ali gre za sodo ali liho število.
V: Zakaj je deljenje z dve pomembno?
O: Deljenje z dve je v matematiki pomembno, ker je osnovna aritmetična operacija, ki se uporablja na številnih različnih področjih, kot so računalniško programiranje, inženirstvo in arhitektura.