Sei sulla pagina 1di 22

Sistemas Numricos y Representacin de e o Nmeros en una Computadora u

Jos Galaviz Casas e


Departamento de Matemticas a Facultad de Ciencias Universidad Nacional Autnoma de Mxico o e

Contenido

1 Sistemas numricos posicionales en bases 2, 8 y 16 e 1.1 1.2 Conversiones binario-decimal y decimal a cualquier base . . . . . . . . . . . Conversiones binario-octal, binario-hexadecimal y sus inversas . . . . . . . .

1 3 4 9 9 10 12 13 15

2 Representacin de n meros negativos o u 2.1 2.2 2.3 2.4 Signo y magnitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Complemento a 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Complemento a 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Representacin de n meros reales en punto otante o u

1
Sistemas num ricos posicionales en bases e 2, 8 y 16

A lo largo de la historia la humanidad ha utilizado muy diversos mtodos para escribir e nmeros, los romanos, egipcios y babilonios utilizaban sistemas de escritura que suelen u llamarse aditivos, en estos sistemas el valor de un nmero es la suma de los valores de cada u uno de los d gitos que lo componen, por ejemplo XXVI en romano es un 26, es decir dos veces 10 (X), ms 5 (V), ms uno (I). Un s a a mbolo V en cualquier parte de un nmero u romano siempre vale 5 unidades. A diferencia de los sistemas numricos aditivos, en los sistemas posicionales el valor de e cada d gito depende de su posicin dentro del nmero donde aparece. El sistema numrico o u e posicional ms conocido es, por supuesto, nuestro usual sistema indo-arbigo. Como nos lo a a dijeron en la enseanza elemental: n
3486.03 = 3 millares + 4 centenas + 8 decenas + 6 unidades + 3 centsimos e

2 es decir:

Sistemas numricos posicionales en bases 2, 8 y 16 e

3486.03 = 3 103 + 4 102 + 8 101 + 6 100 + 0 101 + 3 102 el primer 3 signica tres millaresmientras que el ultimo signica tres centsimos, el e s mbolo 3 tiene un valor diferente dependiendo de su posicin dentro del nmero. o u Hay que notar adems que cada posicin dentro del nmero est asociada a una potena o u a cia de 10. Algunos sistemas numricos posicionales tienen asociada una base1 . As cada e , d gito tiene un valor intr nseco (como el 3 del ejemplo anterior cuyo valor intr nseco es justamente 3) y ese valor se multiplica por una potencia de la base del sistema (10 en el ejemplo), el valor del exponente al que se eleva la base crece hacia la izquierda y decrece hacia la derecha. El valor intr nseco de los d gitos de un sistema posicional en base b est en el conjunto a {0, . . . , b 1}. En nuestro sistema indo-arbigo decimal (es decir, en base 10) los d a gitos posibles son los s mbolos 0, 1, ..., 9; cuyos valores son, respectivamente, 0 unidades, una unidad, etc. As pues, un nmero x en un sistema posicional en base b se escribe como una secuencia u de d gitos: x = xn xn1 . . . x1 x0 .x1 x2 . . . xm donde cada d gito xi posee un valor intr nseco |xi | en el conjunto {0, . . . , b 1} (i {m, . . . , n}). El valor del nmero x, denotado |x|, es: u
n

|x| =
i=m

|xi | bi

(1.0.1)

