Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

El Partido Por la Mitad

–Como representar fracciones en código binario–

1 + (½) + (¼) + (1/8) + (1/16) + (1/32) +(1/64) + (1/128) + …

No importa cuantos terminos le agreguemos a esta suma. ¡Nunca va a llegar a dos enteros! Los matemáticos llaman a esto ‘convergencia’. Se dice que esta suma converge en 2 cuando la cantidad de términos es infinita. Por ahora no nos importa demasiado el estudio de las series infinitas, pero esta expresión es la base para entender como demonios hace la computadora para representar fracciones.

Recordemos un poco la importancia de las potencias de 2 en computación. Sabemos que podemos obtener cualquier valor entre 0 y 255 (un byte) unicamente con los números 1, 2, 4, 8, 16, 32, 64 y 128 sumándolos y sin repetir uno solo. Estas son potencias positivas de 2, incluyendo 2^0. Del mismo modo podemos aproximar fracciones con potencias negativas de 2. 2 a la cero mas las 7 primeras potencias negativas de 2 son:

2^(0) = 1 = 1

2^(-1) = ½ = 0.5

2^(-2) = ¼ = 0.25

2^(-3) = 1/8 = 0.125

2^(-4) = 1/16= 0.0625

2^(-5) = 1/32 = 0.03125

2^(-6) = 1/64= 0.015625

2^(-7) = 1/128= 0.0078125

Si sumamos todos estos términos obtenemos 1.9921875. Y si a eso le sumamos la fracción negativa mas pequeña obtenemos ¡2!. Del mismo modo que si tenemos 1.999 y sumamos 0.001 nos da 2. Pero para entender mejor y de paso hacer este blog un poco menos gris aquí les dejo un dibujo en Paint:


fraccion

En este dibujo queda claro como se representa un entero como una suma de potencias negativas de 2. En este caso, la n representa la cantidad de términos que usamos para representar el entero. Mientras mas términos usemos el resultado tendrá mas precisión.

Bueno, ahora que ya sabemos como se expresan las fracciones en el sistema binario solo falta explicar para que sirve esto:

Para nosotros este es el primer paso en estudiar la aritmética de punto flotante, la cual no solo se usa para calcular los centavos de la variable sueldo, sino que tiene enormes aplicaciones en campos tales como las gráficas 3D, CAD, gráficas 3D, cálculos científicos, gráficas 3D, medicina, gráficas 3D, astronomía, gráficas 3D, posicionamiento global, gráficas 3D, datos estadísticos, gráficas 3D, y cualquier otro campo en el que se necesite de la alta precisión de la notación científica como por ejemplo en las gráficas 3D.

El primer paso en esto de las fracciones binarias es lo que llaman “fixed point math” o matemáticas de punto fijo. Se maneja exactamente igual que el punto decimal que aprendimos en educación elemental. El problema es que hay que tener buena memoria porque el CPU no sabe lo que estamos haciendo. En el caso de las sumas y restas basta con alinear los registros con las instrucciones SHL y SHR. En el caso de las multiplicaciones enteras estos desplazamientos de punto fijo se suman, pero si uno es listo puede tomar en cuenta que por ejemplo, si multiplicamos 2 registros de 8 bits el resultado es de 16 bits. Es posible manipular el punto fijo no solo con SHL y SHR, sino direccionando partes independientes del registro. O para casos de números muy grandes podemos usar SHLD.

A principios de los noventas las contadas gráficas en 3D se hacían con este tipo de aritmética binaria de punto fijo. No parecía la gran cosa ¡pero era suficiente para que la PlayStation desplegara sus famosas gráficas 3D!. Pues esta consola no incluía una unidad de punto flotante. Inclusive, la antigua tecnología MMX de los procesadores Intel permitían hacer aritmética de punto fijo en forma vectorial.

Y no se fien, puede que lleguen a usar técnicas ‘fixed point’ si es que acaso llegan a programar un sistema que no tenga una unidad de punto flotante, como la mayoría de los celulares o consolas portátiles de bajo costo. Mas adelante veremos como las computadoras representan la notación científica: La aritmética de punto flotante…

abril 15, 2009 - Posted by | Uncategorized | , , ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: