División entre dos

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

En el ámbito de las matemáticas, la división entre dos o partición por la mitad, a veces ha sido tratada como una operación matemática diferente de la multiplicación y la división por otros números.[1] Por ejemplo entre los antiguos egipcios su algoritmo de multiplicación utilizaba la división por dos como uno de sus pasos fundamentales.[2] Algunos matemáticos en el siglo XVI, por ejemplo, continuaban considerando a la división por dos como una operación matemática distintiva,[3] [4] y la programación de computadoras modernas a menudo aún la trata en forma separada.[5] Es muy fácil realizar esta operación tanto en el sistema aritmético decimal, como en el sistema numérico binario utilizado en la programación de computadoras, y otras bases de numeración pares.

Binaria[editar]

En la aritmética binaria, la división entre dos puede efectuarse por medio de una operación conocida como desplazamiento de bits (en inglés bit shift), la cual desplaza el número un lugar a la derecha. Esto es una forma de optimización conocida como "strength reduction" (reducción de fuerza). Por ejemplo, 1101001 en binario (el número decimal 105), desplazado un lugar a la derecha es 110100 (el número decimal 52): el bit de orden menor, el 1, es removido. Similarmente, la división por cualquier potencia de dos 2k puede efectuarse desplazando a la derecha k posiciones. Como los "bit shifts" son a menudo operaciones mucho más rápidas que la división, reemplazar una división por un desplazo en esta forma puede ser un paso útil en la optimización de programas.[5] Sin embargo, para mantener la portabilidad del programa y su legibilidad, a menudo es mejor escribir programas utilizando la operación de división y confiar que el compilador llevará a cabo este reemplazo.[6]

Sin embargo, no siempre son verdaderas las afirmaciones antedichas, cuando se trata de dividir números binarios con signo. Desplazar a la derecha 1 bit divide por dos, siempre redondeando hacia abajo. Sin embargo, en algunos lenguajes, la división de números binarios con signo se redondea hacia el cero (que si el resultado es negativo, significa que redondea para arriba). Por ejemplo, Java es uno de estos lenguajes: en Java, -3 / 2 da por resultado -1, mientras que -3 >> 1 da por resultado -2. Por lo que en este caso, el compilador no puede optimizar la división por dos reemplazándola por un desplazamiento de bit, cuando es posible que el dividendo pueda ser negativo.

Decimal[editar]

El siguiente algoritmo es para un número expresado en base decimal. Sin embargo el mismo puede ser usado como un modelo para construir un algoritmo para calcular la mitad de todo número N en cualquier base par.

  • Escriba N, colocando un cero a su izquierda.
  • Recorra los dígitos de N en pares solapados, escribiendo los dígitos del resultado de la siguiente tabla.


Si el primer dígito es Par Par Par Par Par Impar Impar Impar Impar Impar
Y el segundo dígito es 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
Escriba 0 1 2 3 4 5 6 7 8 9


Ejemplo: 1738/2=?

escriba 01738. Ahora buscaremos el resultado.

  • 01: dígito par seguido de 1, escriba 0.
  • 17: dígito impar seguido de 7, escriba 8.
  • 73: dígito impar seguido de 3, escriba 6.
  • 38: dígito impar seguido de 8, escriba 9.

Resultado: 0869.

En el ejemplo se observa que 0 es par.

Si el último dígito de N es impar sume 0.5 al resultado.

Véase también[editar]

Referencias[editar]

  1. Steele, Robert (1922), The Earliest arithmetics in English, Early English Text Society 118, Oxford University Press, p. 82 .
  2. Chabert, Jean-Luc; Barbin, Évelyne (1999), A history of algorithms: from the pebble to the microchip, Springer-Verlag, p. 16, ISBN 9783540633693 .
  3. Jackson, Lambert Lincoln (1906), The educational significance of sixteenth century arithmetic from the point of view of the present time, Contributions to education 8, Columbia University, p. 76 .
  4. Waters, E. G. R. (1929), «A Fifteenth Century French Algorism from Liége», Isis 12 (2): 194–236 .
  5. a b Wadleigh, Kevin R.; Crawford, Isom L. (2000), Software optimization for high-performance computing, Prentice Hall, p. 92, ISBN 9780130170088 .
  6. Hook, Brian (2005), Write portable code: an introduction to developing software for multiple platforms, No Starch Press, p. 133, ISBN 9781593270568 .