Mientras mayor sea la potencia de la base asociada a un d gito en el nmero se dice que u el d gito es ms signicativo. As el d a gito de la extrema derecha de un nmero es el menos u signicativo y el de la extrema izquierda es el ms signicativo. A partir de este momento a denotaremos que el nmero x est escrito en base b como xb y nos avocaremos a tratar con u a nmeros enteros. u En el mbito de la computacin electrnica son particularmente interesantes los sisa o o temas numricos posicionales en las bases 2 (binario), 8 (octal) y 16 (hexadecimal). Esto es e porque, como probablemente ha escuchado el lector en repetidas ocasiones, las computadoras electrnicas modernas operan en binario, en ceros y unos (los unicos dos d o gitos en un
No en todos los sistemas numricos posicionales hay una base asociada. Los mayas usaban un sistema e numrico posicional que casi ten base 20 para representar nmeros relacionados con el calendario. La e a u tercera posicin de los nmeros no se multiplicaba por 20 sino por 18. o u
1

1.1 Conversiones binario-decimal y decimal a cualquier base sistema posicional base 2). Los circuitos digitales de nuestras computadoras slo distinguen o cuando hay corriente en una l nea y cuando no la hay. Las bases 8 y 16 son interesantes porque es muy fcil traducir la expresin de un nmero entre cualesquiera de estas bases y a o u la base 2 y viceversa. Los d gitos en el sistema posicional binario, normalmente llamados bits (Binary digITS ), son 0 y 1 cuyos valores intr nsecos son, respectivamente 0 y 1. Los d gitos en el sistema octal son: 0, 1, ..., 7, y sus valores son: 0, 1, ..., 7, respectivamente. En hexadecimal los d gitos son: 0, 1, ..., 9, A, B, C, D, E, F y sus valores son: 0, 1, ..., 9, 10, 11, 12, 13, 14 y 15, respectivamente.

1.1

Conversiones binario-decimal y decimal a cualquier base

Receta: Para traducir un nmero escrito en base 2 a su expresin equivalente en base 10 u o no hay ms que obtener su valor de acuerdo a la expresin 1.0.1 a o Por ejemplo: 010102 = 0 24 + 1 23 + 0 22 + 1 21 + 0 20 = 8 + 2 = 1010 Hacer la operacin inversa es un poco ms complicado. o a Receta: Si se tiene un nmero x10 su expresin en base 2 se obtiene dividiendo x10 por 2 u o tantas veces como sea posible hasta obtener cero como cociente y colocar los residuos en el orden inverso de como fueron obtenidos. Por ejemplo, para convertir 4110 a binario se sigue el proceso mostrado en la gura 1.1. Ahora sabemos cmo hacer la conversin decimal-binario, pero no sabemos por qu se o o e hace as De hecho el procedimiento funciona para traducir la expresin decimal de un . o nmero a su expresin en cualquier base arbitraria b. Para explicar el por qu funciona el u o e mtodo recordemos el algoritmo de la divisin: e o Teorema 1 Sean m, n Z con n > 0. Existen dos enteros unicos v y r tales que: m = vn+r donde 0 r < n. A v se le llama el cociente y a r el residuo. Con esto en mente, sea R10 el nmero en decimal que se desea traducir a una base b. u Es decir, se desean obtener los d gitos di del nmero: u (dn dn1 . . . d1 d0 )b (1.1.2)

Sistemas numricos posicionales en bases 2, 8 y 16 e

20 2 41 0 1 6

10 2 20 0 0 5

5 2 10 0 4

2 2 5 1 3

1 2 2 0 2

0 2 1 1 1 orden

41 10 = 101001 2
Figura 1.1: Conversin de 4110 a binario. Ntese que los residuos se escriben en el orden o o inverso de como fueron obtenidos, el ultimo residuo es el bit ms signicativo. a tal que: R10 = dn bn + + d1 b + d0 = b(dn bn1 + + d1 ) + d0 (1.1.3)

Homologando las expresiones 1.1.2 del algoritmo de la divisin y 1.1.3, sabemos que el o residuo de dividir R10 por b es d0 (el d gito menos signicativo del nmero en base b). Si u repetimos el proceso de divisin por b, usando ahora como dividendo el cociente (dn bn1 + o + d1 ) de la expresin 1.1.3, obtendremos de residuo d1 . Iterando el proceso vamos o obteniendo los d gitos d2 , d3 , etc., en orden de menos a ms signicativo, de all que se a tenga que invertir el orden al momento de escribir el resultado de la conversin. o Si dividimos el 4110 , usado de ejemplo en la gura 1.1, por 16 obtenemos 2 de cociente y 9 de residuo, si luego tratamos de dividir el cociente (2) entre 16 nuevamente obtenemos 0 de cociente y (evidentemente) 2 de residuo, as que: 4110 = 2916

1.2

Conversiones binario-octal, binario-hexadecimal y sus inversas

Los sistemas numricos octal y hexadecimal son importantes en el mbito de la come a putacin electrnica porque, como mencionamos, es muy fcil pasar un nmero de base 2 o o a u a base 8 16. Es decir, los computologos usan las bases 8 y 16 como medios para escribir, o abreviadamente, nmeros en base 2. u

1.2 Conversiones binario-octal, binario-hexadecimal y sus inversas Octal 0 1 2 3 binario 000 001 010 011 Octal 4 5 6 7 binario 100 101 110 111

Tabla 1.1: Los d gitos octales y su valor en binario.

Receta: Para convertir la expresin binaria de un nmero a su correspondiente octal se o u agrupan, de derecha a izquierda y de tres en tres, los bits del nmero y se escribe el valor u de cada terna. En la tabla 1.1 se muestra cada d gito octal y la expresin de su valor en binario. o Por ejemplo, usando el mismo nmero de la gura 1.1: u 101 0012 = 518 los tres bits menos signicativos son 0012 esto es un 1 20 = 1, el d gito octal menos 4 + 20 = 5, el d signicativo y los siguientes tres son 1012 lo que equivale a 2 gito octal ms a signicativo. Si el nmero de bits en la expresin binaria no es exactamente mltiplo de tres u o u entonces no se alcanza a formar la terna ms signicativa, para arreglar esto simplemente a se agregan tantos ceros a la izquierda como sean necesarios. Por ejemplo: 10 111 0112 = 010 111 0112 = 2738 Para convertir la expresin binaria de un nmero a su equivalente en hexadecimal hay o u que hacer algo similar, slo que ahora se deben agrupar de cuatro en cuatro los bits. o Receta: Para convertir la expresin binaria de un nmero a su correspondiente hexadecimal o u se agrupan, de derecha a izquierda y de cuatro en cuatro, los bits del nmero y se escribe u el valor de cada cuarteta. En la tabla 1.2 se muestra cada d gito octal y la expresin de su valor en binario. o Regresando a nuestro ejemplo: 10 10012 = 0010 10012 = 2916 Nuevamente sabemos cmo hacer estas conversiones pero an no sabemos por qu. o u e Analicemos con cuidado qu hacemos para pasar de base 2 a 8. e

Sistemas numricos posicionales en bases 2, 8 y 16 e Hexadecimal 0 1 2 3 4 5 6 7 binario 0000 0001 0010 0011 0100 0101 0110 0111 Hexadecimal 8 9 A B C D E F binario 1000 1001 1010 1011 1100 1101 1110 1111

Tabla 1.2: Los d gitos hexadecimales y su valor en binario.

Sea (an an1 . . . a2 a1 a0 )2 un nmero escrito en binario, su valor est dado por: u a an 2n + + a3 23 + a2 22 + a1 2 + a0 = 8(an 2n3 + + a3 ) + a2 22 + a1 2 + a0 (1.2.4)

Por otra parte necesitamos encontrar los d gitos octales bk , bk1 , ..., b1 , b0 , que constituyen la expresin octal del nmero. Usando esta expresin el valor es: o u o bk 8k + + b1 8 + b0 = 8(bk 8k1 + + b1 ) + b0 As que 1.2.4 y 1.2.5 deben coincidir: 8(an 2n + + a3 ) + a2 22 + a1 2 + a0 = 8(bk 8k1 + + b1 ) + b0 (1.2.6) (1.2.5)

Por el algoritmo de la divisin sabemos que son unicos el cociente y el residuo que o resultan de dividir por 8 el valor del nmero, as que de la expresin 1.2.6 tenemos: u o an 2n + + a3 = bk 8k1 + + b1 y lo que es ms importante: a b0 = a2 22 + a1 2 + a0 (1.2.7)

es decir, el valor del d gito octal menos signicativo es justamente el de los tres bits menos signicativos de la expresin binaria. Si repetimos el proceso dividiendo por 8 los cocientes o

1.2 Conversiones binario-octal, binario-hexadecimal y sus inversas obtendremos que el valor de cada d gito octal es el de la terna que le corresponde en la expresin binaria. o Anlogamente podr a amos justicar nuestra receta para pasar de base 2 a hexadecimal. Para traducir expresiones octales o hexadecimales a su equivalente en binario se aplica el mismo principio pero a la inversa. Para pasar de octal a binario simplemente se reemplaza cada d gito octal por la terna de bits equivalente, se deben usar estrictamente tres bits, sin importar que el valor pueda ser escrito en menos. Para pasar de hexadecimal a binario se reemplaza cada d gito hexadecimal por la cuarteta de bits, estricta, del mismo valor.

Receta: Para convertir la expresin octal de un nmero a su correspondiente binaria se o u reemplaza cada d gito octal por la terna de bits que representa su valor en binario. Para convertir una expresin hexadecimal a binario se reemplaza cada d o gito hexadecimal por la cuarteta binaria que representa su valor. Por ejemplo: 2178 = 010 001 1112 F 3016 = 1111 0011 00002

2
Representaci n de n meros negativos o u

2.1

Signo y magnitud

Normalmente utilizamos el s mbolo - precediendo a un nmero para indicar que ste u e es menor que cero. Esta es una notacin muy prctica en la vida cotidiana pero no puede ser o a utilizada en la representacin que se hace de los nmeros en una computadora, recordemos o u que slo se pueden utilizar los d o gitos binarios para representar cualquier cosa en ellas y el - no es ningn bit. u Pero podemos utilizar la misma idea, preceder el nmero de un bit que indique su signo, u despus de todo slo hay dos posibles signos, a saber: +y -. Todo lo que tenemos que e o hacer es asignar arbitrariamente un bit a cada signo. Convencionalmente se hace: + = 0, - = 1. A este mtodo de representacin de nmeros negativos se le denomina signo y magnitud e o u porque, anlogamente a lo que solemos hacer, se coloca un s a mbolo que precede al nmero y u

10

Representacin de n meros negativos o u

que indica su signo y luego se pone la magnitud del nmero. En esta notacin por ejemplo: u o 1 010102 = 1010 De esta manera es muy fcil distinguir los nmeros positivos de los negativos, si utia u lizamos un nmero jo de bits para representarlos y decidimos que siempre el primer bit es u para el signo del nmero, entonces basta con observar el primer bit de la izquierda (al que en u este caso no podemos decirle formalmente el ms signicativo, dado que no tiene asociada a ninguna potencia de 2) para determinar si se trata de un nmero negativo o positivo. u En este caso la multiplicacin por -1 de un nmero equivale a negar o invertir el bit o u de la extrema izquierda, esto es, convertirlo en cero si vale 1 y viceversa. De hecho la idea fundamental detrs de la representacin de signo y magnitud es que ocurra: (a) = a. a o Lo que nos parece evidente por estar acostumbrados a nuestra representacin de nmeros o u negativos convencional. Un inconveniente del sistema de signo y magnitud es que existen dos representaciones distintas para el cero, es decir, el neutro aditivo no es unico formalmente hablando, tanto el 10 . . . 0 como el 00 . . . 0 son cero, el primero con signo -y el segundo con signo +, lo que tampoco es correcto desde el punto de vista matemtico, dado que el cero no es ni positivo a ni negativo. Esta dualidad del cero tiene implicaciones importantes en una computadora digital. Los procesadores tienen generalmente instrucciones para cambiar al ujo de los programas llamadas saltos, hay saltos incondicionales (siempre que el procesador ejecuta la instruccin o de salto la siguiente instruccin es aquella indicada por el salto) y hay saltos condicionales o (la instruccin siguiente es a veces la que est bajo la del salto y a veces la indicada por el o a salto dependiendo de alguna condicin). Y generalmente la condicin de salto es establecida o o comparando algn dato con cero. Si hay dos representaciones del cero hay que hacer dos u comparaciones y eso lleva ms tiempo que hacer slo una. a o

2.2

Complemento a 1

Otra manera de representar nmeros negativos es la conocida como complemento a 1. u Para hablar de ella primero trataremos con una generalizacin. o Denicin 1 El complemento a b 1 de un nmero r, representado en k d o u gitos en base b se dene como: Cb1 (rb ) = (b 1k . . . b 11 ) rb

