Aritmética de computadores

Aprende cómo realiza operaciones aritméticas el hardware de un procesador. Suma y resta con un único sumador en complemento a dos, distingue el acarreo del desbordamiento y construye una ALU que también compara números y realiza operaciones lógicas. Sigue el funcionamiento de multiplicadores y divisores, desde los circuitos de desplazamiento y suma hasta el algoritmo de Booth y los multiplicadores rápidos en árbol, incluidas las instrucciones de RISC-V. Después codifica números en coma flotante según IEEE 754, súmalos, multiplícalos y redondéalos como lo hace el hardware, y explica por qué resultados como 0,1 + 0,2 no son exactos.

IntermedioUnidad 3 de 6 del curso Curso de Organización y arquitectura de computadores

Lo que aprenderás

  1. Usa un único sumador binario para sumar y restar valores con y sin signo, y determina cuándo un resultado ya no cabe en sus bits.
    • Suma y resta enteros binarios con un único sumador
      Suma números de n bits columna por columna, resta sumando el complemento a dos y comprueba por qué el mismo circuito sirve para valores con y sin signo.
    • Detecta el desbordamiento en resultados con signo y sin signo
      Distingue el acarreo del desbordamiento, detecta cada uno con hardware sencillo o una secuencia breve de instrucciones, y conoce qué hacen los procesadores y los lenguajes cuando se produce.
  2. Construye una ALU a partir de secciones de 1 bit que sume, reste, compare y realice operaciones lógicas, y acelera su cadena de acarreo.
    • Construye una ALU de n bits a partir de secciones de 1 bit
      Combina puertas lógicas, un sumador completo y multiplexores en una ALU de 1 bit, encadena las secciones para formar una ALU de n bits y selecciona operaciones con líneas de control.
    • Compara números y detecta el cero en la ALU
      Genera la salida de detección de cero para saltos por igualdad y el resultado de menor que para comparaciones con y sin signo, incluida la corrección por desbordamiento.
    • Acelera la suma con anticipación de acarreo
      Explica por qué los acarreos ralentizan los sumadores de propagación y calcula los acarreos por anticipado con señales de generación y propagación.
  3. Multiplica y divide como lo hace el hardware, desde circuitos sencillos de desplazamiento y suma hasta reglas de signo, multiplicadores rápidos e instrucciones de RISC-V.
    • Multiplica mediante desplazamiento y suma
      Multiplica números binarios sin signo con el algoritmo secuencial de desplazamiento y suma, asigna correctamente el tamaño del producto y usa desplazamientos para potencias de dos.
    • Multiplica números con signo y aplica técnicas de multiplicación rápida
      Trabaja con operandos en complemento a dos, recodifica multiplicadores con el algoritmo de Booth y explica cómo los multiplicadores en árbol alcanzan una velocidad elevada.
    • Divide enteros y trata los casos especiales
      Divide con el algoritmo de restauración, aplica las reglas de signo del cociente y el resto, y conoce cómo tratan el hardware y RISC-V la división por cero y el desbordamiento.
  4. Codifica y decodifica valores binarios de IEEE 754, explica el rango y la precisión de cada formato y reconoce ceros, infinitos, valores NaN y números subnormales.
    • Codifica y decodifica formatos binarios de IEEE 754
      Escribe un número en notación científica binaria normalizada, almacénalo en los campos de signo, exponente con sesgo y fracción, e interpreta los bits almacenados como un valor.
    • Usa ceros, infinitos, valores NaN y números subnormales
      Reconoce los patrones de exponente reservados, explica el subdesbordamiento gradual y predice los resultados e indicadores de las operaciones excepcionales.
  5. Sigue los pasos que realiza el hardware para sumar y multiplicar en coma flotante, redondea los resultados correctamente y predice los errores de precisión resultantes.
    • Suma y multiplica números en coma flotante
      Alinea, opera, normaliza y redondea en el orden que sigue el hardware de coma flotante, y usa las instrucciones de coma flotante de RISC-V.
    • Redondea los resultados correctamente
      Aplica las direcciones de redondeo de IEEE 754, redondea al más cercano con desempate al par y usa los bits de guarda, de redondeo y adherente para redondear como si tuvieras precisión infinita.
    • Predice y evita errores de precisión
      Explica por qué valores decimales familiares son inexactos en binario, por qué la suma en coma flotante no es asociativa y cómo la absorción, la cancelación y las conversiones causan fallos reales.

Guía de estudio de Aritmética de computadores

5 capítulos

1

Suma y resta enteros y detecta el desbordamiento

Un sumador produce bits antes de que se decida si representan números con o sin signo. Sigue los acarreos durante la suma, reutiliza el mismo circuito para la resta y después comprueba el resultado frente al rango adecuado. La distinción también importa en el software: un procesador puede mantener indicadores de estado, devolver los bits menos significativos o generar una excepción, mientras que un lenguaje de programación da sus propias reglas a esas operaciones máquina.

1.1 Suma y resta enteros binarios con un único sumador

Un sumador binario realiza la misma pequeña tarea en cada posición de bit. Combina los dos bits de los operandos con un acarreo procedente de la posición de la derecha. El significado del patrón de bits completo se determina después.

Sigue el acarreo

Un semisumador tiene dos entradas: su suma es la operación XOR de ambas y su acarreo es su operación AND. Un sumador completo también acepta un acarreo de entrada:

si=ai⊕bi⊕ci ci+1=aibi+aici+bici

Aquí la multiplicación significa AND y la suma significa OR. La suma es 1 para un número impar de entradas con valor 1; el acarreo es 1 cuando hay al menos dos. Encadenar sumadores completos forma un sumador de propagación de acarreo. Solo el bit 0 recibe el acarreo inicial; cada bit posterior recibe el acarreo producido por el bit vecino.

Para 23 + 45, escribe 0001 0111 + 0010 1101. En el bit 0, 1 + 1 produce suma 0 y acarreo 1. En el bit 1, 1 + 0 + 1 vuelve a producir 0 y acarreo 1. En el bit 2, tres entradas con valor 1 producen suma 1 y acarreo 1. Al continuar hacia la izquierda se obtiene 0100 0100, o 68, sin acarreo final.

Un resultado de n bits conserva solo los n bits menos significativos, por lo que el circuito calcula la suma módulo 2n. En 8 bits, 1111 1100 + 0000 0101 produce 0000 0001 y acarreo de salida 1. Interpretado con signo, esto es −4 + 5 = 1. Interpretado sin signo, es 252 + 5 = 257, cuyos ocho bits menos significativos representan 1. El circuito no ha cambiado; el rango permitido sí.

Convierte la resta en suma

El complemento a dos proporciona la identidad

a−b=a+b‾+1.

Una línea de control de resta aplica XOR con 1 a cada bit del segundo operando, invirtiéndolo, y fija el acarreo de entrada inicial en 1. Para la suma, esa línea es 0, por lo que el segundo operando pasa sin cambios y el acarreo inicial es 0.

Para calcular 23 − 45, invierte 0010 1101 para obtener 1101 0010. Suma 0001 0111 + 1101 0010 + 1 para obtener 1110 1010, con acarreo de salida 0. Su valor con signo es −22. Dejar el acarreo inicial en 0 daría −23: la inversión por sí sola proporciona uno menos que el valor negativo requerido.

Para la resta sin signo, acarreo de salida 1 significa sin préstamo; acarreo de salida 0 significa que se necesitó un préstamo. Así, el acarreo de salida 0 en 23 − 45 indica un resultado sin signo por debajo de cero. Arm registra este acarreo que indica ausencia de préstamo; x86 registra su inverso como indicador de préstamo.

Ajusta las anchuras antes de operar
InterpretaciónRegla de extensiónExtensión de 1110 de 4 bits a 8 bits
Complemento a dos con signoCopiar el bit de signo1111 1110, sigue siendo −2
Sin signoInsertar ceros0000 1110, sigue siendo 14

La instrucción lb de RISC-V extiende el signo de un byte, lbu lo extiende con ceros y addi extiende con signo su inmediato de 12 bits. Elige la extensión según el significado del operando antes de enviar los bits al sumador.

El valor con signo más negativo no tiene un equivalente positivo con la misma anchura. Cambiar el signo de 1000 0000 de 8 bits lo invierte a 0111 1111 y suma 1, con lo que vuelve a 1000 0000. El +128 deseado necesita un formato con signo más ancho.

Puntos clave

  • Un sumador completo combina dos bits de operandos y un acarreo de entrada.
  • La suma almacenada de n bits es la suma matemática módulo 2n.
  • La resta invierte el segundo operando y fija solo el acarreo de entrada inicial en 1.
  • En este circuito de resta, un acarreo de salida de 1 significa que no hay préstamo sin signo.
  • La extensión de signo conserva los valores con signo; la extensión con ceros conserva los valores sin signo.

1.2 Detecta el desbordamiento en resultados con signo y sin signo

El desbordamiento significa que el resultado exacto queda fuera del rango del destino. Los valores sin signo de n bits van de 0 a 2n−1; los valores con signo en complemento a dos van de −2n−1 a 2n−1−1. Ocho bits contienen de 0 a 255 sin signo, o de −128 a 127 con signo. El mismo resultado almacenado puede ser válido en una interpretación y estar desbordado en la otra.

Comprueba la señal adecuada
OperaciónDesbordamiento sin signoDesbordamiento con signo
SumaEl acarreo de salida del bit más significativo es 1Entradas del mismo signo producen un resultado de signo contrario
RestaSe necesita un préstamoEntradas de distinto signo producen un resultado cuyo signo difiere del de la primera entrada

Para la suma o resta con signo, el hardware puede usar

V=cn−1⊕cn,

donde los dos acarreos entran y salen de la posición de signo. El acarreo de salida por sí solo responde a la cuestión sin signo.

Suma 107 y 54 en 8 bits: 0110 1011 + 0011 0110 da 1010 0001. Entra un acarreo en el bit 7, pero no sale ninguno, por lo que el desbordamiento es 1. El valor sin signo 161 cabe; la interpretación con signo −95 no es igual a la suma verdadera 161. A la inversa, −4 + 5 da acarreo 1, pero desbordamiento con signo 0. Sumar 1000 0000 consigo mismo da acarreo 1 y desbordamiento 1, por lo que ambas interpretaciones fallan.

Sumar números de signos opuestos no puede producir desbordamiento: la suma exacta está entre los operandos. La resta necesita su propia regla de signos porque restar un número negativo aumenta el primer operando. Por ejemplo, 100 − (−40) es demasiado grande para 8 bits con signo, aunque ambos valores de entrada caben.

Conoce qué hace la instrucción

add de x86 establece indicadores de acarreo y desbordamiento. Las operaciones de Arm que actualizan indicadores, como ADDS, los establecen; la instrucción ADD normal conserva los indicadores existentes. add y addi de MIPS generan una excepción síncrona por desbordamiento con signo, mientras que addu y addiu no lo hacen. La suma de enteros de RISC-V escribe los bits menos significativos y no tiene indicadores de desbordamiento ni excepciones síncronas por desbordamiento aritmético.

Después de add t0, t1, t2, una comprobación sin signo en RISC-V es:

bltu t0, t1, overflow

Una suma sin signo que ha vuelto al extremo inferior del rango es menor que un operando original. Los valores con signo necesitan una comprobación distinta:

slti t3, t2, 0
slt  t4, t0, t1
bne  t3, t4, overflow

La primera instrucción registra si el segundo operando es negativo. La segunda registra si el resultado es menor que el primer operando. Sin desbordamiento, estas comprobaciones coinciden: sumar un número negativo reduce el valor, mientras que sumar uno no negativo no puede reducirlo. Una discrepancia detecta el desbordamiento. Para un inmediato positivo conocido, basta un salto condicional con signo que compruebe si la suma disminuyó.

Separa el hardware de las reglas del lenguaje

La aritmética sin signo de C y C++ vuelve al extremo del rango módulo 2n; el desbordamiento con signo es un comportamiento indefinido. Los tipos int y long de Java vuelven al extremo del rango, mientras que Math.addExact informa del desbordamiento mediante una excepción. Los enteros de Python crecen según sea necesario. Por tanto, la vuelta al extremo del rango en hardware no determina qué se permite hacer a un programa en C.

Las sumas y restas con vuelta al extremo del rango conservan un resultado final que cabe: en aritmética modular de 8 bits, (100 + 50) − 60 vuelve al rango primero como −106 y después como 90. Este razonamiento se aplica a la aritmética con vuelta al extremo del rango, no a expresiones con signo de C que se desbordan.

La saturación es una política distinta. La suma sin signo de 8 bits 200 + 100 se satura a 255 en lugar de volver al rango como 44. Es útil para intensidades de píxeles y otras señales acotadas, donde convertir un resultado positivo grande en un valor pequeño al volver al rango sería engañoso.

Puntos clave

  • Elige las comprobaciones de desbordamiento según la interpretación de los operandos y la operación.
  • El desbordamiento con signo es la operación XOR de los acarreos de entrada y de salida del bit de signo.
  • El software de RISC-V debe comprobar el desbordamiento de enteros cuando necesita informarlo.
  • El desbordamiento con signo de C, la vuelta al extremo del rango de Java y los enteros crecientes de Python tienen semánticas distintas.
  • La suma y la resta modulares pueden recuperar un valor final representable después de una vuelta intermedia al extremo del rango.
  • La saturación limita un resultado fuera de rango a uno de los extremos.
2

Diseña una unidad aritmético-lógica

Una ALU convierte una selección de operaciones en un circuito compartido. Las puertas y un sumador calculan resultados candidatos, las líneas de control seleccionan uno y algunas salidas adicionales permiten comprobar la igualdad y el orden. Construye esa estructura a partir de secciones de bits, comprueba por qué la comparación con signo necesita corrección por desbordamiento y después acorta el camino de acarreo para que un camino de datos más ancho pueda producir su resultado aritmético sin esperar a que un acarreo atraviese todos los bits.

2.1 Construye una ALU de n bits a partir de secciones de 1 bit

Una unidad aritmético-lógica, o ALU, recibe operandos y entradas de control y produce un resultado junto con salidas de estado. Es combinacional: sus salidas dependen de las entradas actuales. Los registros conservan los operandos y capturan los resultados; la ALU no almacena nada por sí misma.

Construye un bit y después repítelo

Una sección de 1 bit calcula AND, OR y la suma de un sumador completo en paralelo. Un multiplexor selecciona qué resultado candidato llega al bit de resultado. En una ALU de n bits, todas las secciones comparten los controles de operación, mientras que el acarreo de salida de cada sumador alimenta el acarreo de entrada de la sección siguiente. Las operaciones lógicas funcionan de forma independiente en cada posición; la suma depende de la cadena de acarreo.

Un control Bnegate invierte el segundo operando y también fija el acarreo de entrada del bit 0. Al seleccionar el sumador se calcula entonces la resta. Las secciones superiores reciben su acarreo de la sección anterior, no directamente de Bnegate. Activar todas las entradas de acarreo introduciría unos adicionales en el cálculo.

Un control Ainvert también puede invertir el primer operando. Seleccionar AND con ambos operandos invertidos produce NOR según la ley de De Morgan:

a‾⋅b‾=a+b‾.

Seleccionar OR con ambos invertidos produce NAND. En estas ecuaciones lógicas, el signo más denota OR.

Interpreta una palabra de control

Una ALU clásica de libro de texto usa los campos Ainvert, Bnegate y un selector Operation de dos bits:

Palabra de controlResultado seleccionado
0000AND
0001OR
0010Suma
0110Resta
0111Puesta a uno si es menor con signo
1100NOR

Estas son las codificaciones de este diseño concreto. Son controles internos, no codificaciones de instrucciones RISC-V.

Para las entradas 0101 y 0011, el control 0110 invierte la segunda entrada a 1100 y proporciona un acarreo inicial de 1. El sumador produce 0010, con acarreo de salida 1: 5 − 3 = 2, sin préstamo sin signo. Seleccionar AND para las entradas originales produciría en cambio 0001. Los valores de entrada pueden permanecer fijos mientras un cambio de control selecciona un camino de resultado distinto.

La sección más significativa también proporciona información de desbordamiento y comparación. Una reducción de todos los bits del resultado proporciona Zero. Esas salidas de estado permiten que el control del procesador que rodea a la ALU compruebe el resultado aritmético sin almacenar un segundo resultado de anchura completa.

Añade el desplazamiento junto al sumador

Una ALU completa para enteros básicos de RISC-V también necesita XOR, comparación sin signo y desplazamientos. Un desplazador de barril usa una secuencia de niveles de multiplexores. Cada nivel deja pasar su entrada o la desplaza una potencia de dos. Un desplazador de 32 bits tiene niveles para 1, 2, 4, 8 y 16 posiciones, por lo que gestiona cualquier desplazamiento de 0 a 31 en cinco niveles.

Para desplazar 13 posiciones, selecciona los niveles de 8, 4 y 1. Los desplazamientos seleccionados se combinan en un resultado. Un desplazamiento lógico a la derecha inserta ceros. Un desplazamiento aritmético a la derecha replica el bit de signo y conserva el signo de un valor negativo. Así, 1111 0000 desplazado dos posiciones a la derecha da 0011 1100 de forma lógica y 1111 1100 de forma aritmética.

Puntos clave

  • Una ALU calcula a partir de las entradas actuales; los registros proporcionan almacenamiento.
  • Las secciones de bits comparten los controles de operación y transmiten acarreos entre posiciones adyacentes.
  • Bnegate invierte el segundo operando y proporciona el acarreo inicial para la resta.
  • Un multiplexor selecciona entre resultados aritméticos y lógicos.
  • Los niveles de un desplazador de barril combinan desplazamientos por potencias de dos.

2.2 Compara números y detecta el cero en la ALU

Las comparaciones suelen reutilizar la resta. La igualdad pregunta si la diferencia es cero. La comparación de orden pregunta si la diferencia matemática es negativa, lo que requiere especial cuidado cuando una resta de anchura fija se desborda.

Detecta la igualdad en todos los bits

La salida Zero es la operación NOR de todos los bits del resultado:

Zero=r0+r1+⋯+rn−1‾.

Un solo bit de resultado distinto de cero hace que Zero sea falso. Restar dos patrones de bits iguales produce cero; dos patrones distintos de n bits no pueden diferir en un múltiplo distinto de cero de 2n, por lo que la resta con vuelta al extremo del rango no crea una falsa igualdad. Un circuito de igualdad alternativo aplica XOR a los bits correspondientes de los operandos y comprueba si todos los resultados de XOR son cero.

Corrige el signo para la comparación menor que con signo

slt de RISC-V escribe el entero 1 con la anchura completa si el primer operando con signo es menor, o 0 en caso contrario. En una ALU dividida en secciones, la sección más significativa calcula una señal Set y la envía de vuelta a la entrada Less del bit 0. Todos los bits de resultado superiores se fuerzan a cero.

La señal Set correcta es

Menorsigned=signo(a−b)⊕V.

Cuando no hay desbordamiento, el signo de la diferencia sirve directamente. Cuando hay desbordamiento, ese signo está invertido respecto de la diferencia verdadera, por lo que aplicar XOR con 1 lo corrige.

Compara 7 con −8 en cuatro bits. La resta 0111 + 0111 + 1 da 1111. Su signo sugiere una diferencia negativa, pero la diferencia exacta es 15, fuera del rango de −8 a 7. El desbordamiento es 1, por lo que la señal Less corregida es 1 XOR 1 = 0. El resultado de slt es 0000, lo que indica correctamente que 7 no es menor que −8.

Usa el préstamo para la comparación menor que sin signo

La comparación sin signo usa una señal distinta:

Menorunsigned=cn‾

para una resta realizada con la segunda entrada invertida y acarreo inicial 1. Un acarreo de salida de 0 significa que se necesitó un préstamo, por lo que el primer operando sin signo es menor.

Patrones de entradaComparación con signoComparación sin signo
0111, 10007 < −8 es falso7 < 8 es verdadero
1000, 0111−8 < 7 es verdadero8 < 7 es falso

Esta distinción aparece en slt frente a sltu, y en los saltos condicionales blt frente a bltu y bge frente a bgeu. Ni el signo del resultado por sí solo ni un «indicador de negativo» genérico responden a ambas preguntas.

Aplica la comparación en software

Una comprobación de límites sin signo puede rechazar tanto los índices negativos como los índices iguales o superiores a la longitud del arreglo:

bgeu x10, x11, IndexOutOfBounds

Aquí x10 contiene el índice con signo y x11 contiene una longitud no negativa que cabe en el rango con signo. Un índice negativo, reinterpretado sin signo, es al menos 2n−1 y, por tanto, supera cualquiera de esas longitudes. La condición sobre la longitud importa: hace que una sola comparación sin signo sea suficiente.

Las conversiones del lenguaje también pueden cambiar el significado de una comparación. Con un unsigned int de C de 32 bits, -1 < 0u es falso porque −1 se convierte en 4 294 967 295 antes de la comparación. Sigue la conversión antes de razonar a partir del signo menos escrito.

Puntos clave

  • Zero comprueba todos los bits del resultado, por lo que la resta puede implementar la igualdad.
  • La comparación menor que con signo usa el signo de la diferencia XOR el desbordamiento con signo.
  • La comparación menor que sin signo usa el préstamo de la resta.
  • La puesta a uno si es menor escribe 0 o 1 con la anchura completa del resultado.
  • Una comprobación de límites sin signo detecta índices negativos cuando la longitud cabe en el rango no negativo con signo.
  • Las conversiones pueden cambiar una comparación con signo a una sin signo.

2.3 Acelera la suma con anticipación de acarreo

El acarreo de un sumador de propagación debe atravesar cada bit en orden. La anticipación de acarreo sustituye esa espera secuencial por una lógica que predice los acarreos a partir de los bits de los operandos y del acarreo inicial.

Describe el comportamiento de acarreo de cada bit

Sean la generación y la propagación

gi=aibi,pi=ai+bi.

Estas son expresiones booleanas: la multiplicación es AND y la suma es OR. La generación vale 1 cuando el bit crea un acarreo independientemente del acarreo de entrada. La propagación vale 1 cuando un acarreo de entrada puede pasar. La relación de recurrencia es

ci+1=gi+pici.

Un bit con ambas entradas a 1 genera un acarreo; un bit con una entrada a 1 transmite un acarreo; un bit con ambas entradas a 0 lo detiene. Con esta definición mediante OR, un bit que genera también tiene propagación 1, lo que no cambia la fórmula del acarreo.

Desarrolla la dependencia

Sustituye la expresión de cada acarreo anterior:

c1=g0+p0c0 c2=g1+p1g0+p1p0c0 c3=g2+p2g1+p2p1g0+p2p1p0c0 c4=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0.

Ahora cada expresión depende de señales derivadas de los operandos y del acarreo inicial, no de una cadena secuencial de salidas de acarreo intermedias. Una vez disponibles los acarreos, cada bit de suma sigue siendo la operación XOR de sus dos entradas y su acarreo de entrada.

Para 1011 + 0110 con acarreo inicial 0, la generación desde el bit 0 hacia arriba es 0, 1, 0, 0 y la propagación es 1, 1, 1, 1. Así, los acarreos de entrada a los bits del 1 al 4 son 0, 1, 1, 1. Los cuatro bits del resultado son 0001 con acarreo de salida 1, que representan 11 + 6 = 17.

Construye grupos en lugar de puertas gigantes

Un bloque de cuatro bits tiene las señales de grupo

G=g3+p3g2+p3p2g1+p3p2p1g0, P=p3p2p1p0.

Su acarreo de salida es G+Pc0. Un segundo nivel de anticipación combina estas señales de bloque con la misma regla. Cuatro bloques de cuatro bits y una unidad de anticipación de grupo forman un sumador de 16 bits. La agrupación adicional permite diseños más anchos; los sumadores de prefijos paralelos, como el de Kogge–Stone, organizan estas relaciones en una red rápida.

En un modelo sencillo de retardos de puertas, la propagación de acarreo cuesta unos dos retardos de puerta por bit, o 32 para 16 bits. Un diseño de anticipación de dos niveles puede entregar el último acarreo en unos cinco: uno para las señales de bits, dos para las señales de grupo y dos para el acarreo de grupo. Esta estimación cuenta niveles lógicos y supone que se dispone de las puertas necesarias; el retardo real también depende del tamaño de las puertas y del cableado. La agrupación intercambia más hardware por un camino de acarreo que crece aproximadamente de forma logarítmica con la anchura.

Un sumador de selección de acarreo emplea el área de otra forma: calcula un bloque superior dos veces, una para acarreo de entrada 0 y otra para acarreo de entrada 1. Un multiplexor selecciona el resultado correcto cuando llega el acarreo del bloque inferior.

Algunos sumadores definen la propagación con XOR en lugar de OR. Eso también da acarreos correctos y hace que la suma sea si=pi⊕ci. Mantén la definición elegida de forma coherente al derivar la lógica de grupo.

Puntos clave

  • La generación crea un acarreo; la propagación transmite un acarreo de entrada.
  • Desarrollar las ecuaciones de acarreo elimina la dependencia secuencial de cada salida de acarreo anterior.
  • La generación y la propagación de grupo permiten que los sumadores anchos usen varios niveles de anticipación.
  • La anticipación y la selección de acarreo intercambian área del circuito por velocidad sin cambiar la suma.
3

Multiplica y divide enteros mediante hardware

La multiplicación combina productos parciales desplazados; la división determina un dígito del cociente a partir de un resto que cambia. Sigue ambos procesos en registros pequeños y después observa cómo los operandos con signo cambian el seguimiento de los valores. Los multiplicadores más rápidos forman y reducen muchos productos parciales a la vez, mientras que los divisores deben gestionar dependencias entre pasos. Las instrucciones de RISC-V ofrecen mitades de productos, cocientes y restos con reglas precisas para entradas excepcionales.

3.1 Multiplica mediante desplazamiento y suma

Cada bit del multiplicador binario elige una copia desplazada del multiplicando o cero. Sumar esos productos parciales da el resultado. Un operando de n bits por uno de m bits puede requerir n + m bits, por lo que dos operandos de 32 bits necesitan un producto completo de 64 bits.

Sigue el desplazamiento y la suma

Para operandos sin signo de n bits, inicializa un producto de 2n bits a cero. Repite n veces: comprueba el bit menos significativo del multiplicador, suma el multiplicando actual si ese bit es 1, desplaza el multiplicando a la izquierda y desplaza el multiplicador a la derecha. El registro del multiplicando debe ser lo bastante ancho para conservar sus copias desplazadas.

Para 6 × 5 con cuatro bits, el multiplicador es 0101:

PasoBit menos significativo del multiplicadorMultiplicando desplazadoProducto acumulado
110000 01100000 0110
200000 11000000 0110
310001 10000001 1110
400011 00000001 1110

El producto final es 30. El bit que se comprueba y la dirección del desplazamiento actúan conjuntamente: comprobar el bit más significativo mientras se desplaza el multiplicador a la derecha emparejaría los bits con los pesos incorrectos. Este diseño secuencial tarda n pasos, incluidos los pasos cuyo bit del multiplicador es cero.

Comparte espacio de registro

El primer diseño usa un registro de multiplicando y un sumador de 2n bits. Un diseño optimizado mantiene el multiplicando fijo en n bits, coloca el multiplicador en la mitad menos significativa de un registro de producto de 2n bits e inicializa la mitad más significativa a cero.

Cuando el bit menos significativo es 1, suma el multiplicando a la mitad más significativa. Conserva el acarreo de salida del sumador en un bit adicional y después desplaza ese acarreo y ambas mitades del producto juntos a la derecha. Los bits del multiplicador salen por la derecha a medida que los bits del producto ocupan el espacio que liberan. Descartar el acarreo estropea los productos grandes: con operandos de cuatro bits, 15 × 15 se convertiría incorrectamente en 1 en lugar de 225. Con un paso por ciclo de reloj, la implementación sencilla de 32 bits tarda unos 32 ciclos.

Ten presente la anchura del producto

Un producto sin signo cabe en n bits exactamente cuando los n bits más significativos del producto completo son cero. Para 6 × 5, el resultado completo es 0001 1110; almacenar solo 1110 da 14. La multiplicación en sí fue correcta, pero el destino estrecho descartó parte de ella.

Un desplazamiento de k posiciones a la izquierda multiplica por 2k cuando el resultado cabe. La multiplicación por 8 se convierte en un desplazamiento de tres posiciones; la multiplicación por 10 puede usar dos copias desplazadas:

(x << 3) + (x << 1)

La operación aritmética es 8x+2x=10x. Las reglas de anchura y del lenguaje de programación siguen aplicándose a los desplazamientos y a la suma; esta transformación no crea más bits de resultado.

Interpreta las mitades del resultado de RISC-V

mul devuelve los XLEN bits menos significativos, donde XLEN es la anchura del registro de enteros. mulhu devuelve la mitad más significativa para operandos sin signo. Las instrucciones para la mitad más significativa con signo son mulh para dos operandos con signo y mulhsu para un primer operando con signo y un segundo operando sin signo.

El software que solicita el producto completo puede emitir la instrucción adecuada para la mitad más significativa seguida de mul con los mismos operandos. Una implementación puede fusionar el par. El resultado menos significativo por sí solo no permite determinar si un producto sin signo cabe; la mitad más significativa proporciona esa información.

Puntos clave

  • Cada bit del multiplicador selecciona un producto parcial desplazado o cero.
  • El producto completo puede requerir la suma de las anchuras de los operandos.
  • El desplazamiento y suma secuencial tarda un paso por cada bit del multiplicador.
  • El multiplicador compacto debe conservar el acarreo de la suma antes de desplazar.
  • Un producto sin signo cabe en un destino estrecho exactamente cuando su mitad más significativa es cero.
  • RISC-V proporciona una instrucción de multiplicación para la mitad menos significativa y tres para la mitad más significativa según la interpretación.

3.2 Multiplica números con signo y aplica técnicas de multiplicación rápida

La multiplicación con signo debe tratar los signos de los operandos sin perder el valor más negativo. El hardware más rápido también necesita una forma de reducir muchos productos parciales sin esperar cada vez a una suma completa con propagación de acarreo.

Multiplica magnitudes de forma segura

Un método registra los signos, forma magnitudes sin signo de n bits, las multiplica para obtener 2n bits y cambia el signo del producto completo si exactamente un operando era negativo. Para −8 en cuatro bits, los bits de magnitud 1000 representan el valor sin signo 8. No pueden interpretarse como un valor positivo con signo de cuatro bits.

Los n bits menos significativos del producto son idénticos en las interpretaciones con y sin signo. 1111 × 0010 da 30 sin signo (0001 1110) o −2 con signo (1111 1110). Ambas mitades menos significativas son 1110; solo difieren las mitades más significativas. Por eso una instrucción mul sirve para ambas interpretaciones.

Sigue las decisiones de Booth

El algoritmo de Booth trabaja directamente con complemento a dos. Da al acumulador n + 1 bits y extiende el multiplicando con signo hasta esa anchura, para que quepan tanto él como su opuesto. Inicializa el acumulador a cero, coloca el multiplicador en su registro de n bits y añade un bit adicional inicializado a cero.

Examina como un par el bit menos significativo del multiplicador y el bit añadido:

ParOperación del acumulador
10Restar el multiplicando
01Sumar el multiplicando
00 o 11Dejarlo sin cambios

Después de cada decisión, desplaza aritméticamente a la derecha todo el registro formado por el acumulador, el multiplicador y el bit adicional. Repite n veces; descarta el bit añadido y el bit de signo superior redundante del acumulador para obtener el producto de 2n bits.

Para 2 × (−3), usa el multiplicando 00010, el multiplicador 1101 y el acumulador 00000. Los pares son 10, 01, 10, 11. Después de las respectivas operaciones y desplazamientos, el acumulador y el multiplicador son 11111 0110, 00000 1011, 11111 0101 y 11111 1010. Los ocho bits menos significativos del producto 1111 1010 representan −6.

Un desplazamiento lógico insertaría cero en el extremo superior y alteraría los resultados parciales negativos. El bit adicional del acumulador también importa: restar un multiplicando de n bits con el valor más negativo necesita un valor positivo que no está disponible en n bits con signo.

Reduce el trabajo y los caminos de acarreo

La recodificación de Booth sustituye una secuencia de bits 1 por una resta en su extremo menos significativo y una suma por encima de su extremo más significativo. Por ejemplo, 126 es 128 − 2. Los bits alternantes pueden no suponer ningún ahorro. Booth en base 4 examina dos bits del multiplicador por paso y usa dígitos de −2 a +2, lo que reduce el número de productos parciales.

Un multiplicador rápido forma productos parciales en paralelo. Un sumador de acarreo almacenado comprime tres palabras en dos sin propagar acarreos por la palabra. Los árboles de Wallace o Dadda repiten esa reducción y después usan un último sumador con propagación de acarreo. Reducir 32 filas a dos requiere ocho niveles de acarreo almacenado. La segmentación permite tener varios productos en curso; aceptar uno en cada ciclo no significa que cada uno termine en un ciclo.

Para un resultado con signo reducido a n bits, cada bit de la mitad más significativa debe ser igual al bit de signo de la mitad menos significativa. −8 × −1 en cuatro bits da el producto completo 0000 1000. La mitad más significativa es cero, pero el bit de signo conservado es 1, por lo que +8 no cabe en el destino con signo.

Puntos clave

  • Las magnitudes sin signo conservan la magnitud del operando con signo más negativo.
  • Los productos con y sin signo comparten su mitad menos significativa, pero pueden tener mitades más significativas distintas.
  • Booth usa un bit adicional en el acumulador, decisiones sobre pares de bits y desplazamientos aritméticos a la derecha.
  • Las secuencias de bits 1 pueden sustituirse por dos operaciones de Booth; los patrones alternantes pueden no ahorrar trabajo.
  • Los árboles de acarreo almacenado reducen muchos productos parciales antes de una suma final con propagación de acarreo.
  • La segmentación separa la latencia del resultado de la frecuencia con que pueden comenzar nuevos productos.
  • Un producto con signo cabe en un destino estrecho cuando la mitad más significativa es la extensión de signo de la mitad menos significativa.

3.3 Divide enteros y trata los casos especiales

La división produce un cociente y un resto relacionados por

dividendo=cociente×divisor+resto.

Para un divisor sin signo distinto de cero, el resto es no negativo y menor que el divisor. Un dividendo y un divisor de n bits necesitan un cociente y un resto de n bits.

Produce el cociente un bit cada vez

Lee los bits del dividendo desde el extremo más significativo. Duplica el resto parcial, incorpora el siguiente bit y comprueba si el divisor cabe. Si cabe, réstalo y escribe el bit de cociente 1; en caso contrario, conserva el resto parcial y escribe 0.

Para 0111 dividido por 0010, los restos parciales tras incorporar cada bit son 0, 1, 3 y 3. Los dos primeros son menores que 2, por lo que sus bits de cociente son 0. Cada 3 permite una resta, que deja resto 1 y bit de cociente 1. El cociente es 0011 y el resto 0001: 3 × 2 + 1 = 7.

La división con restauración prueba primero la resta. Si el resultado de prueba es negativo, vuelve a sumar el divisor y escribe 0; en caso contrario, conserva el resultado y escribe 1. Detecta el fallo con un préstamo o una diferencia con signo de n + 1 bits. Una prueba del signo de n bits no es segura: 0 − 9 en cuatro bits vuelve al rango como 0111, cuyo bit más significativo es 0 a pesar del préstamo.

El hardware compacto coloca el dividendo en la mitad menos significativa de un registro de 2n bits y el resto parcial en la mitad más significativa. Lo desplaza a la izquierda en cada paso e inserta los bits del cociente por la derecha. Al terminar, la mitad más significativa contiene el resto y la menos significativa, el cociente.

La división sin restauración lleva adelante un resultado de prueba negativo y suma el divisor durante el paso siguiente en lugar de restaurar inmediatamente. Un resto parcial final negativo necesita una última suma de restauración. La división SRT selecciona varios bits del cociente por paso usando los bits iniciales del divisor y del resto; las entradas ausentes en una tabla de selección de este tipo causaron el error FDIV del Pentium de 1994. La división sigue dependiendo de cada resto parcial anterior.

Aplica la división con signo con truncamiento

Divide las magnitudes, cambia el signo del cociente si los signos difieren y da a un resto distinto de cero el signo del dividendo.

CálculoCocienteResto
−7 dividido por 2−3−1
7 dividido por −2−31
−7 dividido por −23−1

Estos resultados truncan el cociente hacia cero y conservan la identidad de la división. RISC-V, Java y C desde C99 usan esta regla. En cambio, // de Python redondea hacia abajo: -7 // 2 es −4 y -7 % 2 es 1.

Trata las entradas excepcionales

La división por cero en RISC-V devuelve un cociente con todos los bits activados y el dividendo original como resto. El caso de desbordamiento con signo, el valor más negativo dividido por −1, devuelve el valor más negativo como cociente y cero como resto. Ninguno de los dos casos genera una excepción síncrona. x86 genera una excepción de error de división en ambos. El software que debe informar de errores comprueba primero si el divisor es cero y también comprueba el par que produce desbordamiento con signo.

Un desplazamiento lógico a la derecha divide valores sin signo por potencias de dos, redondeando hacia abajo. Un desplazamiento aritmético también redondea hacia abajo los valores negativos: −5 desplazado una posición a la derecha se convierte en −3, mientras que la división con truncamiento por 2 da −2. Para implementar el truncamiento con un desplazamiento, suma 2k−1 a una entrada negativa antes de desplazar k posiciones a la derecha. Para −5 y k = 1, desplaza −4 para obtener −2.

Puntos clave

  • El cociente y el resto deben satisfacer la identidad de la división.
  • La división con restauración vuelve a sumar el divisor después de una resta de prueba fallida.
  • Se necesita un préstamo o un bit adicional de diferencia para comprobar con seguridad una resta de prueba sin signo.
  • La división con signo con truncamiento da a un resto distinto de cero el signo del dividendo.
  • RISC-V define resultados sin excepción síncrona para la división por cero y el desbordamiento del cociente con signo.
  • El desplazamiento aritmético a la derecha y la división con signo con truncamiento difieren para valores negativos con resto.
4

Representa números reales en coma flotante según IEEE 754

La coma flotante almacena un signo, una escala y un conjunto limitado de bits significativos. Decodifica esos campos para distinguir el rango de la precisión y después usa los patrones de exponente reservados para reconocer ceros, subnormales, infinitos y valores NaN. Los valores especiales forman parte del sistema aritmético: permiten que los resultados diminutos se aproximen gradualmente a cero y que las operaciones excepcionales devuelvan resultados definidos mientras registran indicadores de estado.

4.1 Codifica y decodifica formatos binarios de IEEE 754

Un valor binario normal en coma flotante tiene la forma

(−1)s×1,f×2e.

El significando es el valor completo 1,f; la fracción almacenada contiene solo f. La normalización garantiza el 1 inicial, por lo que omitir este bit oculto aporta un bit de precisión.

Interpreta los tres campos
FormatoBits de signoBits de exponenteBits de fracciónSesgoPrecisión
binary1615101511 bits
binary32182312724 bits
binary6411152102353 bits

IEEE 754-2019 define estos formatos. Precisión simple y doble suelen significar binary32 y binary64. El orden almacenado es signo, exponente, fracción. Para un valor normal, resta el sesgo del campo de exponente sin signo:

valor=(−1)S(1+Fraccioˊn)2E−Sesgo.

Fracción significa la fracción binaria después de la coma, no sus bits interpretados como un entero. En binary32, los campos de exponente del 1 al 254 codifican exponentes de −126 a 127. Los campos 0 y 255 tienen significados especiales.

Un sesgo hace que los exponentes mayores tengan campos sin signo mayores. Para números positivos finitos, el orden sin signo de los patrones completos sigue el orden numérico. Los valores negativos y los NaN requieren un tratamiento adicional.

Codifica y decodifica

Para codificar −0,75, escribe su magnitud como 0,112=1,12×2−1. El signo es 1 y el campo de exponente es −1 + 127 = 126, o 01111110. Elimina el 1 inicial oculto y rellena la fracción con ceros. Los campos son 1 01111110 10000000000000000000000, lo que da 0xBF400000. En binary64 el mismo valor es 0xBFE8000000000000.

Para decodificar 0x41460000, divídelo en 0 10000010 10001100000000000000000. El campo de exponente es 130, por lo que el exponente verdadero es 3. El significando es

1,1000112=1+12+132+164=1,546875.

Multiplicar por 8 da 12,375. Escribir el 1 oculto en la fracción almacenada cambiaría el valor; almacenar −1 directamente en el campo de exponente incumpliría la regla del sesgo.

Distingue el rango de la precisión

binary32 alcanza aproximadamente 3,40×1038, con un menor valor normal positivo de 2−126 y unos siete dígitos decimales significativos. binary64 alcanza aproximadamente 1,80×10308, con un menor valor normal positivo de 2−1022 y unos 15–16 dígitos significativos. binary16 tiene un máximo de 65 504, un menor valor normal positivo de 2−14, un menor valor subnormal positivo de 2−24 y unos 3,3 dígitos decimales significativos.

La precisión cuenta dígitos significativos, no dígitos después de la coma decimal. Por ejemplo, binary32 almacena 1 234 567,89 como 1 234 567,875.

Dentro del intervalo de binary32 desde 2e hasta 2e+1, los valores normales adyacentes están separados por 2e−23. Esta separación es una ulp, una unidad en la última posición. Justo por encima de 1 es 2−23, a menudo llamada épsilon de máquina. En 224 la separación pasa a ser 2, por lo que 16 777 217 no está representado aunque quepan números mucho mayores. Más bits de exponente amplían el rango de escala; más bits de fracción acercan los valores representables para una escala dada.

Puntos clave

  • Los formatos normales omiten de la fracción almacenada el 1 inicial garantizado.
  • Decodifica un exponente normal restando su sesgo.
  • binary16, binary32 y binary64 tienen una precisión de 11, 24 y 53 bits.
  • El rango y la precisión son límites distintos.
  • La separación entre números normales crece con el exponente.

4.2 Usa ceros, infinitos, valores NaN y números subnormales

Los patrones de exponente reservados permiten que IEEE 754 represente valores más allá de los números normalizados ordinarios. Clasifica siempre los campos antes de aplicar una fórmula de valor.

Reconoce los patrones reservados
Campo de exponenteCampo de fracciónSignificado
Todos los bits son ceroCeroCero con signo
Todos los bits son ceroDistinto de ceroSubnormal
Todos los bits son unoCeroInfinito con signo
Todos los bits son unoDistinto de ceroNaN

binary32 tiene +0 en 0x00000000 y −0 en 0x80000000. Se comparan como iguales, pero la división puede revelar el signo: 1 dividido por +0 da +∞, mientras que 1 dividido por −0 da −∞. Un resultado negativo diminuto que se redondea a cero se convierte en −0.

El infinito positivo es 0x7F800000; el mayor valor positivo finito es 0x7F7FFFFF. Con redondeo al más cercano, el desbordamiento aritmético devuelve un infinito con signo. Dividir un valor finito distinto de cero por cero también devuelve un infinito con signo, con un indicador de excepción diferente. Las operaciones posteriores gestionan el infinito de forma coherente: sumar 1 a +∞ deja +∞, multiplicarlo por −2 da −∞ y su inverso es +0.

Distingue NaN del infinito

Operaciones como cero dividido por cero, infinito menos sí mismo, cero por infinito y la raíz cuadrada real de −1 no tienen un resultado numérico significativo. Producen NaN, «valor no numérico», y señalan una operación inválida.

NaN es no ordenado: las comprobaciones de igualdad y de orden menor que o mayor que en las que interviene son falsas, mientras que la desigualdad es verdadera. En particular, x == NaN no puede detectar NaN. Usa isnan(x). Los NaN silenciosos normalmente se propagan por las operaciones aritméticas; los NaN señalizadores activan la excepción de operación inválida cuando se usan. En estos formatos binarios, el bit más significativo de la fracción distingue un NaN silencioso. El NaN silencioso canónico binary32 de RISC-V es 0x7FC00000.

Acércate gradualmente a cero

Un subnormal no tiene 1 oculto. Su exponente se fija en el menor exponente normal:

valor=(−1)S×0,f×21−Sesgo.

Para binary32, 0x00000001 es 2−149 y 0x00400000 es 2−127. Para binary64 el menor valor positivo es 2−1074. Usar el exponente menos el sesgo con un campo de exponente cero produciría un error de un factor de dos, incluso antes de añadir por error un 1 oculto.

Los subnormales proporcionan subdesbordamiento gradual: la precisión disminuye a medida que los valores se reducen, con una separación absoluta fija cerca de cero. Los valores finitos distintos en un formato siguen teniendo una diferencia representable distinta de cero. Los modos de reducción a cero eliminan esa protección y pueden acelerar el tratamiento de subnormales en algunos procesadores.

Interpreta los indicadores de excepción

IEEE 754 define operación inválida, división por cero, desbordamiento, subdesbordamiento y resultado inexacto. El tratamiento predeterminado devuelve un resultado y registra el estado; no tiene por qué detener la ejecución. Resultado inexacto significa que el resultado redondeado difiere del resultado exacto.

Con el tratamiento predeterminado, el subdesbordamiento requiere tanto un resultado diminuto como inexactitud. En binary32, 2−126/2=2−127 es un subnormal exacto y no activa el subdesbordamiento. RISC-V registra NV, DZ, OF, UF y NX en fflags dentro de fcsr, y las excepciones de coma flotante no provocan excepciones síncronas aritméticas. Un infinito devuelto por sí solo no indica si se produjo desbordamiento o división por cero; examina el indicador.

Puntos clave

  • Clasifica los campos de exponente reservados antes de decodificar un valor normal.
  • Los ceros con signo se comparan como iguales, pero pueden producir infinitos de distinto signo.
  • NaN es no ordenado y debe detectarse con una prueba de NaN.
  • Los subnormales usan un 0 inicial y un exponente de uno menos el sesgo.
  • El subdesbordamiento gradual conserva pequeñas diferencias que la reducción a cero puede borrar.
  • Un subnormal exacto no activa el indicador de subdesbordamiento.
5

Calcula y redondea con números en coma flotante

El hardware de coma flotante debe desplazar y combinar bits significativos antes de poder redondear la respuesta. Trabaja la alineación, la normalización y el redondeo, y después relaciona esos pasos con fallos de precisión conocidos. Los bits adicionales de redondeo distinguen un empate de un valor apenas superior, y la multiplicación y suma fusionadas conservan información que dos operaciones separadas pueden perder. Los mismos límites explican cambios en las sumas, contadores que se detienen y conversiones arriesgadas.

5.1 Suma y multiplica números en coma flotante

La aritmética en coma flotante trabaja con significandos y exponentes por separado. El resultado final debe ser el de la operación exacta redondeado al formato de destino, por lo que el movimiento intermedio de bits debe conservar suficiente información para esa última decisión.

Suma con un exponente compartido

La suma sigue cuatro etapas: alinear, operar, normalizar y redondear. Compara los exponentes y desplaza el significando del operando menor a la derecha tantas posiciones como indique su diferencia. Suma las magnitudes si los signos son iguales; réstalas si los signos son opuestos. Desplaza el resultado a la forma normalizada y ajusta su exponente. Después redondea y vuelve a normalizar si el redondeo crea un acarreo.

Usa significandos de cuatro bits para ver 0,5 + (−0,4375):

  1. Escribe los operandos como 1,0002×2−1 y −1,1102×2−2.
  2. Alinea el segundo a −0,1112×2−1.
  3. Resta las magnitudes: 1,0002−0,1112=0,0012.
  4. Normaliza a 1,0002×2−4, o 0,0625. No se perdió ningún bit distinto de cero, por lo que no hace falta cambiar el resultado mediante redondeo.

La cancelación puede requerir un desplazamiento de normalización grande a la izquierda. El hardware usa un restador de exponentes, un desplazador de alineación, un sumador de significandos, un contador de ceros iniciales y lógica de normalización y redondeo. Los sumadores de coma flotante suelen estar segmentados a lo largo de varios ciclos.

Un modelo decimal muestra por qué importan los dígitos adicionales: con cuatro dígitos significativos, 99,99 + 0,161 se alinea como 9,999+0,01610 a escala 101. El resultado intermedio exacto es 10,01510 a esa escala. Normaliza a 1,00151×102 y redondea a 1,002×102. Recortar demasiado pronto el sumando alineado perdería información necesaria para elegir 100,2.

Multiplica escalas y significandos

Multiplica los significandos, suma los exponentes verdaderos y aplica XOR a los signos. Con campos sesgados, resta el sesgo una vez:

Eresult=Ea+Eb−Sesgo

antes de los ajustes de normalización. Dos significandos normales se multiplican para dar un valor desde 1 hasta 4, por lo que su producto necesita como máximo un desplazamiento de normalización a la derecha. El redondeo puede requerir otro ajuste; también hay que comprobar los límites del exponente.

Para 0,5 × (−0,4375), los campos de exponente de binary32 dan 126 + 125 − 127 = 124, o un exponente verdadero de −3. El producto de los significandos es 1,0002×1,1102=1,1102. El XOR de los signos es 1, lo que da −1,1102×2−3=−0,21875.

Redondea una vez con multiplicación y suma fusionadas

FMA calcula a × b + c con un redondeo después de la expresión completa. La multiplicación y la suma separadas redondean dos veces. En binary32, toma a=1+2−23, b=1−2−23 y c = −1. Su producto exacto es 1−2−46. Una multiplicación separada lo redondea a 1, por lo que la suma devuelve cero. FMA conserva la pequeña diferencia del producto y devuelve −2−46.

F de RISC-V proporciona 32 registros de coma flotante, de f0 a f31; D amplía el mismo banco para precisión doble. flw/fsw y fld/fsd transfieren valores. Las operaciones aritméticas incluyen fadd.s, fmul.s, fdiv.s y fsqrt.s, con formas .d para precisión doble. fmadd.s calcula una multiplicación y suma fusionadas. Las comparaciones como flt.s escriben 0 o 1 en un registro de enteros, y fcvt convierte formatos o valores enteros.

Puntos clave

  • La suma alinea los exponentes antes de combinar los significandos.
  • La normalización cambia tanto la posición del significando como el exponente.
  • Multiplicar campos de exponente con sesgo requiere restar un sesgo.
  • El redondeo puede requerir una segunda normalización.
  • FMA redondea una vez el producto y la suma completos.
  • Las operaciones aritméticas F y D de RISC-V usan un banco de registros de coma flotante; las comparaciones devuelven valores de verdad enteros.

5.2 Redondea los resultados correctamente

Un formato finito no puede almacenar todos los resultados exactos. El redondeo correcto consiste en elegir el resultado representable requerido por la dirección de redondeo, como si la operación se hubiera calculado primero de forma exacta. La aritmética básica, la raíz cuadrada y FMA obedecen esta regla. Los bits de información y de signo de NaN no tienen por qué ser idénticos entre procesadores.

Elige una dirección de redondeo
DirecciónRegla
roundTiesToEvenValor más cercano; un empate exacto elige un último bit de significando igual a 0
roundTowardPositiveHacia +∞
roundTowardNegativeHacia −∞
roundTowardZeroHacia cero
roundTiesToAwayValor más cercano; un empate exacto se aleja de cero

Las primeras cuatro son obligatorias para implementaciones binarias; el desempate al par es el predeterminado. El desempate alejándose de cero es obligatorio para formatos decimales, y RISC-V también lo proporciona para operaciones binarias. Sus nombres son RNE, RUP, RDN, RTZ y RMM; una instrucción puede seleccionar un modo directamente o usar el modo dinámico de fcsr.

Con desempate al par al redondear a enteros, 2,5 se convierte en 2 y 3,5 en 4. En binario con significandos de cuatro bits, 1,00112 se redondea a 1,0102 y 1,01012 también se redondea a 1,0102. El bit par pertenece al significando conservado, no al exponente ni a un dígito decimal mostrado.

Conserva la información de guarda, redondeo y adherente

Después de normalizar, conserva dos bits adicionales tras el significando de destino: guarda y redondeo. El bit adherente es la operación OR de cada bit posterior descartado. Registra si toda esa parte restante es cero.

Para redondear al más cercano, guarda 0 significa por debajo de la mitad. Guarda 1 con redondeo o adherente 1 significa por encima de la mitad. Guarda 1 con ambos indicadores posteriores a 0 significa un empate exacto. En un empate, incrementa el significando conservado solo si su bit menos significativo actual es 1.

Para una suma de 8 + 0,5625 con significandos de cuatro bits, la alineación da

1,00010012×23.

Conserva 1.000; guarda es 1, redondeo es 0 y adherente es 1 porque la parte restante contiene un 1. El valor está por encima de la mitad, por lo que se incrementa a 1,0012×23=9. Descartar el bit adherente convertiría esto falsamente en un empate y elegiría 8.

Un bit adherente informa sobre todos los bits perdidos, no simplemente sobre el tercer bit después de la parte conservada. Durante el desplazamiento, una vez que cualquier bit perdido es 1, el estado adherente permanece en 1 para esa parte acumulada.

Interpreta el error y el desbordamiento

Para resultados finitos dentro del rango, el redondeo al más cercano tiene un error absoluto de como máximo media ulp; el redondeo dirigido tiene un error inferior a una ulp. Para resultados normales binary32, el límite relativo habitual del redondeo al más cercano es 2−24; para binary64 es 2−53. Los resultados subnormales requieren razonar con el error absoluto porque su precisión relativa disminuye.

La dirección de redondeo también controla los resultados del desbordamiento. Un desbordamiento positivo da +∞ con redondeo al más cercano o hacia positivo, pero el mayor valor positivo finito con redondeo hacia cero o hacia negativo. El desbordamiento negativo produce el comportamiento simétrico.

Las conversiones a enteros tienen sus propias reglas. En C, las conversiones representables como (int)2.7 y (int)-2.7 truncan a 2 y −2, independientemente de la dirección de redondeo actual de coma flotante. Comprueba tanto el rango del destino como la parte fraccionaria descartada.

Puntos clave

  • El redondeo correcto elige el valor de destino a partir del resultado exacto y la dirección de redondeo.
  • Un empate exacto al redondear al más cercano elige el vecino cuyo bit menos significativo conservado es 0.
  • Guarda y redondeo conservan dos bits adicionales; el bit adherente registra cualquier parte posterior distinta de cero.
  • Un bit adherente distinto de cero puede distinguir un resultado superior a la mitad de un empate.
  • La dirección de redondeo controla si el desbordamiento devuelve infinito o un extremo finito.

5.3 Predice y evita errores de precisión

Los errores de coma flotante suelen derivarse directamente de una separación finita entre valores. Distingue el error ya presente en los operandos almacenados del redondeo realizado por una operación y de la información perdida durante la conversión.

Identifica el error de representación

Una fracción irreducible tiene un desarrollo binario finito exactamente cuando su denominador es una potencia de dos. Valores como 0,5, 0,25 y 0,375 son exactos. El desarrollo de 0,1 se repite, por lo que binary32 almacena 0x3DCCCCCD, aproximadamente 0,10000000149011612. binary64 también almacena una aproximación.

En consecuencia, 0.1 + 0.2 en binary64 produce 0,30000000000000004, diferente del valor almacenado más cercano a 0,3. Un resultado mostrado breve como 0.1 puede ser el decimal más corto que se convierte de nuevo a los mismos bits almacenados; no demuestra que sea exacto.

Para resultados finitos aproximados, usa una tolerancia elegida para el problema, por ejemplo

∣a−b∣≤max⁡(atol,rtolmax⁡(∣a∣,∣b∣)).

La tolerancia absoluta trata los valores cercanos a cero; la tolerancia relativa se ajusta a la magnitud. Las tolerancias deben reflejar el cálculo y el error aceptable, no solo el número de dígitos mostrados.

Observa cómo una suma pierde una entrada pequeña

La absorción ocurre con redondeo al más cercano cuando un sumando pequeño no puede desplazar un operando grande hasta su siguiente vecino representable. En binary32, 16 777 216 + 1 se redondea de nuevo a 16 777 216: los valores vecinos están separados por dos y este empate selecciona el significando par. Por tanto, un contador float que suma 1 puede dejar de avanzar.

Cambiar el orden de la suma puede cambiar la respuesta. Con binary32 x = −1,5 × 10³⁸, y = 1,5 × 10³⁸ y z = 1, (x + y) + z da 1. Pero y + z se redondea a y, por lo que x + (y + z) da cero. La suma no es asociativa. Las reducciones paralelas pueden cambiar su agrupación cuando cambia el número de hilos, lo que afecta a los bits finales.

El redondeo repetido también se acumula: sumar 0,1 en binary32 diez millones de veces a un total binary32 da 1 087 937 en lugar de 1 000 000. Un acumulador más ancho reduce la pérdida por redondeo. Sumar primero las magnitudes menores también puede conservar contribuciones que un total acumulado grande absorbería.

Distingue la cancelación de una resta inexacta

La cancelación elimina dígitos iniciales compartidos por operandos casi iguales. La resta en sí puede ser exacta mientras que los errores anteriores de los operandos pasan a ser grandes en relación con la respuesta pequeña. En binary32, 1,0000001 se almacena como 1+2−23. Restar 1 da aproximadamente 1,1920929×10−7 en lugar de 1,0×10−7, un error relativo de aproximadamente 19 %.

Comprueba las conversiones y la elección de formato

binary64 representa exactamente todos los enteros de 32 bits. binary32 no: 16 777 217 se redondea a 16 777 216 con desempate al par. Por encima de 253, binary64 también deja de representar algunos enteros. Convertir un valor en coma flotante a un tipo entero más pequeño puede superar por completo su rango.

