Numeros

Anuncio
ELO311
Estructuras de Computadores Digitales
Números
Tomás Arredondo Vidal
Este material está basado en:
material de apoyo del texto de David Patterson, John Hennessy,
"Computer Organization & Design", (segunda y tercera edición),
Morgan Kaufmann, CA. 2005
material del curso anterior ELO311 del Prof. Leopoldo Silva
www.wikipedia.org
Números
Los primeros números conocidos
se remontan a 30000 AC.
Se han descubierto huesos y
cavernas con marcas en ellos
indicando cuentas como por
ejemplo de dias que elapsan o
de cantidades (e.g. animales).
Pintura de Caverna en
Lascaux Francia en el
Paleolitico (40000-10000AC)
En general, un número es una
secuencia de dígitos.
En sistemas posiciónales y
ponderados, la posición que
ocupa un dígito, en la secuencia,
representa las veces que está
presente la potencia de la base
numérica correspondiente.
Marcas Numéricas
NSW, Australia
(20000-3000AC)
Números
Sea b la base numérica y di un elemento perteneciente
al conjunto Db de los dígitos del sistema numérico.
Db está formado por b símbolos, con valores
consecutivos, en los que está incluido el cero.
Db = { 0, 1, …, (b-1) }, di ϵ Db
Ejemplos:
b = 2 (binario)
b = 8 (octal)
b = 10 (decimal)
b = 16 (hexadecimal)
→ D2 = { 0, 1}
→ D8 = {0, 1, 2, 3, 4, 5, 6, 7}
→ D10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
→ D16 = {0, 1, … , 9, A, B, C, D, E, F}
Números en Punto Fijo
Números en formato punto fijo tienen una cantidad fija
de cifras enteras y fraccionarias, la posición de la coma
o punto decimal siempre se ubica en el mismo lugar.
La representación externa es la secuencia de dígitos
siguiente, donde el signo es el símbolo + o –. Se emplea
una coma para separar la parte entera de la fraccionaria:
dn dn-1 dn-2 .... d2 d1 d0 , d-1 d-2 …d-(m-1) d-m
La representación interna es un numero de largo finito
de (n + 1 + m) posiciones que no incluye la coma o el ±.
Considerando la siguiente interpretación general para el
valor del número:
i =n
N = ± ∑ d i bi
i=−m
El rango de la representación aumenta si aumenta n. La
precisión del número aumenta si aumenta m.
Aritmética Modular
Consideremos algunos conceptos sobre aritmética
modular. Si el módulo es bn+1. Se tiene:
bn+1 mod bn+1 = 0
(bn+1 + b-m) mod bn+1 = b-m
En C, el operador mod tiene el símbolo % asociado.
Las reglas de asociatividad y distributividad deben ser
cuidadosamente aplicadas en una aritmética modular.
Ya que, por ejemplo, si ( a + b ) no es representable,
entonces ( a + b ) - c puede ser diferente de a + ( b – c ).
Ejemplo: a, b, c son representaciones internas de tres bits.
a = 110, b = 010, c = 001
(a + b) = 1 000 (overflow),
(b – c) = 001 (sin overflow)
Aritmética Modular
Si se tiene un sistema módulo bn+1, con m
cifras fraccionarias y (n + 1) cifras para la
parte entera
El número bn+1 no es representable.
El anterior a éste, es el mayor
representable: bn+1- b-m
Sea cero la secuencia formada por todos
los dígitos iguales a 0 (e.g. 000…000).
El número más pequeño siguiente a cero
es b-m (e.g. 000…001).
El diametralmente opuesto al cero será:
(bn+1)/2. Valor que se obtiene dividiendo
por dos el máximo.
Los valores que estas secuencias
numéricas representan dependen del
sistema (valores de m, n y b).
Ejemplos de Números
Dado: dn dn-1 dn-2 .... d2 d1 d0 , d-1 d-2 …d-(m-1) d-m
i =n
N = ± ∑ d i bi
i=−m
Para m=0, b=2 y n=2:
Con m=0 son valores enteros entre 0 y 7 (000…111)
Con m=0, b=10 y n=2:
La secuencia asociada al cero es 000, el numero
opuesto es 500.
El mayor representable es 999 y el menor es 001.
Con m=1, b=8 y n=1:
La secuencia asociada al cero es 00,0.
Su diametralmente opuesta es 32,0; la anterior es
63,875 y la siguiente es 0,125.
Aritmética Modular en Hardware
Para efectuar operaciones aritméticas, en hardware, se
emplea un sumador binario, al cual se le agregan redes
combinacionales para ampliar sus capacidades:
ya sea para realizar restas,
comparaciones,
para detectar propiedades del resultado (e.g. overflow).
Con la misma unidad aritmética, empleada para enteros,
pueden tratarse fraccionarios puros, con y sin signo.
Un sumador binario suma los operandos de entrada
(provenientes de registros o de una palabra de memoria),
ambos de largo L y genera un resultado del mismo largo.
De este modo el sumador binario opera con las reglas de la
álgebra modular.
Un Sumador Modular
La suma de dos números A y B, con resultado S, empleando
un sumador binario, puede visualizarse como una suma de
ángulos, según reloj, en el círculo.
Si debido a las dimensiones de los números A y B, el rayo
asociado a S sobrepasa los 360 grados, habrá reserva de
salida, y S será menor que el menor de los operandos.
La posición que ocupa S, es correcta, de acuerdo al álgebra
modular, ya que si un número sobrepasa al módulo, se le
resta el módulo, dejándolo menor que éste.
Números Enteros sin Signo
Se emplea m=0, no se usa un bit para el ±. Se asume
fija, la posición de la coma decimal:
Y se interpreta el valor del número, según:
i =n
N = ∑ d i bi
i =0
Números Fraccionales
Se emplea n=0. Una fracción pura, sin signo se
representa:
Y se puede interpreta como:
i =0
N = ∑ d i bi
i =− m
Una fracción pura, con signo puede representarse:
Con ds como bit de signo
Números con Signo: Complemento Base
Para representar números con signo se
suele usar el complemento base.
dn dn-1 dn-2 .... d2 d1 d0 , d-1 d-2 …d-(m-1) d-m
Los números positivos (dn < b/2) en
complemento base se calculan de forma
similar a enteros sin signo:
Los números negativos (dn >= b/2) se
calculan de acuerdo a:
El diagrama muestra los valores:
Números con Signo: Complemento base
Se define la representación interna del complemento base
de un número mediante la siguiente expresión, que se
evalúa en aritmética módulo bn+1:
Para números negativos, en forma interna (en el registro),
se escribe la secuencia representada por NCB.
dn dn-1 dn-2 .... d2 d1 d0 , d-1 d-2 …d-(m-1) d-m
Ejemplo: b=2, m=0, n=2
-1
0
1
2
-2
Para comp. base 2: x + x’ = -1,
-3
x’ + 1 = - x
Entonces…
Para negar x se invierten los bits y se agrega 1.
3
-4
Números con Signo: Comp. Base (cont)
El complemento base de un numero es simétrico respecto
del eje vertical (excepto del más negativo):
En general, el complemento base de un número puede
anotarse:
N = (b
n +1
− N ) mod(b
n +1
)
Y puede verificarse que el complemento del complemento de
un número es el mismo número (sea positivo o negativo,
exceptuando al más negativo que no tiene complemento).
La suma de las representaciones internas de un número y su
complemento base dan como resultado el módulo.
Números con Signo: Sumas y Restas
La suma de los ángulos asociados
de dos números positivos, que
excedan los 180 grados da como
resultado un número negativo.
La suma de los ángulos asociados,
de dos números negativos, que no
exceda los (360+180) grados da
como resultado un número positivo.
La resta entre dos números
corresponde a sumar el primer
operando con el complemento base
del substraendo:
A - B = A + complemento base de (B)
Números con Signo: Sumas y Restas (cont)
En el diagrama el complemento base de B1 es un número
más negativo que A, su ángulo en sentido contra reloj es
mayor que el complemento base de A; y el número positivo
B2 es menor que A, por lo que tiene menor ángulo que el
número positivo A. Entonces (A - B2) resulta positivo
Sobrepasar al módulo, implica reserva de salida del
sumador: A - B2 = A + ( bn+1 – B2) = bn+1 + (A - B2) > bn+1
Números con Signo: Sumas y Restas (cont)
Dadas las relaciones anteriores, (A – B1) es negativo.
La suma de los ángulos no sobrepasa al módulo; el resultado
es negativo y no hay reserva de salida:
A – B1 = A + (bn+1 – B1) = bn+1 + (A - B1) < bn+1
Complemento a Base 2
Para enteros, con m=0 y base = 2 se tiene complemento
a base dos:
Otra interpretación también valida:
Complemento a Base 2
Los dígitos correspondientes serian:
Para largo de palabra de 32 bits, un número con signo
se representa, en forma externa, según:
-d31*231 + d30*230 + .... +d1*21+ d0*20
Recordando que:
Ejemplo:
b=2, n=3,m=0
+5 se representa como: 0101
-5 se representa como: 1011
Dado que 23+1=10000: 1011 = 10000 - 0101
Complemento a 1
Para enteros, con base dos, se tiene la representación
complemento a uno.
Con n=2, +3 se representa según: 011
-3 se representa según: 100
Ya que: 2n+1 –1 = 111, al restar del positivo 011, resulta 100.
Se puede generalizar esta operación, y plantear que para
obtener el complemento uno de un número basta efectuar la
negación bit a bit, o cambiar los unos por ceros, y los ceros
por unos.
Notar: Nc2 = Nc1 + 1
Números Polarizados
Se emplea en el exponente de un número en punto
flotante.
Se desea tener un rango simétrico para los números.
Si nos basamos en la representación complemento
base deseamos que el número más negativo (que
tenga complemento base) sea representado por una
secuencia de puros ceros.
Para esto a la representación en complemento base se
le suma una polarización.
n +1


b
i
= ∑ d i b − 
− 1
i =0
 2

n
N polarizado
Números Polarizados (cont)
Los valores asociados a las
secuencias de dígitos, que
representan números con
signo, en enteros polarizados
en representación interna, se
ilustran en los siguientes
diagramas.
Es similar a complemento
base, pero se le suma una
polarización de (bn+1)/2 -1, lo
cual produce que el máximo
número negativo se representa
ahora como una secuencia de
puros 0s.
Números Signo Magnitud
Números de tipo signo magnitud tienen dos ceros y un
rango simétrico.
Ejemplo: m = 0, n = 3,
+3 se representa según: 011
-3 se representa según: 111
Conversión entre Base b y Base bk
Si b = 2, con k = 3 se tiene número octal, si k = 4 se tiene
hexadecimal.
Sean dos secuencias de dígitos que representan números
equivalentes en base b y base bk.
(...a3 a2 a1 a0, a-1 a-2 a-3...)b = ( ...A3 A2 A1 A0, A-1 A-2 A-3...)b^k
Si los números son equivalentes se cumple que tienen
iguales valores decimales, es decir:
Σa j b j = ΣA j b kj
Agrupando k cifras del sistema en base b, puede
expresarse la primera suma (factorizando b kj):
Σa j b j = Σ ( akj+k –1 bk-1 +.....+ a kj b0) bkj
Conversión entre Base b y Base bk (cont)
Entonces se cumple que cualquier dígito del sistema de
base b k, puede representarse según la secuencia de k
dígitos en base b:
Aj = ( a kj +k –1 .....a kj )b
Lo que resta es convertir el número en base b, a base bk.
Conversión entre Base b y Base bk (cont)
Ejemplo: Dado un número binario convertir a hexadecimal.
Número binario es: 101000102
= 1*27 + 0*26 + 1*25 + 0*24 + 0*23 + 0*22 + 1*21 +0*20
Se forman grupos de 4 cifras:
= (1*23 +0*22 + 1*21 + 0*20)24*1 + (0*23 + 0*232 +1*21 +0*20)24*0
Se representan los grupos entre paréntesis por número binarios:
= (1010)224*1 + (0010)224*0
Los números binarios se expresan en hexadecimal:
= (A16) 24*1 + (216) 24*0 = (A16)161 + (216) 160 = A216
Conversión entre Base b y Base bk (cont)
Entonces para convertir un número en base b a base bk, basta
leer en hexadecimal cada grupo de cuatro cifras binarias.
La conversión de hexadecimal a binario consiste en
reemplazar cada cifra hexadecimal por el grupo equivalente de
cuatro cifras binarias.
Esto permite leer o escribir de manera compacta una larga
secuencia binaria.
Las conversiones de binario a octal, y viceversa se realizan de
manera similar.
Números Decimales a Binarios
La representación externa al computador son cifras decimales
pero la representación interna es binaria.
Se desea desarrollar un algoritmo para efectuar la conversión
decimal a binario, pero con las operaciones en binario, para
que pueda ser desarrollado por un procesador.
Sean dos secuencias de dígitos que representan números
equivalentes en base 2 y base 10.
(...a3 a2 a1 a0, a-1 a-2 a-3...)2 = ( ...A3 A2 A1 A0, A-1 A-2 A-3...)10
Si los números son equivalentes se cumple que tienen iguales
valores decimales, es decir:
Σaj2j = ΣAj10j
Números Decimales a Binarios (cont)
Ejemplo: Convertir 98 decimal a binario.
98 = 10012*10102 + 10002 = 10110102 + 10002 = 11000102
Para cinco cifras decimales se tendrá el siguiente equivalente binario:
A[4]*(1010)4 + A[3]*(1010)3 + A[2]*(1010)2 + A[1]*(1010)1 + A[0]
La suma anterior puede escribirse del modo siguiente:
(((A[4]*(1010) + A[3])*(1010) + A[2])*(1010) + A[1])*(1010) + A[0]
El algoritmo de conversión, para N cifras decimales, puede plantearse:
for (j=N-1, num=A[j]; j>0; j--) num = num*1010 +A[j-1];
Números Decimales a Decimales ASCII
Los números decimales pueden ser una secuencia de caracteres ASCII,
donde cada número decimal se representa por un byte.
En ASCII los cuatro bits menos significativos son la representación binaria
del dígito decimal:
‘0’=0x30 = 00110000
‘1’=0x31 = 00110001 ,...,
’9’=0x39 = 00111001
Si es una cifra decimal, su equivalente ASCII está entre 0x30 y 0x39.
Si al byte que representa la cifra decimal se le resta 0x30, se obtiene la
secuencia binaria que lo representa.
Si al char que representa la cifra decimal se le resta ‘0’, el char asociado al
dígito decimal 0, se obtiene la secuencia binaria del dígito decimal.
Números en Punto Flotante
Se denominan así a las representaciones internas al
procesador que modelan a los números reales.
En forma externa, se representan como números con coma (o
punto) (3,1415926), o bien en notación científica 0.12 * 10-5.
Se dice que el número está normalizado si el dígito a la
izquierda no es cero; en el ejemplo anterior: 1.2 * 10-6 .
En el caso de computadores, se emplean números en sistema
binario con un número finito de dígitos.
Existe un compromiso entre los bits dedicados al exponente y
los que representan la mantisa (bits significativos del número).
El compromiso es entre el rango de representación y la
exactitud de la representación.
Norma IEEE 754
Estudiaremos números de punto flotante de acuerdo a la
norma IEEE 754.
En forma externa, un número flotante normalizado, se
interpreta:
(-1)S*1.M2*2Ee
La mantisa siempre comienza en 1, y M representa un
fraccionario puro sin signo.
Ee2 es el exponente.
La mantisa y el exponente se almacenan en formato binario en
la computadora.
Norma IEEE 754
Flotante de precisión simple (en C es el tipo float). En forma
interna, ocupando 32 bits, se tiene 1 bit signo, 8 bits de
exponente y 23 bits de mantissa.
Flotante de doble (en C es el tipo double). En forma interna,
ocupando 64 bits, se tiene 1 bit signo, 11 bits de exponente, 52
bits de mantissa.
Norma IEEE 754 (cont)
El exponente Ei, en forma interna, se representa como número
polarizado con signo (Ni=Ne+Pol)
Para 8 bits: -127 <= Ee <= +127 con Ei = Ee + 127
Para 11 bits: -1023 <= Ee <= +1023 con Ei = Ee + 1023
La norma IEEE 754 contempla: números normales, subnormales, representaciones para el cero y el infinito, y para
números inválidos (NaN, not a number).
Norma IEEE 754 (cont)
Números sub-normales: Con –127 = Ee y M2 !=0 Ei=0 se
tiene:
N = (-1)S*0.M2*2-126
Cero: Con –127 = Ee y M2 ==0 Ei=0 se tiene:
N = (-1) S*0.0
Números normales: Con –127 < Ee <=127 se tiene:
N = (-1)S*1.M2*2Ee
Infinito: Con Ee =-128 y M2 ==0 Ei= -1 se tiene:
N = (-1) S * ∞
Número inválido: Con Ee =-128 y M2 !=0 Ei= -1 se tiene:
N = NaN
Rango de Representación IEEE 754
Si el número a representar es menor que el menor
representable, se dice que existe underflow (vaciamiento).
La representación interna para el menor positivo es:
0x00000001
S = 0, Ei = 0, M = 000000000000000000000012
Como M es diferente de cero y Ei es cero, se tendrá un
número sub-normal, que se interpreta según:
N = (-1)S*0.M2*2-126 =
+ 0.000000000000000000000012 *2-126 = 2-126-23 =
1.401298464324817e-45
Entonces se tiene vaciamiento para |N| < (-1)S*2-149 ≈ 1,40130
10-45
Rango de Representación IEEE 754 (cont)
Si el número a representar es mayor que el mayor
representable se dice que existe overflow (rebalse).
El positivo mayor representable tiene: cero en el signo, el
mayor exponente positivo (+127), y la mayor mantisa (con
puros unos en los bits dedicados a la mantisa): 0x7f7fffff
N = (-1)0*1.M2*2127 = + 1.111111111111111111111112 *2127 =
3.4028234663852886e+38
Rebalse para |N| > (-1)S*(2- 2-23)*2127 ≈ 3,402823 1038
Para obtener las cifras decimales: 2127 = 10x , que implica:
x = 127 log 2 = 127 * 0,30103 ≈ 38.
Nótese que no pueden representarse números muy pequeños,
ni números muy grandes.
Rango de Representación IEEE 754 (cont)
La representación interna de +0.0, por convenio es
una secuencia de puros ceros.
En doble precisión, con 11 bits, en decimal el
exponente mayor es aproximadamente 308; el menor
–308.
Constantes y definiciones en C
Se incluyen algunas definiciones de constantes relacionadas
con números en punto flotante que se encuentran en el
archivo float.h de la biblioteca de C.
#define FLT_RADIX 2
#define FLT_ROUNDS 1
#define FLT_GUARD 1
#define FLT_NORMALIZE 1
#define DBL_DIG 15 /*dígitos decimales de un double */
#define FLT_DIG 6 /*dígitos decimales de un float */
#define DBL_MANT_DIG 53 /* bits de la mantisa de un double */
#define FLT_MANT_DIG 24 /* bits de la mantisa de un double */
...etc...
Descargar