2.2 Complemento a 1 donde b 1 es el valor mximo de un d a gito en base b. Por ejemplo el complemento a 9 de el nmero 1357910 es: u C9 (1357910 ) = 99999 13579 = 8642010

11

ntese que el minuendo que se ha usado tiene tantos nueves como d o gitos tiene el nmero u 13579. En el caso de nuestro sistema binario hablaremos del complemento a 1 del nmero n en u k bits como el resultado de restar n al nmero constituido por k unos. Por ejemplo: u C1 (011012 ) = 11111 01101 = 100102 ntese que cada bit del resultado es el negado del nmero original. De hecho esta es la o u receta prctica para obtener el complemento a 1 de cualquier nmero binario rpidamente. a u a Receta: El complemento a uno de un nmero binario n2 se obtiene invirtiendo cada bit de u n2 . Por ejemplo: C1 (100101101112 ) = 011010010002 Una alternativa de representacin de nmeros negativos en la computadora es utilizando o u el complemento a 1, es decir, el negativo de un nmero es su complemento a 1. Por ejemplo: u 1010 = 010102 1010 = 101012 Al igual que en el caso de signo y magnitud se adopta la convencin de que todos los o nmeros cuyo bit del extremo izquierdo sea cero son positivos y por ende, todos aquellos u cuyo bit del extremo izquierdo es 1 son negativos. Nuevamente, como en signo y magnitud, la idea es que (a) = a. Tambin tenemos el e problema de que hay dos distintas representaciones para el cero: 0 . . . 0 y 1 . . . 1. El primero es un cero con signo +y el segundo un cero con signo -. Tambin hay que notar que tenemos tantos nmeros positivos como negativos, tanto en e u signo y magnitud como en complemento a 1. Supongamos que se utilizan k bits para representar nuestros nmeros enteros en una computadora. Cuntos nmeros representables u a u tenemos? bueno, si tengo k lugares en los que puedo poner 0 1 y cada vez que elijo el lugar o i tengo esas dos posibilidades para el lugar i + 1 entonces tengo en total 2k combinaciones,

12

Representacin de n meros negativos o u

es decir, nmeros representables, ahora bien, cuntos de estos 2k nmeros son negativos u a u (o mejor dicho tienen signo -)? tanto en complemento a 1 como en signo y magnitud los que tienen signo - son aquellos que empiezan con 1 que son justamente la mitad de todos nuestros nmeros, es decir 2k1 , lo mismo ocurre con los que tienen signo +, tambin son u e 2k1 .

2.3

Complemento a 2

Ya mencionamos el inconveniente que haya dos representaciones diferentes del cero en el contexto de nuestras computadoras digitales. Para evitar esto (que sin embargo se puede sobrellevar), se invent otro mecanismo para representar nmeros negativos, se denomina o u complemento a 2, eso nos lleva a considerar, en general, el complemento a la base. Denicin 2 El complemento a b de un nmero r, representado en k d o u gitos en base b se dene como: Cb (rb ) = (1 0k . . . 01 ) rb ntese que el nmero que se utiliza ahora como minuendo tiene un d o u gito ms que los usados a en la representacin, es decir tiene k + 1 d o gitos, un 1 seguido de k ceros a la derecha. Por ejemplo, el complemento a 10 de 1357910 es: C10 (1357910 ) = 100000 13579 = 8642110 el resultado es, evidentemente, el mismo que se obtuvo en el complemento a 9 incrementado en uno, es decir: Cb (xb ) = Cb1 (xb ) + 1. En el caso particular de base 2, el complemento a 2 de un nmero x2 es el resultado de u sumar 1 al complemento a 1 de x2 que, como vimos, no es otro que el nmero negado bit a u bit. Por ejemplo1 : C2 (011012 ) = 10010 + 00001 = 100112 Tambin existe una receta rpida para obtener el complemento a 2 de un nmero binario. e a u Receta: El complemento a 2 del nmero x2 se obtiene copiando, de derecha a izquierda, u todos los bits de x2 hasta encontrar el primer 1 inclusive e invertir todos los bits restantes hacia la izquierda.
En este ejemplo no ocurre, pero pudiera ser que al sumar dos d gitos binarios ambos fueran 1, el resultado en este caso ser 210 = 102 , por lo que se colocar a la manera de una suma convencional en base 10, el a a, d gito menos signicativo y el otro se lleva como acarreo.
1

