stringtranslate.com

División por dos

Una naranja en un plato blanco que ha sido dividido por la mitad.
Una naranja cortada en dos mitades.

En matemáticas , la división por dos o reducción a la mitad también se ha llamado mediación o dimidiación . [1] El tratamiento de esto como una operación diferente de la multiplicación y la división por otros números se remonta a los antiguos egipcios, cuyo algoritmo de multiplicación usaba la división por dos como uno de sus pasos fundamentales. [2] Algunos matemáticos hasta el siglo XVI continuaron viendo la reducción a la mitad como una operación separada, [3] [4] y a menudo continúa tratándose por separado en la programación informática moderna . [5] Realizar esta operación es simple en aritmética decimal , en el sistema de numeración binario utilizado en programación informática y en otras bases de números pares . Para dividir un número impar por 2 , use la solución matemática ((N-1)÷2)+0,5. Por ejemplo, si N=7, entonces ((7-1)÷2)+0,5=3,5, por lo que 7÷2=3,5.

Binario

En aritmética binaria, la división por dos se puede realizar mediante una operación de desplazamiento de bits que desplaza el número un lugar a la derecha. Esta es una forma de optimización de 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): se elimina el bit de orden más bajo, un 1. De manera similar, la división por cualquier potencia de dos 2 k se puede realizar desplazando k posiciones a la derecha. Debido a que los desplazamientos de bits suelen ser operaciones mucho más rápidas que la división, reemplazar una división por un desplazamiento de esta manera puede ser un paso útil en la optimización de programas . [5] Sin embargo, por el bien de la portabilidad y legibilidad del software, a menudo es mejor escribir programas utilizando la operación de división y confiar en el compilador para realizar este reemplazo. [6] Un ejemplo de Common Lisp :

 ( número de setq #b1101001 ) ; #b1101001 — 105 ( número de ceniza -1 ) ; #b0110100 — 105 >> 1 ⇒ 52 ( número de ceniza -4 ) ; #b0000110 — 105 >> 4 ≡ 105 / 2⁴ ⇒ 6           

Sin embargo, las afirmaciones anteriores no siempre son ciertas cuando se trata de dividir números binarios con signo . Si se desplaza 1 bit hacia la derecha, se dividirá por dos, siempre redondeando hacia abajo. Sin embargo, en algunos lenguajes, la división de números binarios con signo se redondea hacia 0 (lo que, si el resultado es negativo, significa que se redondea hacia arriba). Por ejemplo, Java es uno de esos lenguajes: en Java, -3 / 2se evalúa como -1, mientras que -3 >> 1se evalúa como -2. Por lo tanto, en este caso, el compilador no puede optimizar la división por dos reemplazándola por un desplazamiento de bit, cuando el dividendo podría ser negativo.

Punto flotante binario

En la aritmética binaria de punto flotante , la división por dos se puede realizar disminuyendo el exponente en uno (siempre que el resultado no sea un número subnormal ). Muchos lenguajes de programación proporcionan funciones que se pueden utilizar para dividir un número de punto flotante por una potencia de dos. Por ejemplo, el lenguaje de programación Java proporciona el método java.lang.Math.scalbpara escalar por una potencia de dos, [7] y el lenguaje de programación C proporciona la función ldexppara el mismo propósito. [8]

Decimal

El siguiente algoritmo es para decimales. Sin embargo, se puede utilizar como modelo para construir un algoritmo que tome la mitad de cualquier número N en cualquier base par .

Ejemplo: 1738/2=?

Escribe 01738. Ahora trabajaremos en encontrar el resultado.

Resultado: 0869.

Del ejemplo se puede ver que 0 es par .

Si el último dígito de N es impar , se debe sumar 0,5 al resultado.

Véase también

Referencias

  1. ^ Steele, Robert (1922), Las primeras aritméticas en inglés , Early English Text Society, vol. 118, Oxford University Press, pág. 82.
  2. ^ Chabert, Jean-Luc; Barbin, Évelyne (1999), Una historia de los algoritmos: del guijarro al microchip , Springer-Verlag, p. 16, ISBN 978-3-540-63369-3.
  3. ^ Jackson, Lambert Lincoln (1906), La importancia educativa de la aritmética del siglo XVI desde el punto de vista de la época actual , Contribuciones a la educación, vol. 8, Universidad de Columbia, pág. 76.
  4. ^ Waters, EGR (1929), "Un algorismo francés del siglo XV de Lieja", Isis , 12 (2): 194–236, doi :10.1086/346408, JSTOR  224785, S2CID  144157808.
  5. ^ ab Wadleigh, Kevin R.; Crawford, Isom L. (2000), Optimización de software para computación de alto rendimiento, Prentice Hall, pág. 92, ISBN 978-0-13-017008-8.
  6. ^ Hook, Brian (2005), Escribir código portable: una introducción al desarrollo de software para múltiples plataformas , No Starch Press, p. 133, ISBN 978-1-59327-056-8.
  7. ^ "Math.scalb". Java Platform Standard Ed. 6 . Consultado el 11 de octubre de 2009 .
  8. ^ Lenguajes de programación — C, Norma internacional ISO/IEC 9899:1999, Sección 7.12.6.6.