En el primer vuelo del Ariane 5 en 1996, una conversión fuera de rango de coma flotante de 64 bits a entero con signo de 16 bits apagó los sistemas de referencia inercial y contribuyó a la pérdida del cohete. En el fallo del Patriot de 1991 en Dhahran, una aproximación truncada de 0,1 en punto fijo acumuló unos 0,34 s de error de tiempo tras unas 100 horas, lo que desplazó la ventana de seguimiento unos 687 m. Fue un error de representación en punto fijo, no una operación de coma flotante de IEEE.

Elige binary64 para una mayor precisión de uso general, binary32 cuando su menor uso de memoria se adapte a la tarea y binary16 o bfloat16 para cargas de trabajo adecuadas de baja precisión. bfloat16 tiene ocho bits de exponente y siete bits de fracción. Las cantidades monetarias exactas deben expresarse en unidades monetarias mínimas enteras o en un tipo decimal.

Puntos clave

  • Una fracción binaria finita requiere un denominador que sea potencia de dos después de reducirla.
  • Una salida decimal corta puede ocultar un error de representación.
  • La absorción y el redondeo repetido pueden cambiar sumas y detener contadores en coma flotante.
  • La suma en coma flotante no es asociativa, por lo que la agrupación afecta a la reproducibilidad.
  • La cancelación expone el error anterior de los operandos en relación con una diferencia pequeña.
  • Las conversiones necesitan comprobaciones tanto de precisión como de rango.
  • La elección del formato depende de la precisión, el rango y el coste de almacenamiento requeridos.

Ejemplos de Aritmética de computadores

5 Lecciones Interactivas

1

Sigue un sumador y evalúa su resultado

12 pasos
Sigue la suma y la resta en un sumador de 8 bits y después distingue las señales usadas para comprobar los rangos con y sin signo.
  1. 1
    IntroducciónPrimero los bits, después la interpretación

    Un sumador de 8 bits conserva ocho bits de suma y produce un acarreo de salida. Los mismos bits de suma pueden representar un valor sin signo o un valor con signo en complemento a dos. Que sean iguales al resultado previsto depende de esa interpretación.

    Empieza con 58 + 27. Ambos valores caben en cualquiera de las dos interpretaciones, por lo que puedes seguir primero el circuito y plantear después las preguntas sobre el rango.

  2. 2
    ExplicaciónUna posición combina tres bits

    Un sumador completo combina dos bits de entrada y el acarreo de entrada. Su suma es la operación XOR de ellos. Su acarreo de salida es 1 cuando al menos dos de las tres entradas son 1.

    En un sumador de propagación, ese acarreo de salida se convierte en el acarreo de entrada de la posición siguiente. Solo la posición menos significativa recibe directamente el acarreo inicial. Para una suma ordinaria, el acarreo inicial es cero.

  3. 3
    EjemploTrabaja las columnas menos significativas

    Escribe 58 como 0011 1010 y 27 como 0001 1011. Comenzando por la derecha, el bit 0 suma 0 y 1 con acarreo 0, lo que da suma 1 y acarreo 0.

    El bit 1 suma 1 y 1, lo que da suma 0 y acarreo 1. El bit 2 suma entonces 0 y 0 con ese acarreo, lo que da suma 1 y acarreo 0. El acarreo debe incluirse donde llega, incluso cuando ambos bits de los operandos son cero.

  4. 4
    EjemploTermina la suma

    Continúa por las posiciones más significativas. El bit 3 suma dos bits 1, lo que produce suma 0 y acarreo 1. El bit 4 combina dos bits 1 con ese acarreo, lo que produce suma 1 y acarreo 1. El bit 5 combina 1, 0 y 1, lo que produce suma 0 y acarreo 1. El bit 6 recibe ese acarreo y produce 1.

    El resultado completo es 0101 0101, o 85. El acarreo final es 0 y el resultado con signo sigue siendo positivo.

  5. 5
    DesafíoElige la extensión

    Debe sumarse un operando con signo de 4 bits 1011 a un operando de 8 bits. ¿Qué patrón de 8 bits conserva su valor y qué haría la extensión con ceros?

    ---reveal---

    La extensión de signo da 1111 1011, que sigue siendo −5. La extensión con ceros da 0000 1011, o +11, y cambia la entrada antes de la suma. La extensión sigue la interpretación del operando, no la anchura del otro operando.

  6. 6
    EjemploReutiliza el sumador para restar

    Ahora calcula 58 − 27. Invierte 0001 1011 para obtener 1110 0100 y fija el acarreo inicial en 1. Suma 0011 1010 + 1110 0100 + 1 para obtener 0001 1111, con acarreo de salida 1.

    El resultado es 31. Para esta resta sin signo, un acarreo de salida de 1 significa que no hay préstamo. Invertir el segundo operando sin el 1 inicial produciría en cambio 30.

  7. 7
    Idea claveEl acarreo y el desbordamiento responden a preguntas distintas

    El acarreo de salida indica si una suma sin signo superó los bits disponibles. El desbordamiento con signo comprueba el rango con signo: los sumandos del mismo signo no deben producir un resultado de signo opuesto.

    El hardware calcula el desbordamiento con signo aplicando XOR al acarreo de entrada y al de salida del bit de signo. Puede haber acarreo sin desbordamiento con signo, desbordamiento con signo sin acarreo, ambos o ninguno.

  8. 8
    EjemploUna suma válida sin signo puede fallar con signo

    Suma 90 y 60 en 8 bits. El resultado es 1001 0110, con acarreo de salida 0. El valor sin signo 150 cabe en el rango de 0 a 255.

    Ambas entradas con signo son positivas, pero la interpretación con signo almacenada es −106. Por tanto, el desbordamiento con signo es 1. El patrón almacenado sigue siendo los ocho bits menos significativos de 150; es el rango del destino con signo el que no puede contener el resultado exacto.

  9. 9
    DesafíoInterpreta ambas señales

    Un sumador de 8 bits suma 1111 0110 y 0001 0100, y produce 0000 1010 con acarreo de salida 1. ¿Qué indican las interpretaciones sin signo y con signo?

    ---reveal---

    Sin signo, 246 + 20 = 266 se desborda y almacena 10. Con signo, −10 + 20 = 10 cabe, por lo que el desbordamiento con signo es 0. Una suma de signos opuestos no puede desbordar el rango con signo, aunque este cálculo de bits tenga un acarreo de salida.

  10. 10
    ConexiónEl programa decide cómo responder

    add de RISC-V devuelve los bits menos significativos sin indicadores ni excepción síncrona por desbordamiento. Una comprobación sin signo puede comparar la suma con una entrada; un resultado menor indica que se ha vuelto al extremo del rango. La comprobación con signo debe usar en cambio relaciones con signo.

    Las reglas del lenguaje también importan. La suma sin signo de C vuelve al extremo del rango, mientras que el desbordamiento con signo es indefinido. La suma de enteros de Java vuelve al extremo del rango y los enteros de Python crecen. Seguir correctamente los bits por sí solo no determina el comportamiento a nivel del lenguaje.

  11. 11
    DesafíoRelaciona la resta con el rango con signo

    Una ALU de 8 bits calcula 100 − (−35). ¿Qué valor almacenado con signo resulta y qué interpretación necesita un aviso de desbordamiento?

    ---reveal---

    El resultado exacto con signo es 135, cuyos ocho bits menos significativos son 1000 0111, interpretados como −121. La resta con signo se desborda porque las entradas tienen signos distintos y el signo del resultado difiere del de 100. Interpretar el segundo patrón como el valor sin signo 221 da en cambio 100 − 221, que necesita un préstamo sin signo.

  12. 12
    RepasoElige una comprobación de rango después de seguir los bits

    La suma y la resta comparten sumadores completos; la inversión y el acarreo inicial seleccionan la resta. Extiende cada entrada según su significado antes de operar.

    Después, comprueba el acarreo o el préstamo para valores sin signo y el desbordamiento para valores con signo. Aplica entonces las reglas del procesador y del lenguaje. La aritmética de saturación toma otra decisión: limita un resultado fuera de rango a un extremo en lugar de conservar los bits menos significativos tras volver al rango.

2

Construye una ALU que compare correctamente

14 pasos
Selecciona resultados aritméticos y lógicos, corrige la comparación menor que con signo tras un desbordamiento y acorta el camino de acarreo.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónVarios resultados, una salida seleccionada
  2. 2
    ExplicaciónRepite una sección de un bit
  3. 3
    EjemploDecodifica los controles de un diseño
  4. 4
    DesafíoConstruye NOR con las mismas puertas
  5. 5
    ConexiónDesplaza las distancias seleccionadas
  6. 6
    ExplicaciónReduce el resultado a Zero
  7. 7
    EjemploObserva un signo engañoso de la diferencia
  8. 8
    DesafíoInterpreta los mismos patrones de dos formas
  9. 9
    ExplicaciónDescribe un acarreo antes de que llegue
  10. 10
    EjemploPredice el acarreo final de un bloque
  11. 11
    DesafíoUn acarreo generado encuentra una parada
  12. 12
    Idea claveUsa puertas para acortar la espera
  13. 13
    DesafíoMantén correcta la comparación con un sumador más rápido
  14. 14
    RepasoSepara selección, interpretación y velocidad
3

Sigue un producto y un cociente a través del hardware

18 pasos
Sigue la multiplicación sin signo, la recodificación de Booth y la división con restauración, y después aplica las reglas de signo y las comprobaciones de anchura.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónLos productos combinan filas; los cocientes se construyen mediante decisiones
  2. 2
    EjemploElige productos parciales para 9 por 6
  3. 3
    EjemploCompleta las contribuciones seleccionadas
  4. 4
    Idea claveConserva el acarreo del multiplicador compacto
  5. 5
    DesafíoComprueba un producto sin signo en un destino estrecho
  6. 6
    ExplicaciónConserva la magnitud con signo en bits sin signo
  7. 7
    ExplicaciónPrepara el registro de Booth
  8. 8
    EjemploEjecuta los dos primeros pasos de Booth
  9. 9
    EjemploTermina el producto con signo
  10. 10
    DesafíoComprueba si el producto con signo cabe tras multiplicar
  11. 11
    ConexiónComprime filas en lugar de terminar cada suma
  12. 12
    EjemploIncorpora los primeros bits del dividendo
  13. 13
    EjemploCompleta el cociente y el resto
  14. 14
    DesafíoAplica la regla del resto con signo
  15. 15
    ConsejoUsa el préstamo para la resta de prueba
  16. 16
    DesafíoRelaciona un atajo de división con la multiplicación
  17. 17
    ConexiónInterpreta los resultados excepcionales de RISC-V
  18. 18
    RepasoComprueba el invariante y el destino
4

Decodifica los bits de coma flotante antes de operar

12 pasos
Codifica un valor normal, relaciona la separación con la precisión y clasifica ceros, subnormales, infinitos y valores NaN.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónUna escala y un conjunto limitado de dígitos
  2. 2
    EjemploNormaliza la magnitud
  3. 3
    EjemploSuma el sesgo y reúne los campos
  4. 4
    DesafíoDecodifica un nuevo valor normal
  5. 5
    ExplicaciónEl rango no garantiza el detalle de los enteros
  6. 6
    ExplicaciónClasifica primero los exponentes reservados
  7. 7
    EjemploDecodifica un subnormal sin un 1 oculto
  8. 8
    Idea claveUn resultado diminuto exacto no necesita el indicador de subdesbordamiento
  9. 9
    DesafíoDistingue el infinito de un resultado inválido
  10. 10
    ConsejoComprueba NaN sin usar la igualdad
  11. 11
    DesafíoRelaciona la codificación con el subdesbordamiento gradual
  12. 12
    RepasoInterpreta los campos antes de evaluar un valor
5

Alinea, redondea y explica la pérdida de precisión

18 pasos
Sigue operaciones en coma flotante, usa la información de guarda, redondeo y adherente, y predice errores de absorción, cancelación y conversión.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónConserva la información hasta la decisión de redondeo
  2. 2
    EjemploAlinea una suma
  3. 3
    EjemploNormaliza antes de elegir el vecino
  4. 4
    ExplicaciónMultiplica con una corrección del sesgo
  5. 5
    DesafíoCorrige un cálculo del exponente
  6. 6
    ExplicaciónUn bit conservado par resuelve un empate
  7. 7
    EjemploSigue los bits de guarda, redondeo y adherente
  8. 8
    DesafíoDistingue un empate de un valor cercano
  9. 9
    ConexiónLa dirección de redondeo cambia los resultados negativos
  10. 10
    Idea claveFMA conserva un producto hasta después de la suma
  11. 11
    ExplicaciónUna entrada decimal puede llegar ya redondeada
  12. 12
    EjemploUn contador alcanza una barrera de separación
  13. 13
    DesafíoPredice el efecto de una agrupación distinta
  14. 14
    Idea claveUna resta exacta puede revelar un error anterior
  15. 15
    ConsejoElige una tolerancia que funcione cerca de cero
  16. 16
    DesafíoComprueba una conversión de ida y vuelta de un entero
  17. 17
    DesafíoCombina alineación, bit adherente y absorción
  18. 18
    RepasoLocaliza la pérdida de información

Ejercicios de Aritmética de computadores

60 Preguntas de Práctica en 6 sets

Set 1: Redes de acarreo y formación de productos10 Preguntas de Práctica

Pregunta 1 de 10

Con propagación mediante OR, ¿cuáles son la generación y la propagación para los bits de operandos 1 y 1?
  1. Generación 1, propagación 0
  2. Generación 1, propagación 1
  3. Generación 0, propagación 1
  4. Generación 0, propagación 0
Mostrar respuestaOcultar respuesta
Respuesta: B
La generación es AND de los operandos, por lo que es 1, y este diseño define la propagación como OR de los operandos, también 1. Una propagación 0 correspondería a una convención de propagación mediante XOR; ambas convenciones pueden permitir una lógica de acarreo correcta, pero la pregunta especifica la versión OR.

Pregunta 2 de 10

¿Cuántos bits puede requerir el producto completo sin signo de un operando de 7 bits y otro de 9 bits?
  1. 9 bits
  2. 15 bits
  3. 18 bits
  4. 16 bits
Mostrar respuestaOcultar respuesta
Respuesta: D
El producto completo puede requerir la suma de las anchuras de los operandos, por lo que 7 + 9 = 16 bits. Usar solo los nueve bits del operando más ancho descarta bits potencialmente significativos del producto; la multiplicación puede aumentar la anchura más allá de ambas entradas aunque cada una quepa por separado.

Pregunta 3 de 10