2.4 Exceso Por ejemplo: C2 (00110011 1002 ) = 11001100 1002

13

Entonces es posible representar el negativo de un nmero binario como su complemento u a 2. La idea detrs de esta representacin es que: a + (a) = 0. Un nmero ms su a o u a negativo, que es de hecho su inverso aditivo, nos da cero, un unico cero. A diferencia de signo y magnitud y de complemento a 1, en la representacin en complemento a 2 de o nmeros negativos tenemos una sola representacin de cero, a saber: 0 . . . 0. Esta vez el u o negativo, es decir el complemento a 2, de 0 . . . 0 es justamente 0 . . . 0. Adems conservamos la ventajosa propiedad exhibida por signo y magnitud y complea mento a 1 de poder determinar fcilmente si un nmero es negativo o positivo observando a u el bit del extremo izquierdo. Sin embargo no todo es perfecto, tenemos una desventaja. Concluimos que hay una sola representacin de cero en complemento a 2 en k bits, eso est bien, ahora cuntos o a a nmeros negativos se pueden representar? todos los nmeros de k bits que empiezan con u u 1, es decir 2k1 , cuantos nmeros positivos se pueden representar? pues tambin hay 2k1 u e que empiezan con cero, pero uno de ellos es el cero (0 . . . 0), hay entonces exactamente 2k1 1 nmeros positivos. Aj! hay un nmero negativo, el ms grande en magnitud, u a u a k posibles n meros. Por ejemplo, 10 . . . 0, que no tiene su inverso aditivo en el conjunto de 2 u en cuatro bits: C2 (01002 ) = 11002 donde: 01002 = 410 y 11002 = 410 , porque 0100 + 1100 = 00002 . En cambio: C2 (10002 ) = 100002 lo que es un error. Por ejemplo, en una computadora que utilice, como es comn, 16 bits para represenu 2 , el n mero ms grande positivo representable es 32767 y el ms tar ciertos enteros con signo u a a grande negativo es -32768 que no posee su inverso aditivo en el conjunto {32768, . . . , 32767}.

2.4

Exceso

Otro mecanismo para representar nmeros negativos es el conocido como exceso a x. u Si el nmero de bits usados para representar enteros es k entonces generalmente x = 2k1 u o x = 2k1 1. Por ejemplo, si se utilizan 8 bits para representar enteros entonces el
2

Como el tipo short de Java

14

Representacin de n meros negativos o u

sistema utilizado podr ser exceso a 128 o bien exceso a 127. La idea del sistema es a que, para representar el nmero n en k bits se le suma a n, el valor del exceso (esto es u 2k1 o 2k1 1), obtenindose n + e entonces n se escribe como n + e en binario (ya e sin consideraciones de signo por supuesto). Por ejemplo, para escribir en 8 bits el nmero u 10010 en exceso a 281 = 27 = 128 hacemos: 100 + 128 = 2810 , esto en binario se escribe: 000111002 (16+8+4), por lo que, en exceso a 128 en 8 bits 10010 = 000111002 . En cambio, usando las mismas condiciones (8 bits, exceso a 128): 100 + 128 = 22810 = 111001002 , es decir: 10010 = 111001002 . Nuevamente hay un solo cero (en exceso a 128 en 8 bits ser a 100000002 ), lo que signica, dado que la cantidad de nmeros representables en k bits es u par, que hay un negativo o un positivo de ms, en nuestro ejemplo es el 128 (porque a su inverso aditivo ser 128 y 128 + 128 = 256, que no se puede escribir en 8 bits), el a unico cero es 100000002 y el rango de representatividad es: {128, . . . , 127}, cabe sealar n que los nmeros en exceso a 2k1 y en complemento a 2 se escriben igual salvo el bit ms u a signicativo. Para saber entonces que nmero est siendo representado por una cadena de bits debeu a mos saber el valor del exceso. Si nos topamos con un 011011012 y se nos dice que est a representando a un nmero en exceso a 128 entonces sabemos que al valor del nmero s u u n consideraciones de signo (10910 ) se le debe restar un 128 para determinar su verdadero valor, es decir nuestra cadena 011011012 est representando al nmero 10910 12810 = 1910 . a u En exceso a 2k1 1 se hace lo mismo, slo que el nmero a sumar es, por supuesto o u n = 2k1 1. Si se utilizan 8 bits en la representacin, el sistema ser exceso a 127, o a este caso particular nos resultar util cuando consideremos la representacin de nmeros en a o u punto otante. En exceso a 127 en ocho bits un nmero n es representado como la cadena de bits que le u corresponder al nmero n+127 en binario. Por ejemplo nuestro 1910 anterior se escribir a u a como 19 + 127 = 10810 = 011011002 , el cero ser 011111112 el 12710 = 000000002 el a 12710 = 111111102 y el 12810 = 111111112 , este ultimo es el que no posee su inverso (128) en el rango de representatividad del sistema que resulta ser {127, . . . , 128}. Ntese que el o nmero negativo ms grande es representado como una cadena de ceros. u a

