# Divisione per due

In matematica, la divisione per due o a metà è stata considerata un'operazione diversa dalla moltiplicazione o divisione per altri numeri fino dai tempi degli antichi egizi, che utilizzavano una tecnica di moltiplicazione che adottava la divisione per due come uno degli elementi fondamentali. Alcuni matematici del tardo sedicesimo secolo continuarono a considerarla come un'operazione distinta dalle altre, e spesso viene ancora trattata così nella programmazione moderna. La divisione per due è un'operazione semplice da effettuare nell'aritmetica decimale, nel sistema numerico binario usato nella programmazione informatica e in altri sistemi di numerazione basati sui numeri pari.

## Sistema numerico binario

Nel sistema numerico binario la divisione per due può essere eseguita come un'operazione che sposta il numero (bit shift) di un posto verso destra. Si tratta di un caso di ottimizzazione per riduzione di forza. Per esempio, spostando verso destra di un posto il numero binario 1101001 (che rappresenta il numero decimale 105), si ottiene 110100 (il numero decimale 52): il bit di ordine minore, 1, viene rimosso. Analogamente la divisione per ogni potenza di due 2$^k$ può essere eseguita attraverso lo spostamento verso destra di k posizioni. Poiché gli spostamenti di numero sono operazioni molto più veloci delle divisioni, la sostituzione di una divisione con una spostamento può costituire un aspetto importante dell'ottimizzazione. Nell'interesse della portabilità e della leggibilità, tuttavia, è generalmente più opportuno scrivere i programmi usando l'operazione della divisione, confidando nella capacità del compilatore di eseguire le opportune sostituzioni.
Questo, tuttavia, non è sempre vero nel caso della divisione dei numeri relativi secondo la rappresentazione binaria. In questo caso lo spostamento verso destra di 1 bit divide sempre per due con un arrotondamento per difetto. In alcuni linguaggi, comunque, la divisione di numeri relativi binari arrotonda verso lo 0 (il che significa un arrotondamento per eccesso se il risultato è negativo). in linguaggio Java, per esempio, -3 / 2 ha come risultato -1, mentre -3 >> 1 ha come risultato -2. In questi casi, dunque, il compilatore non può ottimizzare la divisione per due sostituendola con un bit shift, dal momento che il dividendo potrebbe essere negativo.

## Virgola mobile

Nell'aritmetica binaria in virgola mobile, la divisione per due può essere eseguita diminuendo il valore dell'esponente di uno - a condizione che il risultato non rientri nei numeri denormalizzati. Molti linguaggi di programmazione hanno funzioni che possono essere usate per dividere per due un numero a virgola mobile. Per esempio il Java impiega la funzione java.lang.Math.scalb, mentre il C impiega la funzione ldexp per il medesimo scopo.

## Decimali

Il seguente algoritmo vale per i numeri decimali, tuttavia può essere utilizzato come modello per la costruzione di un algoritmo che divida per due qualunque numero N con valore di base pari.
* Scrivere il numero N, facendolo precedere da uno zero alla sinistra.
* Procedere lungo le cifre che compongono N a coppie sovrapposte, scrivendo le cifre ricavate dalla tabella seguente:
| Se la prima cifra è | Pari | Pari | Pari | Pari | Pari | Dispari | Dispari | Dispari | Dispari | Dispari |
| E la seconda cifra è | 0 o 1 | 2 o 3 | 4 o 5 | 6 o 7 | 8 o 9 | 0 o 1 | 2 o 3 | 4 o 5 | 6 o 7 | 8 o 9 |
| Scrivere | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Esempio: 1738 / 2 = ?
Scrivere 01738 e calcolare il risultato:
* 01: cifra pari seguita da 1, scrivere 0.
* 17: cifra dispari seguita da 7, scrivere 8.
* 73: cifra dispari seguita da 3, scrivere 6.
* 38: cifra dispari seguita da 8, scrivere 9.
Risultato: 0869.
Dall'esempio si ricava che 0 è un numero pari.
Se l'ultima cifra di un numero N è dispari occorre aggiungere 0,5 al risultato.