¿Qué producto completo de 8 bits y qué resultado conservado de los 4 bits menos significativos se obtienen de 11 × 3 sin signo?
  1. Completo 0010 0001; inferior 0001
  2. Completo 0001 0001; inferior 0001
  3. Completo 0010 0001; inferior 0010
  4. Completo 0001 1110; inferior 1110
Mostrar respuestaOcultar respuesta
Respuesta: A
El producto exacto es 33, codificado como 0010 0001; conservar cuatro bits deja 0001, o 1. La mitad más significativa 0010 no es el resultado conservado y su valor distinto de cero demuestra que reducir la anchura pierde información, aunque el patrón menos significativo parezca un entero pequeño válido.

Pregunta 4 de 10

Un bloque de 4 bits tiene generación de grupo 0 y propagación de grupo 1. ¿Qué acarreo de salida resulta para un acarreo de entrada 0 y para uno de entrada 1?
  1. 1 con entrada 0; 1 con entrada 1
  2. 0 con entrada 0; 0 con entrada 1
  3. 0 con entrada 0; 1 con entrada 1
  4. 1 con entrada 0; 0 con entrada 1
Mostrar respuestaOcultar respuesta
Respuesta: C
El acarreo del bloque es G OR (P AND acarreo de entrada), por lo que con G = 0 y P = 1 es igual al acarreo de entrada. Una salida siempre igual a 1 requeriría que el bloque generara un acarreo; la propagación por sí sola no puede crear un acarreo a partir de una entrada cero.

Pregunta 5 de 10

¿Qué hace una etapa de acarreo almacenado con tres palabras de productos parciales?
  1. Produce una palabra con una cadena de acarreo completa
  2. Produce dos palabras tras una cadena de acarreo completa
  3. Produce tres palabras sin una cadena de acarreo completa
  4. Produce dos palabras sin una cadena de acarreo completa
Mostrar respuestaOcultar respuesta
Respuesta: D
Una etapa de acarreo almacenado conserva el total en una palabra de suma y una palabra de acarreo, reduciendo tres filas a dos sin propagar el acarreo por toda la anchura. No termina una única suma ordinaria; un sumador posterior con propagación de acarreo combina las dos últimas palabras después de comprimir las filas.

Pregunta 6 de 10

En una comprobación de límites de 32 bits, el índice es −2 y la longitud no negativa dentro del rango con signo es 20. ¿Qué indica una comparación sin signo de índice ≥ longitud?
  1. Falso, por lo que se acepta el índice
  2. Verdadero, por lo que se rechaza el índice
  3. Verdadero, porque −2 con signo supera 20
  4. Falso, porque −2 se limita a cero
Mostrar respuestaOcultar respuesta
Respuesta: B
Reinterpretar −2 sin signo da 4 294 967 294, que supera 20, por lo que la comprobación lo rechaza. La comparación no limita los valores negativos a cero; interpreta sus patrones en complemento a dos como valores positivos grandes sin signo, y por eso funciona esta comprobación combinada de límites.

Pregunta 7 de 10

Una rutina RV32 necesita el producto completo de un operando sin signo por otro operando sin signo. ¿Qué resultados debe combinar?
  1. mulh como mitad superior y mul como mitad inferior
  2. mul como mitad superior y mulhu como mitad inferior
  3. mulhu como mitad superior y mul como mitad inferior
  4. mulhsu como mitad superior y mulh como mitad inferior
Mostrar respuestaOcultar respuesta
Respuesta: C
Ambos operandos son sin signo, por lo que mulhu proporciona los 32 bits más significativos y mul proporciona los 32 bits menos significativos. mulh interpretaría ambos operandos con signo y puede dar una mitad más significativa distinta cuando un bit más significativo está activado; la instrucción de la mitad menos significativa por sí sola no puede recuperar el producto completo de 64 bits.

Pregunta 8 de 10

Un bloque de anticipación de 4 bits con propagación mediante OR suma a = 1001 y b = 0111 con acarreo inicial 0. ¿Cuáles son la generación de grupo, la propagación de grupo y el acarreo final?
  1. G = 1, P = 1, acarreo = 1
  2. G = 0, P = 1, acarreo = 0
  3. G = 1, P = 0, acarreo = 1
  4. G = 0, P = 1, acarreo = 1
Mostrar respuestaOcultar respuesta
Respuesta: A
El bit 0 genera un acarreo y cada posición tiene al menos una entrada a 1, por lo que el acarreo se propaga por el bloque. Así, G y P son ambos 1 y el acarreo final es 1; fijar G en 0 pasaría por alto el acarreo creado dentro del bloque en lugar de suministrado en su entrada.

Pregunta 9 de 10

Un multiplicador de 4 bits recibe los patrones 1110 y 0011. ¿Qué mitades más significativas resultan para la multiplicación con y sin signo, y cabe alguno de los productos en su rango correspondiente de 4 bits?
  1. Con signo superior 1111, no cabe; sin signo superior 0010, cabe
  2. Con signo superior 1111, cabe; sin signo superior 0010, no cabe
  3. Con signo superior 0000, cabe; sin signo superior 0010, no cabe
  4. Con signo superior 1111, cabe; sin signo superior 0000, cabe
Mostrar respuestaOcultar respuesta
Respuesta: B
Con signo, −2 × 3 es −6, patrón completo 1111 1010, cuya mitad más significativa extiende el signo de la mitad menos significativa y cabe. Sin signo, 14 × 3 es 42, 0010 1010, cuya mitad más significativa es distinta de cero; ambas mitades menos significativas coinciden, pero sus distintas comprobaciones de rango impiden tratarlas como si pudieran reducirse por igual.

Pregunta 10 de 10

Una resta con signo que se desborda tiene el bit de signo almacenado 0. ¿Qué resultado de menor que con signo debe producir la ALU?
  1. 0
  2. El bit de acarreo de salida
  3. La salida Zero
  4. 1
Mostrar respuestaOcultar respuesta
Respuesta: D
La decisión corregida es signo XOR desbordamiento, aquí 0 XOR 1 = 1, por lo que el primer operando con signo es menor. Interpretar solo el signo almacenado devolvería 0; el desbordamiento significa que el signo tras volver al rango está invertido respecto de la diferencia matemática verdadera, por lo que es necesaria la corrección.
Set 2: Sumas y restas de enteros y decisiones de la ALU10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un sumador completo recibe los bits de operandos 1 y 0 con acarreo de entrada 1. ¿Qué bit de suma y acarreo de salida produce?
  1. Suma 1, acarreo 0
  2. Suma 1, acarreo 1
  3. Suma 0, acarreo 1
  4. Suma 0, acarreo 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un restador de 8 bits invierte el segundo operando, pero deja accidentalmente el acarreo de entrada inicial en 0. ¿Qué resultado con signo produce para 42 − 17?
  1. 24
  2. 25
  3. 26
  4. −25
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Cuáles son el acarreo de salida y el desbordamiento con signo para la suma de 8 bits 118 + 19?
  1. Acarreo 1, desbordamiento 0
  2. Acarreo 0, desbordamiento 0
  3. Acarreo 1, desbordamiento 1
  4. Acarreo 0, desbordamiento 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué componente de la ALU selecciona un resultado entre las salidas candidatas de AND, OR y el sumador?
  1. La cadena de acarreo
  2. El multiplexor de salida
  3. El circuito de extensión de signo
  4. El registro de operandos
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué patrón de 8 bits conserva el valor del operando con signo de 4 bits 1101?
  1. 0000 1101
  2. 1111 1101
  3. 1000 1101
  4. 0000 0011
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Para las entradas de 4 bits a = 0101 y b = 1010, ¿qué resultados de anchura completa producen slt con signo y sltu sin signo?
  1. slt: 0001; sltu: 0000
  2. slt: 0001; sltu: 0001
  3. slt: 0000; sltu: 0000
  4. slt: 0000; sltu: 0001
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué devuelve la suma de saturación sin signo de 8 bits para 220 + 70?
  1. 255
  2. 34
  3. 254
  4. 290
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un desplazador de barril de 64 bits usa etapas de desplazamiento por potencias de dos. ¿Qué etapas se seleccionan para un desplazamiento de 37?
  1. 32, 4 y 2
  2. 16, 8, 4 y 1
  3. 32, 4 y 1
  4. 32, 8 y 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una rutina de 8 bits con vuelta al extremo del rango calcula (115 + 29) − 40 y después usa el resultado final con signo. ¿Qué resultado obtiene y qué desbordamientos se producen?
  1. 104; ambas operaciones se desbordan con signo
  2. 104; solo la suma se desborda con signo
  3. −152; solo la resta se desborda con signo
  4. −112; ninguna operación se desborda con signo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una ALU de 8 bits resta dos patrones idénticos 1001 0110. ¿Cuáles son su resultado y su salida Zero?
  1. Resultado 0000 0000, Zero 0
  2. Resultado 1111 1111, Zero 0
  3. Resultado 0000 0000, Zero 1
  4. Resultado 0000 0001, Zero 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Productos con signo, división y atajos aritméticos10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué valor determina el signo de un resto distinto de cero en la división con signo con truncamiento?
  1. El divisor
  2. El cociente
  3. El operando de menor magnitud
  4. El dividendo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué cociente y resto produce la división con signo de RISC-V para 23 dividido por −6?
  1. Cociente −4, resto −1
  2. Cociente −3, resto 5
  3. Cociente −3, resto −5
  4. Cociente 3, resto 5
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

En un paso de Booth, A = 0, el multiplicando es −7 y el par de bits menos significativos es 10. ¿Qué valor debe tener el acumulador antes de desplazar?
  1. −7
  2. 0
  3. +7
  4. −1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

La suma de la mitad más significativa de un multiplicador compacto sin signo produce acarreo 1. ¿A dónde debe ir ese acarreo durante el siguiente desplazamiento combinado a la derecha?
  1. A la posición superior de la mitad más significativa
  2. A la posición inferior del multiplicador
  3. Al acarreo de entrada inferior del siguiente paso
  4. Fuera del producto almacenado por completo
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una rutina RV32 calcula q = div(a, b), r = rem(a, b) y después q × b + r con vuelta al extremo del rango. Para a = −2³¹ y b = −1, ¿qué ocurre?
  1. q = −2³¹, r = 0; la reconstrucción devuelve 2³¹ − 1
  2. q = 2³¹ − 1, r = −1; la reconstrucción devuelve −2³¹
  3. q = −2³¹, r = 0; la reconstrucción devuelve −2³¹
  4. q = 2³¹, r = 0; la reconstrucción devuelve −2³¹
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un divisor con restauración de cuatro bits tiene resto parcial 2 y divisor 11 antes de una resta de prueba. ¿Qué patrón de prueba y acción se requieren?
  1. Prueba 0111; conservar y escribir 1
  2. Prueba 1001; restaurar y escribir 0
  3. Prueba 1001; conservar y escribir 1
  4. Prueba 0111; restaurar y escribir 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Una implementación de Booth de 4 bits usa un acumulador de 5 bits para el multiplicando −8 y el multiplicador 1. ¿Cuáles son la primera actualización del acumulador y el producto final de 8 bits?
  1. Primero −8 (11000); producto 1111 1000
  2. Primero +8 (01000); producto 1111 1000
  3. Primero +8 (01000); producto 0000 1000
  4. Primero −8 (11000); producto 0000 1000
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una rutina con signo sustituye la división con truncamiento de −29 por 8 por un desplazamiento a la derecha. ¿Qué sesgo y resultado desplazado conservan el cociente?
  1. Sumar 7 y desplazar para obtener −3
  2. Sumar 0 y desplazar para obtener −4
  3. Sumar 3 y desplazar para obtener −4
  4. Sumar 8 y desplazar para obtener −2
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un multiplicador segmentado tiene una latencia de cuatro ciclos y acepta una nueva multiplicación en cada ciclo. ¿Cuándo puede comenzar una segunda multiplicación independiente después de que comience la primera?
  1. Cuatro ciclos después
  2. Tres ciclos después
  3. Dos ciclos después
  4. Un ciclo después
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué expresión de desplazamiento y suma equivale a 12x cuando todos los resultados intermedios caben y el lenguaje permite los desplazamientos?
  1. (x << 3) + (x << 2)
  2. (x << 3) + (x << 1)
  3. (x << 4) + (x << 2)
  4. (x << 3) + x
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Campos de coma flotante y valores excepcionales10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué exponente verdadero codifica un campo de exponente binary32 normal de 123?
  1. −4
  2. 4
  3. −3
  4. 123
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué representa un patrón binary32 con el exponente con todos los bits activados y una fracción distinta de cero?
  1. Un subnormal
  2. Infinito
  3. NaN
  4. Un valor normal
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un valor binary32 normal tiene signo 1, campo de exponente 125 y fracción 101 seguida de ceros. ¿Cuál es su valor?
  1. −0,15625
  2. −0,40625
  3. −1,625
  4. −0,8125
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué signo, campo de exponente y prefijo de fracción de binary32 codifican −10,5?
  1. Signo 1; exponente 130; fracción 10101…
  2. Signo 1; exponente 124; fracción 0101…
  3. Signo 0; exponente 130; fracción 0101…
  4. Signo 1; exponente 130; fracción 0101…
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Cuál es el valor del patrón subnormal positivo binary32 0x00000008?
  1. 2⁻¹⁴⁹
  2. 2⁻¹⁴⁷
  3. 2⁻¹⁴⁶
  4. 2⁻¹²⁶
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Dos significandos positivos normales en coma flotante se multiplican y dan 11,01₂ con un exponente verdadero inicial de 4. ¿Qué producto normalizado resulta antes de redondear?
  1. 1,101₂ × 2⁵
  2. 1,101₂ × 2³
  3. 1,101₂ × 2⁴
  4. 1,010₂ × 2⁵
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Dos valores binary32 positivos normales son 2⁻⁸⁰ y 2⁻⁶⁰. Su producto exacto es representable en binary32. ¿Qué clase de resultado e indicador de subdesbordamiento se obtienen con el tratamiento predeterminado?
  1. Subnormal; subdesbordamiento activado
  2. Normal; subdesbordamiento desactivado
  3. Cero; subdesbordamiento activado
  4. Subnormal; subdesbordamiento desactivado
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un resultado binary32 se calcula como (−6,0)/(−0,0) con el tratamiento predeterminado y después se compara con él mismo para comprobar su igualdad. ¿Qué valor, indicador recién activado y resultado de igualdad se obtienen?
  1. −∞; división por cero; verdadero
  2. +∞; división por cero; verdadero
  3. +∞; operación inválida; falso
  4. NaN; operación inválida; falso
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un formato binary32 se sustituye por otro con el mismo campo de exponente pero dos bits de fracción menos. Para magnitudes desde 2¹⁰ hasta valores inferiores a 2¹¹, ¿cómo cambia la separación?
  1. De 2⁻¹³ a 2⁻¹⁵
  2. De 2⁻¹⁰ a 2⁻⁸
  3. De 2⁻¹³ a 2⁻¹¹
  4. De 2⁻¹³ a 2⁻¹²
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