3
Representaci n de n meros reales en punto o u otante

Frecuentemente utilizamos en nuestros programas nmeros reales. Lo decimos as u , entre comillas, porque sabemos que el conjunto de nmeros reales es innito y de hecho u con la potencia del continuo y nuestras computadoras slo pueden manejar nmeros nitos. o u Es decir nuestras computadoras slo pueden manejar un subconjunto nito de los nmeros o u naturales, mientras que los reales, adems de ser un conjunto innito, son no numerables. a As que realmente necesitamos trucos para aparentar que manipulamos nmeros reales, aun u cuando realmente slo podemos manejar un conjunto bastante pequeo de ellos. o n Una posibilidad es jar, dada la longitud de nuestra representacin n, un cierto nmero o u de bits f para expresar la parte fraccionaria de un nmero y el resto nf para representar la u parte entera. A este esquema se le denomina representacin de punto jo. Es un esquema o vlido y util en ciertos contextos, hace que las operaciones sean rpidas y precisas en a a cierto rango. Pero es muy poco general, hay que cambiar f para representar subconjuntos

16 diferentes de nmeros. u

Representacin de n meros reales en punto otante o u

Por ello se invent el sistema de representacin de punto otante, anlogo a lo que o o a conocemos como notacin cient o ca, donde un nmero se escribe de la forma a bk u donde b es la base, a es llamada la mantisa y k es el exponente. Por razones obvias en la representacin en punto otante en la computadora b es 2. o Al principio cada fabricante de computadoras que adoptaba el sistema de representacin o de punto otante decid su propio formato, es decir, el orden y tamao que ten la mantisa, a n a su signo y el exponente. Luego el IEEE estableci un estndar que utilizan todas las o a computadoras y compiladores de hoy en d a. Hay formatos de IEEE para representar nmeros en punto otante con diferentes preu cisiones: simple, doble, cudruple. Revisaremos el formato de precisin simple. a o En el formato de precisin simple de IEEE los nmeros reales se representan en 4 bytes o u (32 bits). El primer bit, el ms signicativo de los 32, es el signo de la mantisa en el a esquema de signo y magnitud, es decir 1 signica negativo, 0 signica no negativo. Los siguientes 8 bits sirven para decir la magnitud de la mantisa normalizada. Que la mantisa est normalizada signica esencialmente lo siguiente: supongamos que e tenemos el nmero 0.004 103 este es equivalente a 0.04 102 y a 0.4 10 y tambin a u e 4 100 . Hay muchas maneras de representar un nmero en notacin cient u o ca. Para que la representacin sea unica jamos una restriccin. Hacemos que el nmero que queramos o o u representar tenga su primer d gito ms signicativo distinto de cero inmediatamente a la a izquierda del punto. Esto es normalizar la mantisa. En nuestro ejemplo 4 100 es la representacin en mantisa normalizada de 0.004 103 y de los dems equivalentes. o a Si normalizamos la mantisa de un nmero binario, lo que estamos haciendo es forzar a u que el primer bit ms signicativo de la mantisa distinto de cero (slo puede ser 1 entonces) a o quede a la izquierda inmediatamente antes del punto. Como ya sabemos que este d gito slo o puede ser 1, lo omitimos. As por ejemplo la parte de la mantisa de 1.0 2k que realmente aparece en la representacin de mantisa normalizada del formato de IEEE de punto otante, o es cero, porque el uno a la izquierda del punto no se pone, ya sabemos que esta all . El exponente se representa en exceso a 127 usando los 8 bits siguientes despus del e primero, que, como hemos dicho, sirve para escribir el signo de la mantisa. Los restantes 23 bits son para escribir el valor de la mantisa normalizada. En este esquema por ejemplo: 3F 80000016 es el nmero representado por: u signo de la mantisa: El primer bit del 3 inicial, 316 = 00112 as que el signo de la mantisa es 0, la mantisa es no negativa.

