Aritmtica en computadora Objetivos Cmo ejecuta el hardware
Aritmética en computadora
Objetivos �Cómo ejecuta el hardware las operaciones básicas (suma, resta, división y multiplicación). �Operaciones con números enteros. �Operaciones con números reales. Universidad de Sonora 2
Suma �Sumar 7 más 6: �Hay que tomar en cuenta los acarreos: Universidad de Sonora 3
Resta �Restar 7 – 6. �Se puede hacer directo: �O se puede usar una suma, recordando que 7 – 6 = 7 + (-6): �En conclusión, la resta se puede hacer con una suma. Universidad de Sonora 4
Pero… �Por cuestiones de eficiencia las sumas no se hacen bit a bit (sumador de ripple carry). �Si dos bits se pueden sumar en un ciclo de reloj, dos números de n bits necesitan al menos 2 n ciclos (un ciclo para la suma y otro para pasar el carry al siguiente paso). �Hay algoritmos para hacer sumas rápidas. �El más común se llama sumador de carry-lookahead (carry adelantado). Universidad de Sonora 5
Comparación �Un sumador de 16 bits de ripple-carry necesita 32 ciclos. �Un sumador de 16 bits de carry-lookahead necesita 5 ciclos. Universidad de Sonora 6
Full adder de carry adelantado �Entrada: dos número de n bits y un carry inicial de 1 bit. �Salida: una suma de n bits, un carry final de 1 bit y un indicador de overflow de 1 bit. Fuente: COD 5, p. B-27 Universidad de Sonora 7
Multiplicación �Algoritmo clásico o multiplicación larga �Algoritmo del campesino �Algoritmo de quarter square (cuartos al cuadrado) �Algoritmo de Karatsuba Universidad de Sonora 8
Multiplicación �Multiplicación larga Universidad de Sonora 9
Algoritmo Universidad de Sonora 10
Ejemplo �Multiplicar 3 x 2 Universidad de Sonora 11
Números con signos distintos �Multiplicar 3 x (-2). �Se le quita el signo al -2 y se guarda en alguna variable. �Se multiplica 3 x 2 usando el algoritmo ya visto. �Se multiplica el resultado por -1 para obtener -6. Universidad de Sonora 12
Algoritmo del campesino �Sean x y y dos números. 1. i = 0 2. X[i] = x 3. Y[i] = y 4. x = x / 2 x >> 1 5. y = y * 2 y << 1 6. i++ 7. if x > 1 goto 2 8. x. y = suma de Y[i] en donde X[i] sea impar Universidad de Sonora 13
Ejemplo en base 10 �Obtener 24 x 5: X[i] Y[i] 24 5 12 10 6 20 3 40 1 80 �El producto es 40 + 80 = 120. �Los demás se ignoran porque X[i] es par. Universidad de Sonora 14
Ejemplo en base 2 �Obtener 11000 (24) x 101 (5): X[i] Y[i] 11000 101 1100 10100 11 1010000 �El producto es la suma de las Y[i] en donde X[i] sea impar: 101000 + 1010000 = 1111000 (120). Universidad de Sonora 15
Algoritmo de quarter square �Basado en la siguiente igualdad: Universidad de Sonora 16
Algoritmo de quarter square �El algoritmo es eficiente si los quarter squares se guardan en tablas. �Ejemplo: n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |n 2/4| 0 0 1 2 4 6 9 12 16 20 25 30 36 42 49 56 64 72 81 �Calcular 9 x 3. �Se obtiene 9 + 3 = 12 y 9 – 3 = 6. �Se buscan en la tabla y se restan. � 36 – 9 = 27. Universidad de Sonora 17
Algoritmo de quarter square �Implementaciones: �En hardware en 1980 por E. L. Johnson (ver E. L. Johnson, "A Digital Quarter Square Multiplier", IEEE Transactions on Computers, vol. 29, pp. 258 -261, March 1980, https: //www. computer. org/csdl/trans/tc/1980/03/01675558 abs. html). �En la CPU 6502 en 1995 por S. Judd (ver http: //www. ffd 2. com/fridge/chacking/c=hacking 9. txt) Universidad de Sonora 18
Algoritmo de Karatsuba �Sean x y y números de n dígitos en base B. �Se desea calcular el producto xy. �x y y se escriben de la siguiente forma: �x = x 1 Bm + x 0 �y = y 1 Bm + y 1 �Por ejemplo 7425 en base 10 es: � 7 x 103 + 425 �x 1 = 7, x 0 = 425 Universidad de Sonora 19
Algoritmo de Karatsuba �El producto xy se obtiene así: �xy = (x 1 Bm + x 0)(y 1 Bm + y 0) � = z 2 B 2 m + z 1 Bm + z 0 �donde: �z 2 = x 1 y 1 �z 1 = x 1 y 0 + x 0 y 1 �z 0 = x 0 y 0 �z 1 se puede también escribir: �z 1 = (x 1 + x 0)(y 1 + y 0) – z 2 – z 0 Universidad de Sonora 20
Algoritmo de Karatsuba �El producto se puede también escribir así: �xy = (b 2 + b)x 1 y 1 – b(x 1 – x 0)(y 1 – y 0) + (b + 1)x 0 y 0 �Con b = Bm. �Ahora se requieren 3 multiplicaciones. �Ventajas: �[x 1|y 1] << [x|y], [x 0|y 0] < [x|y] �Los 3 productos se pueden hacer de forma recursivas. �Al final se hacen productos de un dígito. Universidad de Sonora 21
Algoritmo de Karatsuba �Para números de n bits, la complejidad: �Multiplicación larga es O(n 2). �Algoritmos de Karatsuba es O(nlog 2 3 �n 1. 6) �Para números de 32 bits: � 322 = 1024 � 32 log 2 3 = 243 �Speedup = 1024 / 243 = 4. 21 Universidad de Sonora 22
Algoritmo de Karatsuba �Para números de 1024 bits (usados en encriptación): � 10242 = 1, 048, 576 � 1024 log 2 3 = 59, 049 �Speedup = 1048576 / 59049 = 17. 76 �En 2011 Intel patentó un algoritmo basado en el de Karatsuba: https: //www. google. com/patents/US 7930337. Universidad de Sonora 23
Comparación �Multiplicación larga vs Karatsuba. Fuente: https: //www. quora. com/What-is-the-fastest-algorithm-for-multiplication-of-two-n-digit-numbers-1 Universidad de Sonora 24
División �Método restoring. �Método non-restoring (tema para un curso avanzado). Universidad de Sonora 25
División �Nomenclatura: Universidad de Sonora 26
División �Nomenclatura alterna: Universidad de Sonora 27
Método restoring �Ejemplo: �Obtener 4537 / 3 en base 10. � 4537 tiene 4 dígitos numerados 3, 2, 1, 0. � 4537 – 3 x 103 = 1537 q 3 = 1 � 1537 – 3 x 103 = -1463 q 3 = 2 �-1463 + 3 x 103 = 1537 restaura q 3 = 1 � 1537 – 3 x 102 = 1237 q 2 = 1 � 1237 – 3 x 102 = 937 q 2 = 2 � 937 – 3 x 102 = 637 q 2 = 3 Universidad de Sonora 28
Método restoring � 637 – 3 x 102 = 337 � 337 – 3 x 102 = 37 � 37 – 3 x 102 = -263 �-263 + 3 x 102 = 37 restaura � 37 – 3 x 101 = 7 � 7 – 3 x 101 = -23 �-23 + 3 x 101 = 7 restaura � 7 – 3 x 100 = 4 � 4 – 3 x 100 = 1 Universidad de Sonora q 2 = 4 q 2 = 5 q 2 = 6 q 2 = 5 q 1 = 1 q 1 = 2 q 1 = 1 q 0 = 2 29
Método restoring � 1 – 3 x 100 = -2 q 0 = 3 �-2 + 3 x 100 = 1 restaura q 0 = 2 �El cociente está en las qi restauradas (en rojo). �El residuo está en la última operación (en verde). � 4537 / 3 = 1512 (división entera). � 4537 % 3 = 1 (módulo). Universidad de Sonora 30
Método restoring �Ejemplo: �Obtener 11101 / 11 en base 2 (29 / 3 en base 10). � 11101 tiene 5 dígitos numerados 4, 3, 2, 1, 0. � 29 – 3 x 24 = -19 q 4 = 1 �-19 + 3 x 24 = 29 restaura q 4 = 0 � 29 – 3 x 23 = 5 q 3 = 1 � 5 – 3 x 23 = -19 q 3 = 2 �-19 + 3 x 23 = 5 restaura q 3 = 1 � 5 – 3 x 22 = -7 q 2 = 1 Universidad de Sonora 31
Método restoring �-7 + 3 x 22 = 5 restaura � 5 – 3 x 21 = -1 �-1 + 3 x 21 = 5 restaura � 5 – 3 x 20 = 2 � 2 – 3 x 20 = -1 �-1 + 3 x 20 = 2 restaura �Conclusión: � 11101 / 11 = 1001 (29 / 3 = 9) � 11101 % 11 = 10 (29 % 3 = 2) Universidad de Sonora q 2 = 0 q 1 = 1 q 1 = 0 q 0 = 1 q 0 = 2 q 0 = 1 32
Método restoring en Java // Enteros positivos de 16 bits: public Point restoring(int n, int d) { int q = 0; // Cociente int p = n; // Residuo d = d << 16; for (int i = 15; i >= 0; i--) { p = 2 * p - d; if (p >= 0) { q |= 1 << i; } else { p = p + d; } } return new Point(q, p >> 16); } Universidad de Sonora 33
Conclusión de la división �El método restoring es fácil de entender e implementar. �Los métodos non-restoring (son una familia) son más eficientes de implementar en hardware. �Uno de los métodos más usados es la división SRT (Sweeney, Robertson, Tocher), el cuál es nonrestoring. Universidad de Sonora 34
Números de punto flotante �Suma �Resta �Multiplicación �División Universidad de Sonora 35
Suma �Para sumar dos números normalizados en notación científica: 1. Alinear los exponentes. 2. Hacer la suma. 3. Normalizar si es necesario. 4. Redondear. Universidad de Sonora 36
Suma �Ejemplo: sumar 9. 999 x 101 + 1. 610 x 10 -1 en base 10 con cuatro dígitos. �Paso 1: alinear los exponentes. �Se mueve el punto decimal del número con el exponente más pequeño. � 1. 610 x 10 -1 se convierte en 0. 016 x 101. �Paso 2: hacer la suma: Universidad de Sonora 37
Suma 9. 999 + 0. 016 -------10. 015 �La suma es 10. 015 x 101. �Paso 3: normalizar. � 10. 015 x 101 = 1. 0015 x 102. �Paso 4: redondear a 4 dígitos. � 9. 999 x 101 + 1. 610 x 10 -1 = 1. 002 x 102. Universidad de Sonora 38
Suma Fuente: COD 5, p. 205 Universidad de Sonora 39
Precisión �Ejemplo: hacer 2. 56 x 100 + 2. 34 x 102 en base 10 con 3 dígitos. �Paso 1: alinear los exponentes. � 2. 56 x 100 se convierte en 0. 02 x 102 con tres dígitos. �Se perdió precisión. �El standard IEEE 754 define dos bits extras, llamados guard y round, para cálculos intermedios. Universidad de Sonora 40
Precisión �En realidad los números se guardan cómo 2. 5600 x 100 + 2. 3400 x 102. �Paso 1: alinear los exponentes. � 2. 5600 x 100 se convierte 0. 0256 x 102. �Paso 2: hacer la suma 2. 3400 + 0. 0256 -------2. 3656 Universidad de Sonora 41
Precisión �Paso 3: normalizar. � 2. 3656 x 102 ya está normalizado. �Paso 4: redondear a 3 dígitos. � 2. 37 x 102 � 2. 56 x 100 + 2. 34 x 102 = 2. 37 x 102. Universidad de Sonora 42
Algoritmo para sumar �Se usa el mismo algoritmo que para números enteros. �En el standard IEEE 754 la mantisa está guardada como un número binario entero. Fuente: Wikipedia (https: //upload. wikimedia. org/wikipedia/commons/thumb/e/e 8/IEEE_754_Single_Floating _Point_Format. svg/618 px-IEEE_754_Single_Floating_Point_Format. svg. png) Universidad de Sonora 43
Resta �La resta se convierte en suma al poner el segundo número en complemento a 2. Universidad de Sonora 44
Multiplicación �Para multiplicar dos números normalizados en notación científica: 1. Sumar los exponentes. 2. Multiplicar las mantisas. 3. Normalizar si es necesario. 4. Redondear. Universidad de Sonora 45
Multiplicación �Ejemplo: multiplicar 1. 110 x 1010 por 9. 200 x 10 -5 en base 10 con 4 dígitos en la mantisa y 2 en el exponente. �Paso 1: sumar los exponentes. � 10 + (-5) = 5. �Paso 2: multiplicar las mantisas. Universidad de Sonora 46
Multiplicación 1. 100 x 9. 200 ------0000 2200 9990 ----10212000 �Se le pone el punto decimal 10. 212000. Universidad de Sonora 47
Multiplicación �Paso 3: normalizar. � 10. 212000 x 105 se normaliza a 1. 0212000 x 106. �En este punto se checa si hay overflow o underflow. �Paso 4: redondear. � 1. 0212000 x 106 se convierte en 1. 021 x 106 con 4 dígitos para la mantisa. Universidad de Sonora 48
Algoritmo para multiplicar �Se puede usar cualquiera de los algoritmos vistos para multiplicar números enteros. Universidad de Sonora 49
División �Para dividir dos números normalizados en notación científica: 1. Restar los exponentes. 2. Dividir las mantisas. 3. Normalizar si es necesario. 4. Redondear. Universidad de Sonora 50
División �Ejemplo: dividir 7. 152 x 100 entre 2. 491 x 102 en base 10 con 3 dígitos en la mantisa. �Paso 1: restar los exponentes. � 0 – 2 = -2. �Paso 2: dividir las mantisas. � 7. 152 / 2. 491 = 2. 87113608992. �Paso 3: normalizar. �El cociente ya está normalizado. Universidad de Sonora 51
División �Paso 4: redondear. � 2. 87113608992 = 2. 871 con 3 dígitos en la mantisa. �Conclusión: � 7. 152 x 100 entre 2. 491 x 102 = 2. 871 x 10 -2. Universidad de Sonora 52
Algoritmos de división �Se pueden usar los algoritmos de división entera. �Pero hay que tener cuidado con la interpretación de los resultados. �La división entera entrega el cociente y el residuo (módulo) por separado. �En la división de punto flotante solo interesa el cociente (número de punto flotante) con cierta precisión. Universidad de Sonora 53
Algoritmos de división �Por ejemplo, al dividir 4715. 22 / 241. 9 nos interesa que el resultado sea 19. 4924 y no que el resultado sea cociente = 19, residuo = 119. 12. �Una opción es la división Newton-Raphson. Universidad de Sonora 54
División Newton-Raphson �Se desea calcular a / b. 1. Calcular 1 / b usando Newton-Raphson. 2. Multiplicar a x (1 / b). Universidad de Sonora 55
Newton-Raphson �Es un método para encontrar raíces de una función (x: f(x) = 0). �Dada f(x), la derivada f’(x) y un valor inicial x 0 para la raíz de f, una mejor aproximación es: �Se repite el proceso: Universidad de Sonora 56
Newton-Raphson �Para obtener 1 / b, se utiliza: �Sustituyendo lo anterior en la ecuación general: Universidad de Sonora 57
Newton-Raphson Universidad de Sonora 58
Ventaja �Convergencia cuadrática. �Ejemplo: calcular 1 / 4 con x 0 = 0. 2. x 0 0. 2 x 1 0. 24 x 2 0. 2496 x 3 0. 24999936 x 4 0. 249999983616 x 5 0. 25 Universidad de Sonora 59
Desventaja �Si x 0 no es una buena aproximación, el método diverge. �Ejemplo: calcular 1 / 4 con x 0 = 0. 51. x 0 0. 51 x 1 -0. 02040000002 x 2 -0. 0424646400004 … … x 9 -1. 31525429545336 E 8 x 10 -6. 9195754731391424 E 16 … … x 15 -Infinity Universidad de Sonora 60
Solución �Tomar ventaja de que los números están normalizados: �En base 10, 1 ≤ mantisa < 10. �En base 2, 1 ≤ mantisa < 2. �Guardar en una tabla (o en una ROM para implementaciones en hardware) algunos inversos. �Por ejemplo, para base 10. Universidad de Sonora 61
Solución Índice Inverso 0 1. 0000 1 0. 5000 2 0. 3333 3 0. 2500 4 0. 2000 5 0. 1667 6 0. 1429 7 0. 1250 8 0. 1111 Para calcular 1 / 8. 25: • Se toma la parte entera, 8. • Se usa ROM[7] como x 0. Universidad de Sonora 62
Solución � 1 / 8. 25. x 0 0. 125 x 1 0. 12109375 x 2 0. 12121200561523438 x 3 0. 12121201097 x 4 0. 121212122 Universidad de Sonora 63
División Newton-Raphson �Para leer sobre una implementación en hardware. �Gaurav Agrawal, Ankit Khandelwal. A Newton Raphson Divider Based on Improved Reciprocal Approximation Algorithm. http: //citeseerx. ist. psu. edu/viewdoc/download? doi=10. 1. 1. 134. 725&rep=rep 1&type=pdf Universidad de Sonora 64
- Slides: 64