representación de números decimales
TRANSCRIPT
Representación de Números Decimales95.57/75.03 ORGANIZACIÓN DEL COMPUTADOR
PEDRO IGNACIO MARTOS ([email protected])
1
Contenido❑Introducción
❑Representación Punto Fijo
❑Representación Punto Flotante
❑Operaciones en Punto Flotante
2
Introducción❑La representación de números enteros en distintos sistemas denumeración utilizando n dígitos se puede escribir en forma general como
dn-1 x bn-1 +…+ d1 x b1 + d0 x b0
Siendo dx un digito del sistema en la posición x, y b la base del sistema
❑Para una cierta cantidad de dígitos n, se pueden representar
0 a bn – 1 valores en el caso de enteros sin signo y
–bn-1 a bn-1 – 1 valores en el caso de enteros signados en la convención de complemento a la base
3
Representación “Punto Fijo” (PFijo)❑Lo anterior puede generalizarse para representar números con parte decimal de la siguiente manera
❑dn-1 x bn-1 +…+ d1 x b1 + d0 x b0 + d-1 x b-1 +…+ d-m x b-m
Siendo m la cantidad de dígitos decimales disponibles.
❑La precisión de la parte decimal es 1/bm por lo que hay asociado un error de representación o redondeo
4
Representación “Punto Fijo” (PFijo)❑A esta representación se la denomina “de punto fijo” ya que elpunto decimal ocupa un lugar fijo dentro de la cantidad de dígitosdisponibles para la representación. Hay n dígitos para la parte enteray m dígitos para la parte decimal
5
bn+m … bn+1 bn bm-1 bm-2 … b1 b0
N bits M bits
Punto fijo
PFijo – Ventajas y Desventajas❑La ventaja de esta representación es que se puede utilizar el mismohardware o las mismas rutinas de software que se utilizan para realizaroperaciones con la representación de números enteros
❑La desventaja de esta representación es la relación entre precisión y rango,dada una cierta cantidad de dígitos (representación finita) hay una relaciónde compromiso entre el mayor numero que se puede representar (dado porlos dígitos asignados a la parte entera) y la precisión de la parte decimal(dada por la cantidad de dígitos asignados a la parte decimal).
❑Para representar números negativos también se utiliza la convención decomplemento a la base
6
PFijo – Precisión ❑En el caso particular de una representación en base 2, senecesitan entre 3 y 4 dígitos binarios (3 o 4 bits) para lograruna representación con una precisión similar a un digitodecimal
0.0110 0.00000012 = 0.007812510
Cuantos mas bits se utilicen en la parte decimal, mayor serála precisión, pero habrá menos bits disponibles para la parteentera, por lo que se reduce el rango de númerosrepresentables
7
PFijo – Rango ❑El rango representable para n bits en la parte entera y m bits en la parte decimal de números signados en complemento a la base es
– 2(n-1) a 2(n-1) – 2(-m)
❑Para 4 bits de parte entera (n=4) y 4 bits de parte decimal (m=4)
8
1 0 0 0 0 0 0 0 … 0 1 1 1 1 1 1 1
-2n-1 = -23 = -8 2n-1 - 2-m = 23 - 2-4 = 7,9375
PFijo – Compromiso entre Rango y Precisión❑Ejemplo: dados 8 bits para representar un numero en punto fijo con signo en complemento a 2
❖Si usamos 4 bits para la parte entera y 4 para la parte decimal
Rango -8 .0000 a 7.9375 con precisión 1/16 = 0.0625
❖Si usamos 6 bits para la parte entera y 2 bits para la parte decimal
Rango -32.0000 a 31.75 con precisión 1/4 = 0.25
❖Si usamos 2 bits para la parte entera y 6 bits para la parte decimal
Rango -2.0000 a 1.984375 con precisión 1/64 = 0.015625
9
PFijo – Suma ❑Ejemplos de sumas
0110.0101 (6.312510) (10110 entero)
+ 0001.1000 (1.500010) (2410 entero)
0111.1101 (7.812510) (12510 entero) NZVC=0000
1011.1101 (-4.187510) (-6710 entero)
+ 1101.0111 (-2.562510) (-4110 entero)
1 1001.0100 (-6.750010) (-10810 entero) NZVC=1001
10
PFijo – Consideraciones ❑Este formato se utilizaba en DSPs (Digital Signal Procesors), queimplementaban una unidad de Punto Fijo en hardware; y en procesadoresde propósito general sin unidad de punto flotante (FPU)
❑Con la popularización de procesadores con FPU el formato comenzó acaer en desuso, pero resurgió en aplicaciones de IA porque permiterealizar cálculos con una precisión razonable a mucha mayor velocidadque utilizando una representación de punto flotante.
❑En IA se denomina Cuantización (Quantization) a la optimización quemapea un numero de 32 bits en Punto Flotante a un numero de 8 bits enPunto Fijo para aplicaciones en dispositivos con baja potencia de computo
❑En internet hay calculadoras que nos permiten ver con que precisiónestamos representando un numero en otra base dada una cierta cantidadde dígitos. Una de ellas esta en https://planetcalc.com/862/
11
Punto Flotante (PFlotante)❑Un número en punto flotante se expresa como un numero decimal multiplicado por una base elevada a un exponente
±d0.d1d2d3d4…dp-3dp-2dp-1 x be
donde el número d0.d1d2d3d4…dp-3dp-2dp-1 se denomina significand y p es la cantidad de dígitos para representarlo.
❑También puede descomponerse como una suma de potencias
±(d0+d1.b-1+d2b-2+…+dp-1.b-(p-1)) x be (0 ≤ di < b)
❑El exponente e puede tomar valores entre emax y emin.
❑Teniendo en cuenta que puede haber bp valores distintos de significands y emax- emin+1 valores de exponente, un número en punto flotante se representa con
log2(emax-emin+1) + log2(bp) + 1 bit (de signo)
12
PFlotante – Estándar IEEE 754
❑Signo: un bit; 1=Negativo, 0=positivo
❑Exponente: se utiliza un bias (desplazamiento); para z bits de exponente, el valor se calcula como:
Exponente Representación PF = (Exponente del número) + (2(z-1) – 1)
❑Mantisa: representación normalizada 1,xxxx; de manera que 1.0 < Mantisa < 2.0. De esta manera se consigue un bit adicional implícito
❑Se definen las operaciones básicas (suma y multiplicación) , el redondeo, y la representación de +infinito, -infinito entre otras cosas
13
MSB LSB MSB LSB
s e f
Signo Exponente Mantisa
PFlotante – Estándar IEEE 754Ventajas de una representación estandarizada
❑Las distintas bibliotecas de software que operan con unarepresentación en PFlotante generan los mismos resultados
❑Distintas implementaciones de hardware generan losmismos resultados
❑Los resultados de las operaciones son independientes de la implementación
14
PFlotante – Estándar IEEE 754Ejemplo:
15
PFlotante – Estándar IEEE 754
16
PFlotante – Estándar IEEE 754❑En el caso que el Exponente sean todos unos o todos ceros, la interpretación es distinta y depende del contenido del significand:
17
PFlotante – Estándar IEEE 754Características del Estándar:
❑Cuando se redondea un resultado de medio camino al número de punto flotantemás cercano, toma el que es par
❑Incluye los valores especiales NaN, +infinito y –infinito
❑Utiliza números desnormalizados para representar valores menores que 1.0 x 2Emin
❑Redondea al valor más cercano por defecto, pero tiene además otros tres modosde redondeo
18
Números denormalizados❑En muchos sistemas de punto flotante si Emin es el exponente más chico, un número menor a1.0 x 2Emin no puede ser representado. Por lo que si una operación presenta un valor así se lolleva a cero.
❑En el estándar IEEE los números menores a 1.0 x 2Emin son representados usando significandsmenores que 1 (es lo que se denomina como gradual underflow)
Ejemplo 1: se tiene el número x = 1.234 x 10Emin, con un significand de cuatro dígitos en base 10 .
❖Si se divide por 10, se redondea a 0.123 x 10Emin
❖Si se divide por 100, se redondea a 0.012 x 10Emin
❖Si se divide por 1000, se redondea a 0.001 x 10Emin
❖Si se divide por 10000, se redondea a 0.000 x 10Emin
19
Números denormalizadosEjemplo 2: se tienen dos números con un significand de cuatro dígitos en base 10
x = 1.245 x 10Emin , y = 1.232 x 10Emin,
❑La operación x – y = 0 (sistema sin denormal)
❑La operación x – y = 0.013 x 10Emin (sistema con denormals)
20
Parámetros de la representación IEEE 754
21
Representación de valores extremos
22
Operaciones en PFlotante: Multiplicación
23
❑Sean n1 y n2 dos números binarios en punto flotante:
n1 = s1 x 2e1 , n2 = s2 x 2e2
❑La multiplicación de estos dos números será:
n1 x n2 = (s1 x 2e1) x (s2 x 2e2) = (s1 x s2) x 2e1+e2
Operaciones en PFlotante: Multiplicación❑Algoritmo de Multiplicacion:
1) Multiplicar los dos significands mediante una multiplicación entera, incluyendo el bit implicito
2) Redondear el Resultado
3) Calcular el nuevo exponente y el signo
24
P A
X0 X1. X2 X3 X4 X5 X6 X7 g r s s s s s s
X1. X2 X3 X4 X5 X6 X7 g
Producto
Caso 1: X0 = 0
El bit más significativo de P es 0. Se desplaza P aizquierda un bit, introduciendo en P el bit g de A.
El bit más significativo de P es 1, Hacer s := s v r y r := g, y sumar 1 al exponente.
Multiplicación: Casos
X0. X1 X2 X3 X4 X5 X6 X7Caso 2: X0 = 1
25
Operación: A x B
Operandos: A y B (23 bits, 6 de exponente)
A = 8323071
B = 2007961
A =
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1B =
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Multiplicación: Ejemplo
26
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1A =
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1B =
Exponente A = 62 – Bias = 62 – 31 = 31
Mantisa A = 0,99998474121093
Signo A = 1
A = -1,99998474121093 x 231
Exponente B = 30 – Bias = 30 – 31 = -1
Mantisa B = 0,63905334472656
Signo B = 0
B = +1,63905334472656 x 2-1
Multiplicación: Ejemplo
27
- Cálculo del exponente:
Exponente = Exponente A + Exponente B = 31 – 1 = 30
- Cálculo del producto de las mantisas (incluyendo el 1):
El bit más significativo del resultado es igual a 1, por lo tanto se
incrementa el exponente calculado anteriormente en 1:
Exponente = Exponente + 1 = 30 + 1 = 31
33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
X 1 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1
1 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1
Multiplicación: Ejemplo
28
- Empaquetado del exponente:
Exponente = 31 + Bias = 31 + 31 = 62
- Cálculo del signo:
Signo A * Signo B = 1
- Resultado final:
5 4 3 2 1 0
1 1 1 1 1 0
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0
Multiplicación: Ejemplo
29
Operación: A + B
Operandos: A y B (32 bits, 8 de exponente)
A = 1052770304
B = 1120403456
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0A =
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B =
Suma: Ejemplo
30
Exponente A = 125 – Bias = 125 – 127 = -2
Mantisa A = 0,5
Signo A = 0
A = +1,5 x 2-2
Exponente B = 133 – Bias = 133 – 127 = 6
Mantisa B = 0,5625
Signo B = 0
B = +1,5625 x 26
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0A =
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B =
Suma: Ejemplo
31
PASO 1
Si eA < eB intercambiar los operados.
Colocar el exponente del resultado tentativamente en eA
El eA es menor al eB por lo que intercambiamos los
operandos
B = +1,5 x 2-2A = +1,5625 x 26
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0A =
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B =
Suma: Pasos
32
Si eA < eB intercambiar los operados.
Colocar el exponente del resultado tentativamente en eA
Establecemos como exponente del resultado al del operando A:
exp = 6
Suma: Pasos
PASO 2
33
Si los signos de los operandos son distintos reemplazar
el significand B por su complemente a dos.
Los signos de los operandos son iguales, por lo tanto
no se hace nada
PASO 3
Suma: Pasos
34
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Colocar el significand B (sB) en un registro de 24 bits y desplazarlo a la
derecha eA-eB posiciones (introduciendo 1’s si fue complementado en el
paso anterior).
Con los bits desplazados fuera del registro setear los flags g (bit más
significativo, r (siguiente bit) y s (restantes bits).
Se coloca el significand B (sB) en un registro de 24 bits
Suma: Pasos
PASO 4
35
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g r s s s s s s
Se desplaza el contenido del registro a derecha eA - eB posiciones (8 posiciones)
En el paso 2 no hubo complementación por lo que se rellena con 0’s
Suma: Pasos
Colocar el significand B (sB) en un registro de p bits y desplazarlo a la derecha
eA-eB posiciones (introduciendo 1’s si fue complementado en el paso anterior).
Con los bits desplazados fuera del registro setear los flags g (bit más
significativo, r (siguiente bit) y s (restantes bits).
PASO 5
36
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g r s s s s s s
Se desplaza el contenido del registro a derecha eA - eB posiciones (8 posiciones)
Suma: Pasos
Colocar el significand B (sB) en un registro de p bits y desplazarlo a la derecha
eA-eB posiciones (introduciendo 1’s si fue complementado en el paso anterior).
Con los bits desplazados fuera del registro setear los flags g (bit más
significativo, r (siguiente bit) y s (restantes bits).
PASO 6
37
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Calcular un significand preliminar S = sA + sB sumando sA al registro de 24 bits
que contiene sB.
Si los signos de los operandos A y B son diferentes, el MSB de S es 1, y no hubo
carry-out entonces S es negativo. Reemplazar S por su complemento a dos.
sA
sB
S
Los signos de los operandos son iguales por lo que el S queda como está
Suma: Pasos
PASO 7
38
Desplazar S de la siguiente manera:
- Si los signos de los operandos son iguales y hubo carry-out en el paso 4 desplazar
S una posición a derecha, colocando en la posición más significativa un 1 (el
carry-out).
- Si no se cumple cualquiera de las condiciones anteriores desplazar S a izquierda
hasta que esté normalizado. En el primer desplazamiento introducir en el bit
menos significativo el valor de g, luego introducir 0’s.
Ajustar el valor del exponente de acuerdo a los desplazamientos realizados.
El número está normalizado
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Suma: Pasos
PASO 8
39
Ajustar r y s.
- Si S fue desplazado a derecha en el paso 5:
r := LSB de S antes del desplazamiento s := or(g, r, s)
- Si no hubo desplazamiento en el paso 5:
r := g s := or(r, s)
- Si hubo un sólo desplazamiento a izquierda en el paso 5 dejar r y s como están
- Si hubo dos o más desplazamientos a izquierda en el paso 5:
r := 0 s := 0
No hubo desplazamiento en el paso 5 por lo que:
r = g = 0 y s = or(r, s) = or(0, 0) = 0
Suma: Pasos
PASO 9
40
Redondear S utilizando la tabla de modos de redondeo.
Si el redondeo provoca un carry-out, desplazar S a derecha y ajustar el exponente.
Luego de estos pasos se obtiene el significand del resultado de la operación suma.
Suma: Pasos
PASO 10
Modo de redondeo Signo del resultado ≥ 0 Signo del resultado < 0
- +1 si (r or s)
+ +1 si (r or s)
0
Más cercano +1 si (r and p0) or (r and s) +1 si (r and p0) or (r and s)
41
Calcular el signo del resultado.
Si los operandos tienen el mismo signo, éste es el signo del resultado. En caso contrario el signo del
resultado depende de cuál de los operandos es negativo, si hubo un intercambio de operandos en el paso
1, y si S fue reemplazado por su complemento a dos en el paso 4 (ver tabla de signos)
Suma: Pasos
PASO 11
Swap Compl Signo Op1 Signo Op2 Signo resultado
Sí + - -
Sí - + +
No No + - +
No No - + -
No Sí + - -
No Sí - + +
42
Calcular el signo del resultado.
Si los operandos tienen el mismo signo, éste es el signo del resultado. En caso
contrario el signo del resultado depende de cuál de los operandos es negativo, si hubo
un intercambio de operandos en el paso 1, y si S fue reemplazado por su complemento
a dos en el paso 4 (ver tabla de signos)
Ambos operando son positivos, por lo que el resultado de la operación de
suma será positivo
Suma: Pasos
PASO 12
43
Resultado Final
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 98 7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Suma: Pasos
exp = 6 + BIAS exp = 10000101
signo = +
Resultado de la suma de los significands =
110010001100000000000000
44