17 valor del exponente: los tres ultimos bits del 3 y los siguientes seis bits, los cuatro de la F y el primero del 8. Es decir todos 1s salvo el primero, por lo que el valor que aparece es: 011111112 = 12710 como el exponente est en exceso a 127 hay que restarle a su a valor nominal el valor del exceso para obtener su valor real, 127 127 = 0. As que el exponente es cero. valor de la mantisa: la mantisa es puros ceros, as que su valor real es 12 = 110 considerando todo lo anterior el valor del nmero es: 1.0 20 que es 1.0. u Anlogamente el 2.0 se escribe 4000000016 porque el primer bit es 0 (signo de mantisa), a los siguientes 8 bits forman el nmero 128 y 128 127 = 1 y la magnitud de la mantisa u normalizada sin el bit ms signicativo es cero por lo que su valor real es 1. As que a 4000000016 = 1.0 21 = 2.010 en el formato de IEEE. Hay un pequeo problema y es que no es posible representar realmente el cero. Dado n que siempre suponemos que la mantisa est normalizada y que hay un uno a la izquierda a del punto que no se escribe, el cero no se puede representar. As que IEEE establece convenciones para poder hacerlo y, de hecho, ja valores especiales: El cero se representa como puros ceros. El valor real de este nmero ser 1.0 2127 u a que es pequeo, pero no cero. Sin embargo si un procesador o un compilador se apega n al estndar debe hacer la consideracin especial de que la cadena de ceros es el cero. a o Si un nmero tiene como exponente puros unos y de parte fraccionaria de la mantisa u (lo que se escribe de la mantisa) puros ceros representa + o dependiendo del signo del exponente. Si un nmero tiene puros unos en el exponente y la parte fraccionaria de la mantisa u algo distinto de puros ceros entonces se dice que No es un Nmero lo que se denota u como NaN. Si un nmero tiene como exponente puros ceros y de parte fraccionaria de mantisa u algo distinto de puros ceros entonces se dice que es un nmero no-normalizado (deu normalized ) y entonces no se asume la regla de que hay un 1 precediendo la parte fraccionaria de la mantisa que est expl a cita en el nmero. Con esta convencin el u o cero puede considerarse como un caso especial de nmero no-normalizado. u Entonces para representar el innito se usa (7F 80000016 ) el cero es puros ceros. el positivo ms pequeo es: 0000000116 (ntese que es no-normalizado) que es (223 )2127 a n o 1 1.401298 1045 y el ms grande 7F 7F F F F F16 que ser (1 + 1 + 1 + + 223 ) 2127 a a 2 4 3.402823 1038 .

18

Representacin de n meros reales en punto otante o u

El formato de IEEE de precisin doble usa 64 bits para representar un nmero: uno o u para el signo de la mantisa, 11 para el exponente que se representa en exceso a 1023 y los restantes 52 bits para la mantisa normalizada omitiendo el uno ms signicativo a la a izquierda del punto. Se establecen convenciones similares a las de IEEE de precisin simple o para representar nmeros especiales, el innito y los no-normalizados. u El formato de precisin simple corresponde al tipo float de C y el de precisin doble o o al tipo double, evidentemente. Hay una explicacin detallada del formato de IEEE en la o pgina de Steve Hollasch1 a

http://research.microsoft.com/~ hollasch/cgindex/coding/ieeefloat.html

Potrebbero piacerti anche