Dělení dvěma - Division by two
v matematika, dělení dva nebo poloviční byl také povolán zprostředkování nebo dimidiace.[1] Zacházení s touto operací jako s odlišnou operací od násobení a dělení jinými čísly sahá až do starověkých Egypťanů, jejichž multiplikační algoritmus použil dělení dvěma jako jeden ze svých základních kroků.[2]Někteří matematici až v šestnáctém století považovali polovinu za samostatnou operaci,[3][4] a v moderní verzi se s ním často zachází odděleně programování.[5]Provedení této operace je jednoduché desítková aritmetika, v binární číselná soustava používá se v počítačovém programování a v jiných sudých číslech základny.
Binární
V binární aritmetice lze dělení dvěma provést pomocí a bitový posun operace, která posune místo číslo jedna doprava. Toto je forma snížení síly optimalizace. Například 1101001 v binárním formátu (desetinné číslo 105), posunuté o jedno místo doprava, je 110100 (desetinné číslo 52): bit nejnižšího řádu, a 1, je odstraněn. Podobně dělení libovolným síla dvou 2k lze provést posunem doprava k pozic. Protože bitové posuny jsou často mnohem rychlejší operace než dělení, může být nahrazení dělení posunem tímto způsobem užitečným krokem optimalizace programu.[5] Kvůli přenositelnost softwaru a čitelnost je často nejlepší psát programy pomocí operace dělení a důvěry v překladač provést tuto výměnu.[6] Příklad z Společný Lisp:
(setq číslo # b1101001) ; # b1101001 - 105 (popel číslo -1) ; # b0110100 - 105 >> 1 ⇒ 52 (popel číslo -4) ; # b0000110 - 105 >> 4 ≡ 105 / 2⁴ ⇒ 6
Výše uvedená tvrzení však nejsou vždy pravdivá, když se jedná o dělení podepsaný binární čísla. Posun doprava o 1 bit vydělí dvěma, vždy zaokrouhleno dolů. V některých jazycích se však rozdělení podepsaných binárních čísel zaokrouhluje na 0 (což, pokud je výsledek negativní, znamená, že se zaokrouhluje nahoru). Například, Jáva je jeden takový jazyk: v Javě, -3 / 2
hodnotí na -1
, zatímco -3 >> 1
hodnotí na -2
. V tomto případě tedy překladač nemůže optimalizovat dělení dvěma nahrazením bitovým posunem, kdy by dividenda mohla být záporná.
Binární plovoucí desetinná čárka
V binárním formátu aritmetika s plovoucí desetinnou čárkou, dělení dvěma lze provést zmenšením exponenta o jeden (pokud výsledek není a podnormální číslo ). Mnoho programovacích jazyků poskytuje funkce, které lze použít k rozdělení čísla s plovoucí desetinnou čárkou o mocninu dvou. Například Programovací jazyk Java poskytuje metodu java.lang.Math.scalb
pro škálování o síle dvou,[7] a Programovací jazyk C. poskytuje funkci ldexp
ze stejného důvodu.[8]
Desetinný
Následující algoritmus je desítkové. Lze jej však použít jako model ke konstrukci algoritmu pro přijímání poloviny libovolného počtu N v každém dokonce základna.
- Vypracovat N, uvedení nuly nalevo.
- Projděte číslice N v překrývajících se párech zapisování číslic výsledku z následující tabulky.
Pokud je první číslice | Dokonce | Dokonce | Dokonce | Dokonce | Dokonce | Zvláštní | Zvláštní | Zvláštní | Zvláštní | Zvláštní |
---|---|---|---|---|---|---|---|---|---|---|
A druhá číslice je | 0 nebo 1 | 2 nebo 3 | 4 nebo 5 | 6 nebo 7 | 8 nebo 9 | 0 nebo 1 | 2 nebo 3 | 4 nebo 5 | 6 nebo 7 | 8 nebo 9 |
Psát si | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Příklad: 1738/2 =?
Napište 01738. Nyní budeme pracovat na nalezení výsledku.
- 01: sudá číslice následovaná 1, zápis 0.
- 17: lichá číslice následovaná 7, zápis 8.
- 73: lichá číslice následovaná 3, zápis 6.
- 38: lichá číslice následovaná 8, zápis 9.
Výsledek: 0869.
Z příkladu je to vidět 0 je sudé.
Pokud je poslední číslice N je zvláštní číslice jedna by měla k výsledku přidat 0,5.
Viz také
- Jedna polovina
- Medián, hodnota, která rozděluje sadu datových hodnot na dvě stejné podmnožiny
- Bisection, rozdělení geometrického objektu na dvě stejné poloviny
- Dimidiace, heraldická metoda spojování dvou erbů rozdělením jejich návrhů na poloviny
Reference
- ^ Steele, Robert (1922), Nejstarší aritmetika v angličtině, Early English Text Society, 118Oxford University Press, s. 82.
- ^ Chabert, Jean-Luc; Barbin, Évelyne (1999), Historie algoritmů: od oblázků po mikročipy, Springer-Verlag, s. 16, ISBN 978-3-540-63369-3.
- ^ Jackson, Lambert Lincoln (1906), Vzdělávací význam aritmetiky šestnáctého století z pohledu současnosti, Příspěvky na vzdělávání, 8, Columbia University, str. 76.
- ^ Waters, E. G. R. (1929), „Francouzský algoritmus patnáctého století z Liége“, Isis, 12 (2): 194–236, doi:10.1086/346408, JSTOR 224785.
- ^ A b Wadleigh, Kevin R .; Crawford, Isom L. (2000), Softwarová optimalizace pro vysoce výkonné výpočty, Prentice Hall, str.92, ISBN 978-0-13-017008-8.
- ^ Hook, Brian (2005), Napište přenosný kód: úvod do vývoje softwaru pro více platforem„No Starch Press, str. 133, ISBN 978-1-59327-056-8.
- ^ "Math.scalb". Java Platform Standard Ed. 6. Citováno 2009-10-11.
- ^ Programovací jazyky - C, mezinárodní norma ISO / IEC 9899: 1999, Oddíl 7.12.6.6.