¿Qué categoría de instrucciones de RISC-V escribe su resultado en un registro de enteros aunque compare entradas en coma flotante?
  1. Sumas en coma flotante como fadd.s
  2. Comparaciones en coma flotante como flt.s
  3. Productos en coma flotante como fmul.s
  4. Multiplicaciones y sumas fusionadas como fmadd.s
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Decisiones de redondeo y pérdida de precisión10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un empate exacto con significandos de cuatro bits está entre 1,110₂ y 1,111₂. ¿Qué selecciona el redondeo al más cercano con desempate al par?
  1. 1,111₂
  2. 1,101₂
  3. 1,110₂
  4. 10,000₂
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un resultado normalizado conserva el significando 1,011₂ con guarda/redondeo/adherente 100. ¿Cuál es el significando redondeado al más cercano con desempate al par?
  1. 1,011₂
  2. 1,100₂
  3. 1,010₂
  4. 1,101₂
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Usando significandos de cuatro bits y redondeo al más cercano con desempate al par, ¿cuánto es 2,75 + 0,375?
  1. 3,125
  2. 3,25
  3. 2,75
  4. 3,0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

¿Qué fracción irreducible tiene un desarrollo binario finito exacto: 7/16, 7/20, 7/12 o 7/10?
  1. 7/16
  2. 7/20
  3. 7/12
  4. 7/10
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Un resultado normalizado con significando de cuatro bits tiene los bits exactos 1,111101₂ con exponente verdadero 5. Con redondeo al más cercano con desempate al par, ¿qué resultado normalizado se almacena?
  1. 1,111₂ × 2⁵
  2. 1,000₂ × 2⁶
  3. 1,000₂ × 2⁵
  4. 1,111₂ × 2⁶
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

En binary32 con redondeo al más cercano con desempate al par, un acumulador almacenado es igual a 2²⁶. Un bucle suma el valor almacenado 3 exactamente cuatro veces, redondeando después de cada suma. ¿Qué valor final resulta?
  1. 2²⁶ + 8
  2. 2²⁶ + 12
  3. 2²⁶
  4. 2²⁶ + 16
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

En aritmética binary32 con redondeo al más cercano con desempate al par, sean a = 1 + 2⁻¹², b = 1 − 2⁻¹², c = −1. ¿Qué devuelven a × b + c con operaciones separadas y la multiplicación y suma fusionadas?
  1. Ambas devuelven −2⁻²⁴
  2. Separadas devuelven 0; fusionadas devuelven −2⁻²⁴
  3. Separadas devuelven −2⁻²⁴; fusionadas devuelven 0
  4. Ambas devuelven 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un valor binary32 finito positivo se desborda al multiplicarse por 2. Con roundTowardNegative, ¿qué resultado e indicadores se obtienen con el tratamiento predeterminado?
  1. Infinito positivo; desbordamiento y resultado inexacto
  2. Mayor positivo finito; subdesbordamiento y resultado inexacto
  3. Infinito positivo; división por cero y resultado inexacto
  4. Mayor positivo finito; desbordamiento y resultado inexacto
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

En aritmética binary32 con redondeo al más cercano con desempate al par, x = 1 + 2⁻²³ se almacena exactamente. Un programa evalúa (x − 1) × 2²³. ¿Qué resultado se obtiene y la resta introduce error?
  1. 1; la resta es exacta
  2. 0; la resta descarta 2⁻²³
  3. 1; la resta redondea hacia arriba
  4. 2; la resta produce 2⁻²²
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un valor exacto negativo −2,3 se redondea a un entero. ¿Cuáles son los resultados hacia cero y hacia infinito negativo?
  1. Hacia cero −3; hacia negativo −2
  2. Hacia cero −2; hacia negativo −2
  3. Hacia cero −2; hacia negativo −3
  4. Hacia cero −3; hacia negativo −3
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 6: Diagnostica la aritmética en el camino de datos10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un cálculo en coma flotante devuelve NaN. ¿Qué tipo de prueba debe usar un programa para reconocerlo?
  1. Igualdad con una constante NaN almacenada
  2. Una prueba específica de NaN como isnan
  3. Una prueba de que el valor es igual a sí mismo
  4. Una prueba de que el bit de signo es igual a 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una ALU de 8 bits resta b = 0111 1000 de a = 1000 1010. ¿Qué resultados de menor que con y sin signo y qué salida Zero se obtienen?
  1. Con signo 0; sin signo 0; Zero 0
  2. Con signo 1; sin signo 1; Zero 0
  3. Con signo 0; sin signo 1; Zero 1
  4. Con signo 1; sin signo 0; Zero 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Un bloque de 4 bits con propagación mediante OR suma 1010 y 0101 con acarreo de entrada 1. El bit menos significativo de su segundo operando cambia de 1 a 0. ¿Qué ocurre con el acarreo final y la suma?
  1. El acarreo sigue en 1; la suma cambia de 0000 a 1111
  2. El acarreo cambia de 1 a 0; la suma cambia de 1111 a 0000
  3. El acarreo cambia de 1 a 0; la suma cambia de 0000 a 1111
  4. El acarreo sigue en 0; la suma cambia de 0000 a 1111
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Un programa multiplica los patrones sin signo de 8 bits 0xFE y 0x02. Toma el byte más significativo de su producto con signo y el byte menos significativo de su producto sin signo. ¿Qué valor de 16 bits se forma?
  1. 0xFFFC en lugar de 0x01FC
  2. 0x01FC en lugar de 0xFFFC
  3. 0xFF02 en lugar de 0x01FC
  4. 0x00FC en lugar de 0x01FC
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una rutina RV32 calcula divu y remu para dividendo 37 y divisor 0, y después comprueba si q × divisor + resto es igual a 37 usando aritmética con vuelta al extremo del rango. ¿Qué demuestra la comprobación?
  1. Falla porque el cociente tiene todos los bits activados
  2. Genera una excepción antes de comprobar la igualdad
  3. Se cumple porque el cociente es cero
  4. Se cumple aunque se haya dividido por cero
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

En el intervalo normal de binary32 desde 64 hasta 128, ¿cuál es la separación entre valores adyacentes?
  1. 2⁻¹⁶
  2. 2⁻¹⁷
  3. 2⁻²³
  4. 2⁻¹⁸
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

En aritmética binary32 con redondeo al más cercano con desempate al par, a = 1 + 2⁻²², b = 1 − 2⁻²² y c = −1 son entradas exactas. ¿Qué devuelven la multiplicación y suma separadas y FMA?
  1. Separadas 0; FMA −2⁻⁴⁴
  2. Separadas −2⁻⁴⁴; FMA −2⁻⁴⁴
  3. Separadas 0; FMA +2⁻⁴⁴
  4. Separadas −2⁻²²; FMA −2⁻⁴⁴
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un modelo con significandos de cuatro bits redondea cada operación al más cercano con desempate al par. Calcula (16 + 1,25) − 16. ¿Qué resultado devuelve?
  1. 0
  2. 1,25
  3. 2
  4. 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un entero ancho 67 108 867 se convierte a binary32 y de nuevo a un entero ancho con redondeo al más cercano con desempate al par. Después el programa resta el entero original. ¿Qué diferencia resulta?
  1. +5
  2. −3
  3. 0
  4. −1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Después de una suma sin signo en RV32, la suma almacenada es menor que la primera entrada en el orden sin signo. ¿Qué conclusión se deduce?
  1. La suma necesariamente se desbordó con signo
  2. La suma no tiene acarreo ni desbordamiento
  3. La primera entrada era necesariamente negativa
  4. La suma superó el máximo sin signo y volvió al rango
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

78 Términos Clave, cada uno con su definición

A

Absorción
La absorción ocurre cuando sumar un valor pequeño deja sin cambios un operando mayor en coma flotante porque el redondeo elimina la contribución.
Un contador binary32 en 2²⁴ puede dejar de aumentar cuando el programa suma 1 repetidamente.
Acumulador
Un acumulador conserva un resultado aritmético acumulado; el algoritmo de Booth usa un acumulador de n + 1 bits para operandos de n bits.
El bit adicional del acumulador permite restar un multiplicando de valor más negativo sin desbordamiento.
Alineación de significandos
La alineación de significandos desplaza a la derecha un significando de exponente menor para que los operandos en coma flotante compartan el exponente mayor antes de sumar o restar.
Alinear los exponentes 6 y 2 desplaza el segundo significando cuatro posiciones a la derecha.
Anticipación de acarreo
La anticipación de acarreo calcula los acarreos a partir de expresiones de generación y propagación, reduciendo la dependencia secuencial de acarreo de un sumador de propagación.
Una unidad de anticipación puede calcular el acarreo de salida de un bloque antes de que cada acarreo interno se haya propagado.
Aritmética de saturación
La aritmética de saturación limita un resultado fuera de rango al mayor o menor valor admitido por su formato de destino.
La suma con saturación sin signo de 8 bits 240 + 30 devuelve 255, lo que evita que un píxel brillante vuelva al rango como un valor oscuro.
Aritmética modular
La aritmética modular conserva el resto después de dividir por un módulo fijo; la aritmética de n bits con vuelta al extremo del rango usa un módulo de 2ⁿ.
La suma sin signo de 8 bits 250 + 20 devuelve 14 porque 270 y 14 difieren en un módulo completo de 256.

Á

Árbol de Wallace
Un árbol de Wallace reduce las filas de productos parciales mediante capas de compresión con acarreo almacenado antes de que una suma final produzca el producto.
La reducción de filas en paralelo acorta el camino en comparación con sumar un producto parcial completo después de otro.

B

bfloat16
bfloat16 es un formato de coma flotante de 16 bits con un bit de signo, ocho bits de exponente y siete bits de fracción, que prioriza el rango frente a la precisión.
La anchura de su exponente coincide con la de binary32, mientras que su fracción más corta conserva mucho menos detalle.
Bit adherente (sticky bit)
El bit adherente es la operación OR de todos los bits descartados después de guarda y redondeo, y registra si existe algún bit distinto de cero en esa parte.
Guarda 1, redondeo 0 y adherente 1 significan que el valor está por encima de la mitad, por lo que sería incorrecto tratar el resultado como un empate.
Bit de guarda
El bit de guarda es el primer bit adicional después del significando conservado y ayuda a distinguir valores por debajo, en o por encima de la mitad.
Un bit de guarda 0 sitúa la parte descartada por debajo de media ulp después de la normalización.
Bit de redondeo
El bit de redondeo es el segundo bit adicional después del significando conservado y aporta información sobre la parte descartada.
Guarda 1 y redondeo 1 indican un valor por encima de la mitad incluso antes de examinar el bit adherente.
Bit oculto
El bit oculto es el 1 inicial implícito de un significando binario normal, que el formato proporciona sin almacenarlo.
binary32 obtiene 24 bits de precisión normal de un campo de fracción de 23 bits y su 1 inicial oculto.
Bnegate
Bnegate es un control compartido en una ALU dividida en secciones que invierte el segundo operando y fija el acarreo de entrada inicial para la resta.
Activar Bnegate mientras se selecciona el sumador cambia a + b por a + NOT(b) + 1.

C

Campo de fracción
El campo de fracción almacena los bits del significando posteriores a su coma binaria y deja implícito el bit inicial en los valores normales.
Un significando normal de 1,01₂ almacena una fracción que comienza por 01, seguida de ceros para llenar el campo.
Cancelación
La cancelación elimina dígitos iniciales compartidos cuando se restan valores casi iguales, lo que hace que los errores anteriores de los operandos sean grandes respecto de la diferencia.
Una resta exacta aún puede revelar un resultado relativo deficiente si sus dos entradas ya estaban redondeadas.
Cero con signo
Un cero con signo es un cero en coma flotante con un bit de signo positivo o negativo; ambos se comparan como iguales, pero conservan algunos efectos del signo.
El valor positivo 1 dividido por cero negativo devuelve infinito negativo con el tratamiento predeterminado de coma flotante.
Cociente
Un cociente es el resultado de la división antes de considerar el resto; la división entera con signo y truncamiento lo redondea hacia cero.
Para −19 dividido por 4, el truncamiento da cociente −4, mientras que el redondeo hacia abajo daría −5.
Comparación sin signo
Una comparación sin signo ordena patrones como valores binarios no negativos, por lo que un bit inicial alto aporta peso positivo.
El patrón 1111 es mayor que 0001 sin signo, aunque sus valores con signo son −1 y 1.
Comprobación de límites
Una comprobación de límites verifica si un índice pertenece al rango válido de un arreglo antes de usarlo para acceder a un elemento.
Una comparación sin signo con una longitud no negativa dentro del rango con signo rechaza tanto índices negativos como excesivos.

D

Desbordamiento con signo
El desbordamiento con signo ocurre cuando el resultado exacto queda fuera del rango en complemento a dos del destino, independientemente del acarreo de salida.
Una suma positiva de 8 bits que se convierte en un patrón almacenado negativo puede indicar desbordamiento con signo.
Desbordamiento sin signo
El desbordamiento sin signo ocurre cuando un resultado exacto queda fuera del intervalo entre cero y el mayor valor representable con la anchura del destino.
Una suma sin signo de 8 bits de 230 y 40 almacena 14, mientras que el acarreo de salida indica que 270 no cabía.
Desplazador de barril (barrel shifter)
Un desplazador de barril combina etapas de desplazamiento por potencias de dos para desplazar una palabra una distancia seleccionada a través de un número fijo de niveles lógicos.
Un desplazador de barril de 32 bits selecciona las etapas de 16 y 4 posiciones para producir un desplazamiento de 20.
Desplazamiento aritmético a la derecha
Un desplazamiento aritmético a la derecha mueve los bits hacia posiciones inferiores mientras copia el bit de signo original en las nuevas posiciones superiores liberadas.
Desplazar −10 con signo una posición a la derecha da −5; desplazar −9 del mismo modo también da −5.
Dividendo
Un dividendo es el valor que se divide, igual al cociente por el divisor más el resto.
En −17 dividido por 5 con truncamiento, el dividendo es −17, el cociente −3 y el resto −2.
División con restauración
La división con restauración prueba una resta del divisor y la revierte cuando la prueba falla, produciendo un bit de cociente por paso.
Si una prueba necesita un préstamo, el hardware vuelve a sumar el divisor y registra el bit de cociente 0.
División sin restauración
La división sin restauración lleva un resto parcial negativo al paso siguiente y lo corrige mediante la siguiente suma o una suma final de restauración.
Un resto parcial final negativo debe incrementarse con el divisor para obtener el resto final.
División SRT
La división SRT selecciona dígitos del cociente a partir de los bits iniciales del divisor y del resto parcial, lo que permite obtener varios bits del cociente por paso.
Una entrada incorrecta en la tabla de selección puede alterar un cociente aunque el resto del hardware aritmético sea correcto.
Divisor
Un divisor es el valor por el que se divide un dividendo; para la división entera ordinaria debe ser distinto de cero.
Dividir 29 por 6 deja un resto menor que el divisor positivo 6.

E

Error de representación
El error de representación es la diferencia entre un valor previsto y su aproximación almacenada cuando el formato no puede representarlo exactamente.
El valor decimal 0,1 tiene un desarrollo binario periódico y debe aproximarse en binary32.
Excepción de resultado inexacto
La excepción de resultado inexacto registra que un resultado de coma flotante entregado difiere del resultado matemático exacto debido al redondeo.
Un valor redondeado puede activar el resultado inexacto durante un cálculo ordinario sin producir desbordamiento ni operación inválida.
Excepción de subdesbordamiento
La excepción de subdesbordamiento con el tratamiento predeterminado requiere tanto un resultado diminuto como inexactitud, por lo que un subnormal exacto no la activa.
Dividir el menor valor normal de binary32 por 2 produce un subnormal exacto sin subdesbordamiento.
Excepción síncrona (trap)
Una excepción síncrona transfiere el control a código de gestión de excepciones cuando una instrucción provoca una condición que requiere un tratamiento especial.
Una suma de MIPS que genera una excepción síncrona transfiere el control cuando su resultado con signo supera el rango del registro.
Extensión con ceros
La extensión con ceros amplía un patrón sin signo insertando ceros en sus nuevas posiciones más significativas sin cambiar su valor numérico.
Un byte sin signo que contiene 250 se convierte en 0000 0000 1111 1010 al extenderlo a 16 bits.
Extensión de signo
La extensión de signo amplía un patrón en complemento a dos copiando su bit de signo en las nuevas posiciones más significativas, conservando su valor.
Extender 1010 con signo a 1111 1010 conserva −6; insertar ceros produciría el valor positivo 10.

É

Épsilon de máquina
El épsilon de máquina suele denotar la separación entre 1 y el siguiente valor representable mayor, igual a 2⁻²³ para binary32.
La separación justo por encima de 1 es el doble del límite relativo habitual de redondeo al más cercano de binary32, 2⁻²⁴.

F

Falta de asociatividad
La falta de asociatividad significa que cambiar la agrupación de una operación puede cambiar su resultado; el redondeo intermedio la causa en la suma en coma flotante.
Una suma paralela puede cambiar sus últimos bits cuando un número distinto de hilos cambia la agrupación de la reducción.

G

Generación de acarreo
Una señal de generación de acarreo indica que una posición de bit produce un acarreo independientemente de su acarreo de entrada porque ambos bits de operandos son 1.
Cuando la generación es 1, el siguiente acarreo es 1 incluso si ninguna posición inferior proporcionó un acarreo de entrada.
Generación de acarreo de grupo
Una señal de generación de acarreo de grupo indica que un bloque de bits produce un acarreo de salida independientemente del acarreo que entra en el bloque.
Un bit superior que genera un acarreo hace que el bloque genere, incluso si su bit menos significativo detiene los acarreos de entrada.

I

Indicador de condición (bandera de condición)
Un indicador de condición es un bit de estado del procesador que registra una propiedad de una operación completada para que otra instrucción la compruebe después.
Un salto condicional puede examinar el indicador de desbordamiento de x86 después de una suma para detectar un resultado con signo fuera de rango.
Infinito
Un infinito es un valor especial en coma flotante con signo, codificado con un exponente con todos los bits activados y una fracción cero.
El infinito positivo más un valor finito sigue siendo infinito positivo, mientras que infinito menos sí mismo produce NaN.

L

Latencia de multiplicación
La latencia de multiplicación es el tiempo desde el inicio de una multiplicación hasta que su resultado está disponible para una operación dependiente.
Un multiplicador segmentado puede aceptar un nuevo producto en cada ciclo incluso cuando la latencia es de varios ciclos.

M

Mitad más significativa del producto
La mitad más significativa del producto contiene los n bits más significativos del producto completo de 2n bits de dos operandos de n bits.
Una mitad más significativa distinta de cero muestra que un producto sin signo pierde información al almacenarse en solo n bits.
Multiplexor
Un multiplexor selecciona una de varias señales de entrada candidatas y la pasa a una salida según los bits de control.
Un multiplexor de salida de la ALU puede seleccionar un resultado AND mientras el sumador calcula simultáneamente una suma.
Multiplicación por desplazamiento y suma
La multiplicación por desplazamiento y suma examina secuencialmente los bits del multiplicador y acumula los valores desplazados correspondientes del multiplicando.
Un multiplicador secuencial de seis bits realiza seis pasos de bits incluso cuando la mayoría de los bits del multiplicador son cero.
Multiplicación y suma fusionadas (FMA)
Una multiplicación y suma fusionadas evalúa un producto más un sumando con un solo redondeo final, conservando la precisión intermedia del producto.
FMA puede conservar una diferencia pequeña que se borra cuando un producto se redondea antes de sumar un sumando opuesto.
Multiplicador
Un multiplicador es el operando cuyos bits seleccionan contribuciones desplazadas del multiplicando en un algoritmo de multiplicación binaria.
El patrón de multiplicador 1001 selecciona una copia sin desplazar y otra desplazada tres posiciones a la izquierda.
Multiplicando
Un multiplicando es el operando cuyas copias desplazadas forman los productos parciales seleccionados por los bits del multiplicador.
En la multiplicación de 9 por 5 mediante desplazamiento y suma, las copias desplazadas de 9 contribuyen en los bits 0 y 2 del multiplicador.

N

Normalización
La normalización desplaza un significando distinto de cero hasta la forma requerida de dígito inicial y cambia el exponente para conservar su valor.
Una suma con significando 10,1₂ se desplaza una vez a la derecha mientras su exponente aumenta en uno.
Número subnormal
Un subnormal es un valor distinto de cero en coma flotante con un campo de exponente cero, un 0 inicial en el significando y la escala normal mínima.
El patrón binary32 0x00000002 representa el doble del menor subnormal positivo.

P

Precisión
La precisión es el número de dígitos significativos disponibles en un formato numérico, que limita el detalle en una escala concreta.
Aumentar el exponente puede aumentar la separación de binary32 aunque su precisión de 24 bits permanezca fija.
Préstamo
Un préstamo indica que una resta sin signo necesita una unidad de una posición superior porque el primer operando es menor que el segundo.
Restar 12 de 5 sin signo necesita un préstamo aunque el circuito siga devolviendo un patrón de anchura fija.
Producto parcial
Un producto parcial es una contribución desplazada al resultado de una multiplicación, seleccionada por un bit del multiplicador o un dígito recodificado.
En la multiplicación binaria sin signo, cada producto parcial ordinario es un multiplicando desplazado o cero.
Propagación de acarreo
Una señal de propagación de acarreo describe si un acarreo de entrada puede pasar por una posición de bit; este diseño usa OR de los operandos.
Con entradas 1 y 0, la propagación es 1 y la generación es 0, por lo que el acarreo de entrada determina el acarreo de salida.
Propagación de acarreo de grupo
Una señal de propagación de acarreo de grupo indica que cada posición de un bloque puede transmitir un acarreo de entrada hasta la salida del bloque.
Los cuatro bits de propagación mediante OR deben ser 1 para que la propagación de grupo de un bloque de cuatro bits sea 1.
Puesta a uno si es menor
La puesta a uno si es menor produce el entero 1 con la anchura completa si una comparación especificada entre operandos es verdadera y el entero 0 en caso contrario.
slt de RISC-V compara operandos con signo, mientras que sltu aplica el orden sin signo a los mismos patrones.

R

Recodificación de Booth
La recodificación de Booth sustituye secuencias del multiplicador binario por contribuciones con signo, lo que permite multiplicar mediante sumas y restas.
Un multiplicador que contiene una secuencia larga de bits 1 puede representarse mediante una potencia de dos menos otra potencia de dos.
Recodificación de Booth en base 4
La recodificación de Booth en base 4 trata dos bits del multiplicador por paso con dígitos con signo de −2 a +2 para reducir el número de productos parciales.
Un multiplicador en base 4 necesita menos filas de productos parciales que un diseño que crea una fila por cada bit del multiplicador.
Redondeo al más cercano con desempate al par
El redondeo al más cercano con desempate al par elige el valor representable más cercano y, en un caso exactamente a medio camino, elige un significando conservado que termina en 0.
Con esta regla, al redondear un empate a enteros, 6,5 se redondea a 6 y 7,5 a 8.
Redondeo correcto
El redondeo correcto devuelve el resultado exacto de la operación matemática redondeado según el formato de destino y la dirección de redondeo seleccionada.
Las operaciones aritméticas básicas conformes coinciden numéricamente para entradas, formato de destino y dirección de redondeo idénticos.
Redondeo dirigido
El redondeo dirigido selecciona un vecino representable en una dirección especificada: hacia infinito positivo, infinito negativo o cero.
Para un resultado negativo inexacto, el redondeo hacia cero y el redondeo hacia negativo pueden elegir vecinos distintos.
Registro de coma flotante (punto flotante)
Un registro de coma flotante conserva un operando o resultado para instrucciones de coma flotante; F y D de RISC-V usan los registros de f0 a f31.
Una comparación en coma flotante escribe su resultado de 0 o 1 en un registro de enteros en lugar de en este banco.
Resta en complemento a dos
La resta en complemento a dos suma al primer operando el segundo operando invertido y un acarreo inicial de 1.
El mismo sumador de 8 bits puede calcular 19 + 6 o 19 − 6 cambiando sus controles de inversión y acarreo.
Resto (residuo)
Un resto es el valor que queda después de restar del dividendo el cociente por el divisor según la convención de división elegida.
rem de RISC-V da −2 para −17 dividido por 5 porque el resto distinto de cero sigue el signo del dividendo.

S

Salida de detección de cero
La salida de detección de cero es una señal de estado de la ALU que es 1 solo cuando todos los bits del resultado son cero; suele formarse mediante una reducción NOR.
Restar patrones de operandos iguales activa Zero incluso cuando esos patrones representan valores negativos con signo.
Sección de un bit
Una sección de un bit es la parte de un circuito repetido del camino de datos que trata una posición de bit de los operandos y sus señales locales.
La sección más significativa proporciona información de desbordamiento, mientras que cada sección intermedia transmite un acarreo.
Sesgo del exponente
Un sesgo del exponente es un desplazamiento fijo que se suma al exponente verdadero de un número normal antes de almacenarlo como un campo sin signo.
Un exponente verdadero binary32 de 5 se almacena como 132 porque el sesgo del formato es 127.
Significando (mantisa)
Un significando contiene los dígitos binarios significativos de un valor en coma flotante, incluido el bit inicial implícito cuando es normal.
El valor normal 1,101₂ × 2³ tiene significando 1,101₂ y exponente verdadero 3.
Signo corregido por desbordamiento
El signo corregido por desbordamiento es el signo del resultado de la resta XOR el desbordamiento con signo, y proporciona la decisión correcta de menor que con signo.
Una diferencia verdadera positiva que ha vuelto al rango puede parecer negativa hasta que el bit de desbordamiento corrige la comparación.
Subdesbordamiento gradual (gradual underflow)
El subdesbordamiento gradual representa valores diminutos mediante subnormales con precisión significativa decreciente en lugar de sustituirlos inmediatamente por cero.
La mitad exacta del menor valor normal de binary32 se conserva como un subnormal distinto de cero.
Sumador completo
Un sumador completo combina dos bits de operandos y un acarreo de entrada, y produce un bit de suma y un acarreo de salida para la posición siguiente.
Con tres entradas a 1, el sumador completo produce suma 1 y acarreo 1, que representan el valor binario 11.
Sumador de acarreo almacenado
Un sumador de acarreo almacenado comprime tres palabras de entrada en una palabra de suma y una palabra de acarreo sin propagar acarreos por toda la anchura.
Varios niveles de acarreo almacenado reducen las filas de productos parciales antes de una suma final con propagación de acarreo.
Sumador de propagación de acarreo
Un sumador de propagación de acarreo encadena sumadores completos de modo que cada acarreo de salida proporciona el acarreo de entrada del siguiente bit más significativo.
Un acarreo creado en el bit 0 puede tener que atravesar muchas secciones antes de que se estabilice el bit más significativo del resultado.
Sumador de selección de acarreo
Un sumador de selección de acarreo calcula un bloque para los dos posibles acarreos de entrada y selecciona un resultado calculado de antemano cuando llega el acarreo.
Duplicar la aritmética del bloque superior intercambia más área de circuito por una espera más corta del bloque inferior.

T

Tolerancia absoluta
Una tolerancia absoluta establece un margen de error independiente de la magnitud, útil cuando los valores finitos aproximados están cerca de cero.
Un mínimo absoluto evita que una comparación cercana a cero dependa solo de un margen relativo que tiende a desaparecer.
Tolerancia relativa
Una tolerancia relativa establece un error aceptable de comparación en proporción a las magnitudes de los valores finitos que se comparan.
Una tolerancia relativa fija permite una diferencia absoluta mayor para valores cercanos a un millón que para valores cercanos a uno.

U

Unidad aritmético-lógica (ALU)
Una unidad aritmético-lógica es un circuito combinacional del camino de datos que selecciona resultados aritméticos o lógicos a partir de operandos y entradas de control.
Cambiar los controles de operación permite que el mismo par de salidas de registros alimente una suma o una operación AND bit a bit.
Unidad en la última posición (ulp)
Una unidad en la última posición, o ulp, es la separación asociada a la posición menos significativa conservada en una escala elegida.
En el intervalo de binary32 de 16 a 32, los valores normales adyacentes están separados por 2⁻¹⁹.

V

Valor no numérico (NaN)
Un NaN es un valor especial no ordenado de coma flotante que representa un resultado numérico indefinido, codificado con una fracción distinta de cero y un exponente con todos los bits activados.
Cero dividido por cero produce NaN y comparar ese resultado consigo mismo para comprobar su igualdad devuelve falso.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar