- Aprender
- Computação e TI
- Ciência da computação
- Organização e arquitetura de computadores
- Aritmética computacional
Aritmética computacional
IntermediárioAula 3 de 6 do curso Curso de Organização e arquitetura de computadores
O que você vai aprender
- Use um único somador binário para adição e subtração com e sem sinal e determine quando um resultado deixa de caber nos bits disponíveis.
- Somar e subtrair inteiros binários com um único somadorSome números de n bits coluna por coluna, subtraia somando o complemento de dois e veja por que o mesmo circuito serve para valores com e sem sinal.
- Detectar estouro em resultados com e sem sinalDiferencie vai-um de estouro, detecte cada um com hardware simples ou uma sequência curta de instruções e saiba o que processadores e linguagens fazem quando isso acontece.
- Somar e subtrair inteiros binários com um único somador
- Construa uma ULA com fatias de 1 bit que soma, subtrai, compara e executa operações lógicas e acelere sua cadeia de vai-um.
- Construir uma ULA de n bits a partir de fatias de 1 bitCombine portas lógicas, um somador completo e multiplexadores em uma ULA de 1 bit, encadeie as fatias em uma ULA de n bits e selecione operações com linhas de controle.
- Comparar números e detectar zero na ULAProduza a saída Zero para desvios por igualdade e o resultado de menor que para comparações com e sem sinal, incluindo a correção por estouro.
- Acelerar a adição com antecipação de vai-umExplique por que os sinais de vai-um tornam lentos os somadores com propagação e calcule-os antecipadamente com sinais de geração e propagação.
- Construir uma ULA de n bits a partir de fatias de 1 bit
- Multiplique e divida como o hardware faz, desde circuitos simples de deslocamento e soma até regras de sinal, multiplicadores rápidos e instruções RISC-V.
- Multiplicar com deslocamentos e somasMultiplique números binários sem sinal com o algoritmo sequencial de deslocamentos e somas, dimensione o produto corretamente e use deslocamentos para potências de dois.
- Multiplicar números com sinal e realizar multiplicações rápidasTrabalhe com operandos em complemento de dois, recodifique multiplicadores com o algoritmo de Booth e explique como multiplicadores em árvore alcançam alta velocidade.
- Dividir inteiros e tratar os casos especiaisDivida com o algoritmo de restauração, aplique as regras de sinal para quociente e resto e saiba como o hardware e o RISC-V tratam a divisão por zero e o estouro.
- Multiplicar com deslocamentos e somas
- Codifique e decodifique valores binários IEEE 754, explique o intervalo e a precisão de cada formato e reconheça zeros, infinitos, NaNs e números subnormais.
- Codificar e decodificar formatos binários IEEE 754Escreva um número em notação científica binária normalizada, armazene-o nos campos de sinal, expoente com viés e fração e interprete os bits armazenados como um valor.
- Usar zeros, infinitos, NaNs e números subnormaisReconheça os padrões de expoente reservados, explique o subfluxo gradual e preveja os resultados e indicadores de operações excepcionais.
- Codificar e decodificar formatos binários IEEE 754
- Acompanhe as etapas de hardware da adição e multiplicação em ponto flutuante, arredonde os resultados corretamente e preveja os erros de precisão resultantes.
- Somar e multiplicar números de ponto flutuanteAlinhe, opere, normalize e arredonde na ordem usada pelo hardware de ponto flutuante e use as instruções de ponto flutuante do RISC-V.
- Arredondar resultados corretamenteAplique as direções de arredondamento do IEEE 754, arredonde para o mais próximo com desempate para o par e use bits de guarda, de arredondamento e de aderência para arredondar como se houvesse precisão infinita.
- Prever e evitar erros de precisãoExplique por que valores decimais familiares são inexatos em binário, por que a adição em ponto flutuante não é associativa e como absorção, cancelamento e conversões causam falhas reais.
- Somar e multiplicar números de ponto flutuante
Guia de estudo de Aritmética computacional
1Somar e subtrair inteiros e detectar estouro
Um somador produz bits antes que se decida se eles representam números com ou sem sinal. Acompanhe os sinais de vai-um durante a adição, reutilize o mesmo circuito para subtração e depois verifique o resultado em relação ao intervalo correto. A distinção também importa no software: um processador pode manter indicadores de estado, retornar os bits menos significativos ou gerar uma exceção, enquanto uma linguagem de programação atribui suas próprias regras a essas operações de máquina.
1.1 Somar e subtrair inteiros binários com um único somador
Um somador binário realiza a mesma pequena tarefa em cada posição de bit. Ele combina os dois bits dos operandos com um vai-um da posição à direita. O significado do padrão de bits completo vem depois.
Acompanhe o vai-um
Um meio somador tem duas entradas: sua soma é o XOR delas e seu vai-um é o AND delas. Um somador completo também aceita um vai-um de entrada:
Aqui a multiplicação significa AND e a adição significa OR. A soma é 1 para um número ímpar de entradas iguais a 1; o vai-um é 1 para pelo menos duas. Encadear somadores completos forma um somador com propagação de vai-um. Apenas o bit 0 recebe o vai-um inicial; cada bit posterior recebe o vai-um produzido pelo vizinho.
Para 23 + 45, escreva 0001 0111 + 0010 1101. No bit 0, 1 + 1 produz soma 0 e vai-um 1. No bit 1, 1 + 0 + 1 novamente produz 0 e vai-um 1. No bit 2, três entradas iguais a 1 produzem soma 1 e vai-um 1. Continuando para a esquerda, obtemos 0100 0100, ou 68, sem vai-um final.
Um resultado de n bits mantém apenas os n bits menos significativos, portanto o circuito calcula a soma módulo . Em 8 bits, 1111 1100 + 0000 0101 produz 0000 0001 e vai-um de saída 1. Interpretado com sinal, isso é −4 + 5 = 1. Interpretado sem sinal, é 252 + 5 = 257, cujos oito bits menos significativos representam 1. O circuito não mudou; o intervalo permitido mudou.
Transforme subtração em adição
O complemento de dois fornece a identidade
Uma linha de controle de subtração aplica XOR a cada bit do segundo operando com 1, invertendo-o, e define o vai-um de entrada inicial como 1. Para adição, essa linha é 0, portanto o segundo operando passa inalterado e o vai-um inicial é 0.
Para calcular 23 − 45, inverta 0010 1101 para 1101 0010. Some 0001 0111 + 1101 0010 + 1 para obter 1110 1010, com vai-um de saída 0. Seu valor com sinal é −22. Deixar o vai-um inicial em 0 produziria −23: a inversão sozinha fornece um a menos que o valor negativo necessário.
Para subtração sem sinal, vai-um de saída 1 significa nenhum empréstimo; vai-um de saída 0 significa que foi necessário um empréstimo. Assim, o vai-um de saída 0 em 23 − 45 indica um resultado sem sinal abaixo de zero. O Arm registra esse vai-um que indica ausência de empréstimo; o x86 registra seu inverso como indicador de empréstimo.
Iguale as larguras antes de operar
| Interpretação | Regra de extensão | Extensão de 1110 de 4 bits para 8 bits |
|---|---|---|
| Complemento de dois com sinal | Copiar o bit de sinal | 1111 1110, ainda −2 |
| Sem sinal | Inserir zeros | 0000 1110, ainda 14 |
No RISC-V, lb estende um byte com sinal, lbu o estende com zeros e addi estende seu imediato de 12 bits com sinal. Escolha a extensão conforme o significado do operando antes de enviar os bits ao somador.
O valor com sinal mais negativo não tem um correspondente positivo na mesma largura. Negar 1000 0000 de 8 bits o inverte para 0111 1111 e soma 1, retornando 1000 0000. O +128 desejado precisa de um formato com sinal mais largo.
Principais conclusões
- Um somador completo combina dois bits de operandos e um vai-um de entrada.
- A soma armazenada de n bits é a soma matemática módulo .
- A subtração inverte o segundo operando e define apenas o vai-um de entrada inicial como 1.
- Nesse circuito de subtração, vai-um de saída 1 significa ausência de empréstimo sem sinal.
- A extensão de sinal preserva valores com sinal; a extensão com zeros preserva valores sem sinal.
1.2 Detectar estouro em resultados com e sem sinal
Estouro significa que o resultado exato está fora do intervalo do destino. Valores sem sinal de n bits vão de 0 a ; valores com sinal em complemento de dois vão de a . Oito bits comportam de 0 a 255 sem sinal ou de −128 a 127 com sinal. O mesmo resultado armazenado pode ser válido em uma interpretação e representar estouro na outra.
Teste o sinal correto
| Operação | Estouro sem sinal | Estouro com sinal |
|---|---|---|
| Adição | O vai-um de saída do bit mais significativo é 1 | Entradas com o mesmo sinal produzem resultado de sinal oposto |
| Subtração | É necessário um empréstimo | Entradas com sinais diferentes produzem resultado com sinal diferente do da primeira entrada |
Para adição ou subtração com sinal, o hardware pode usar
em que os dois sinais de vai-um entram e saem da posição de sinal. O vai-um de saída sozinho responde à questão sem sinal.
Some 107 e 54 em 8 bits: 0110 1011 + 0011 0110 produz 1010 0001. Um vai-um entra no bit 7, mas nenhum sai, portanto o estouro é 1. O valor sem sinal 161 cabe; a interpretação com sinal −95 não é igual à soma real 161. Por outro lado, −4 + 5 produz vai-um 1, mas estouro com sinal 0. Somar 1000 0000 a si mesmo produz vai-um 1 e estouro 1, portanto ambas as interpretações falham.
Somar sinais opostos não pode causar estouro: a soma exata está entre os operandos. A subtração precisa de sua própria regra de sinal porque subtrair um número negativo aumenta o primeiro operando. Por exemplo, 100 − (−40) é grande demais para 8 bits com sinal, embora ambos os valores de entrada caibam.
Saiba o que a instrução faz
No x86, add define indicadores de vai-um e de estouro. No Arm, operações que atualizam indicadores, como ADDS, os definem; o ADD comum preserva os indicadores existentes. No MIPS, add e addi geram armadilha em caso de estouro com sinal, enquanto addu e addiu não geram. A adição de inteiros no RISC-V grava os bits menos significativos e não tem indicadores de estouro nem armadilha de estouro aritmético.
Após add t0, t1, t2, uma verificação sem sinal no RISC-V é:
bltu t0, t1, overflow
Uma soma sem sinal que deu a volta é menor que um operando original. Valores com sinal precisam de outra verificação:
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow
A primeira instrução registra se o segundo operando é negativo. A segunda registra se o resultado é menor que o primeiro operando. Sem estouro, esses testes concordam: somar um negativo reduz o valor, enquanto somar um não negativo não pode reduzi-lo. Uma diferença detecta estouro. Para um imediato positivo conhecido, basta um desvio com sinal que teste se a soma diminuiu.
Separe o hardware das regras da linguagem
Em C e C++, a aritmética sem sinal dá a volta módulo ; o estouro com sinal é comportamento indefinido. Em Java, int e long dão a volta, enquanto Math.addExact informa o estouro com uma exceção. Os inteiros do Python crescem conforme necessário. Portanto, o fato de o hardware dar a volta não determina o que um programa em C pode fazer.
Adições e subtrações que dão a volta preservam um resultado final que cabe na representação: na aritmética modular de 8 bits, (100 + 50) − 60 dá a volta primeiro para −106 e depois para 90. Esse raciocínio se aplica à aritmética que dá a volta, não a expressões com sinal em C que estouram.
A saturação é uma política diferente. Em 8 bits sem sinal, 200 + 100 satura em 255 em vez de dar a volta para 44. Isso é útil para intensidades de pixels e outros sinais limitados, em que transformar um grande resultado positivo em um valor pequeno ao dar a volta seria enganoso.
Principais conclusões
- Escolha os testes de estouro conforme a interpretação dos operandos e a operação.
- O estouro com sinal é o XOR dos sinais de vai-um que entram e saem do bit de sinal.
- O software RISC-V deve testar o estouro de inteiros quando precisa informá-lo.
- O estouro com sinal em C, a volta em Java e os inteiros que crescem em Python têm semânticas diferentes.
- A adição e a subtração modulares podem recuperar um valor final representável após uma volta intermediária.
- A saturação limita um resultado fora do intervalo a uma de suas extremidades.
2Projetar uma unidade lógica e aritmética
Uma ULA transforma uma escolha de operações em um circuito compartilhado. Portas e um somador calculam resultados candidatos, linhas de controle selecionam um deles e algumas saídas extras permitem testar igualdade e ordem. Construa essa estrutura com fatias de bits, veja por que a comparação com sinal precisa de correção por estouro e depois encurte o caminho do vai-um para que um caminho de dados mais largo possa produzir seu resultado aritmético sem esperar que um vai-um atravesse todos os bits.
2.1 Construir uma ULA de n bits a partir de fatias de 1 bit
Uma unidade lógica e aritmética, ou ULA, recebe operandos e entradas de controle e produz um resultado e saídas de estado. Ela é combinacional: suas saídas dependem das entradas atuais. Registradores guardam operandos e recebem resultados; a própria ULA não armazena nada.
Construa um bit e depois repita
Uma fatia de 1 bit calcula AND, OR e uma soma de somador completo em paralelo. Um multiplexador seleciona qual resultado candidato chega ao bit de resultado. Em uma ULA de n bits, todas as fatias compartilham os controles de operação, enquanto o vai-um de saída de cada somador alimenta o vai-um de entrada da fatia seguinte. Operações lógicas funcionam independentemente em cada posição; a adição depende da cadeia de vai-um.
Um controle Bnegate inverte o segundo operando e define o vai-um de entrada do bit 0. Selecionar o somador então calcula a subtração. As fatias mais significativas recebem seu vai-um da fatia anterior, não diretamente de Bnegate. Ativar todas as entradas de vai-um inseriria valores um extras no cálculo.
Um controle Ainvert também pode inverter o primeiro operando. Selecionar AND com ambos os operandos invertidos produz NOR pela lei de De Morgan:
Selecionar OR com ambos invertidos produz NAND. Nessas equações lógicas, o sinal de mais denota OR.
Leia uma palavra de controle
Uma ULA clássica de livro didático usa os campos Ainvert, Bnegate e um seletor Operation de dois bits:
| Palavra de controle | Resultado selecionado |
|---|---|
0000 | AND |
0001 | OR |
0010 | Adição |
0110 | Subtração |
0111 | Atribuição se menor com sinal |
1100 | NOR |
Essas são as codificações desse projeto específico. São controles internos, não codificações de instruções RISC-V.
Para as entradas 0101 e 0011, o controle 0110 inverte a segunda entrada para 1100 e fornece vai-um inicial 1. O somador produz 0010, com vai-um de saída 1: 5 − 3 = 2, sem empréstimo sem sinal. Selecionar AND para as entradas originais produziria 0001. Os valores de entrada podem permanecer fixos enquanto uma mudança de controle seleciona outro caminho de resultado.
A fatia mais significativa também fornece informações de estouro e comparação. Uma redução de todos os bits de resultado fornece Zero. Essas saídas de estado permitem que o controle do processador ao redor teste o resultado aritmético sem armazenar um segundo resultado de largura completa.
Acrescente deslocamento ao lado do somador
Uma ULA completa para inteiros básicos do RISC-V também precisa de XOR, comparação sem sinal e deslocamentos. Um deslocador de barril usa uma sequência de níveis de multiplexadores. Cada nível deixa sua entrada passar ou a desloca por uma potência de dois. Um deslocador de 32 bits tem níveis para 1, 2, 4, 8 e 16 posições, portanto realiza qualquer deslocamento de 0 a 31 em cinco níveis.
Para deslocar 13 posições, selecione os níveis de 8, 4 e 1. Os deslocamentos selecionados se combinam em um resultado. Um deslocamento lógico à direita insere zeros. Um deslocamento aritmético à direita replica o bit de sinal, preservando o sinal de um valor negativo. Assim, 1111 0000 deslocado duas posições à direita produz 0011 1100 logicamente e 1111 1100 aritmeticamente.
Principais conclusões
- Uma ULA calcula a partir das entradas atuais; registradores fornecem armazenamento.
- Fatias de bits compartilham controles de operação e passam sinais de vai-um entre posições adjacentes.
- Bnegate inverte o segundo operando e fornece o vai-um inicial para subtração.
- Um multiplexador seleciona entre resultados aritméticos e lógicos.
- Os níveis de um deslocador de barril combinam deslocamentos por potências de dois.
2.2 Comparar números e detectar zero na ULA
Comparações frequentemente reutilizam a subtração. A igualdade pergunta se a diferença é zero. A ordenação pergunta se a diferença matemática é negativa, o que exige cuidado extra quando uma subtração de largura fixa estoura.
Detecte igualdade em todos os bits
A saída Zero é o NOR de todos os bits do resultado:
Um único bit de resultado diferente de zero torna Zero falso. Subtrair dois padrões de bits iguais produz zero; dois padrões distintos de n bits não podem diferir por um múltiplo diferente de zero de , portanto uma subtração que dá a volta não cria uma falsa igualdade. Um circuito alternativo de igualdade aplica XOR aos bits correspondentes dos operandos e testa se todos os resultados XOR são zero.
Corrija o sinal para menor que com sinal
A instrução slt do RISC-V grava o inteiro 1 na largura completa se o primeiro operando com sinal for menor, ou 0 caso contrário. Em uma ULA segmentada em fatias, a fatia mais significativa calcula um sinal Set e o envia de volta à entrada Less do bit 0. Todos os bits de resultado mais significativos são forçados a zero.
O sinal Set correto é
Quando não há estouro, o sinal da diferença funciona diretamente. Quando há estouro, esse sinal é invertido em relação à diferença real, portanto o XOR com 1 o corrige.
Compare 7 com −8 em quatro bits. A subtração 0111 + 0111 + 1 produz 1111. Seu sinal sugere uma diferença negativa, mas a diferença exata é 15, fora do intervalo de −8 a 7. O estouro é 1, portanto o sinal Less corrigido é 1 XOR 1 = 0. O resultado de slt é 0000, indicando corretamente que 7 não é menor que −8.
Use o empréstimo para menor que sem sinal
A comparação sem sinal usa outro sinal:
para uma subtração realizada com a segunda entrada invertida e vai-um inicial 1. Vai-um de saída 0 significa que foi necessário um empréstimo, portanto o primeiro operando sem sinal é menor.
| Padrões de entrada | Comparação com sinal | Comparação sem sinal |
|---|---|---|
0111, 1000 | 7 < −8 é falso | 7 < 8 é verdadeiro |
1000, 0111 | −8 < 7 é verdadeiro | 8 < 7 é falso |
Essa distinção aparece em slt em comparação com sltu, e nos desvios blt em comparação com bltu e bge em comparação com bgeu. Nem o sinal do resultado sozinho nem um “indicador de negativo” genérico responde às duas perguntas.
Aplique a comparação em software
Uma verificação de limites sem sinal pode rejeitar índices negativos e também índices iguais ou superiores ao comprimento do vetor:
bgeu x10, x11, IndexOutOfBounds
Aqui x10 contém o índice com sinal e x11 contém um comprimento não negativo que cabe no intervalo com sinal. Um índice negativo, reinterpretado como sem sinal, é pelo menos e, portanto, excede todo comprimento desse tipo. A condição sobre o comprimento importa: ela torna suficiente uma comparação sem sinal.
Conversões da linguagem também podem mudar o significado de uma comparação. Com um unsigned int de 32 bits em C, -1 < 0u é falso porque −1 é convertido em 4.294.967.295 antes da comparação. Acompanhe a conversão antes de raciocinar a partir do sinal de menos escrito.
Principais conclusões
- Zero testa todos os bits do resultado, portanto a subtração pode implementar a igualdade.
- A comparação menor que com sinal usa o sinal da diferença em XOR com o estouro com sinal.
- A comparação menor que sem sinal usa o empréstimo da subtração.
- A atribuição se menor grava 0 ou 1 na largura completa do resultado.
- Uma verificação de limites sem sinal detecta índices negativos quando o comprimento cabe no intervalo não negativo com sinal.
- Conversões podem mudar uma comparação de com sinal para sem sinal.
2.3 Acelerar a adição com antecipação de vai-um
O vai-um de um somador com propagação precisa atravessar cada bit em sequência. A antecipação de vai-um (carry lookahead) substitui essa espera sequencial por uma lógica que prevê os sinais de vai-um a partir dos bits dos operandos e do vai-um inicial.
Descreva o comportamento de cada bit em relação ao vai-um
Defina geração e propagação como
Essas são expressões booleanas: multiplicação é AND e adição é OR. Geração é 1 quando o bit cria um vai-um independentemente do vai-um de entrada. Propagação é 1 quando um vai-um de entrada pode passar adiante. A recorrência é
Um bit com ambas as entradas iguais a 1 gera um vai-um; um bit com uma entrada igual a 1 passa um vai-um; um bit com ambas as entradas iguais a 0 o interrompe. Com essa definição por OR, um bit que gera vai-um também tem propagação igual a 1, o que não altera a fórmula do vai-um.
Expanda a dependência
Substitua a expressão de cada vai-um anterior:
Cada expressão agora depende de sinais derivados dos operandos e do vai-um inicial, não de uma cadeia sequencial de saídas intermediárias de vai-um. Quando os sinais de vai-um estão disponíveis, cada bit de soma continua sendo o XOR de suas duas entradas e do vai-um de entrada.
Para 1011 + 0110 com vai-um inicial 0, a geração a partir do bit 0 é 0, 1, 0, 0 e a propagação é 1, 1, 1, 1. Assim, os sinais de vai-um de entrada dos bits 1 a 4 são 0, 1, 1, 1. Os quatro bits de resultado são 0001 com vai-um de saída 1, representando 11 + 6 = 17.
Construa grupos em vez de portas gigantes
Um bloco de quatro bits tem os sinais de grupo
Seu vai-um de saída é . Um segundo nível de antecipação combina esses sinais de bloco usando a mesma regra. Quatro blocos de quatro bits e uma unidade de antecipação de grupo formam um somador de 16 bits. Agrupamentos adicionais permitem projetos mais largos; somadores de prefixo paralelo, como o Kogge–Stone, organizam essas relações em uma rede rápida.
Em um modelo simples de atraso de portas, a propagação de vai-um custa cerca de dois atrasos de porta por bit, ou 32 para 16 bits. Um projeto de antecipação em dois níveis pode fornecer o último vai-um em cerca de cinco: um para os sinais de bit, dois para os sinais de grupo e dois para o vai-um de grupo. Essa estimativa conta níveis lógicos e pressupõe as portas necessárias; o atraso real também depende do tamanho das portas e das conexões. O agrupamento troca mais hardware por um caminho de vai-um que cresce aproximadamente de forma logarítmica com a largura.
Um somador com seleção de vai-um usa área de outra forma: calcula um bloco mais significativo duas vezes, uma para vai-um de entrada 0 e outra para vai-um de entrada 1. Um multiplexador seleciona o resultado correto quando chega o vai-um do bloco menos significativo.
Alguns somadores definem propagação com XOR em vez de OR. Isso também fornece sinais de vai-um corretos e permite obter a soma . Mantenha a definição escolhida consistente ao derivar a lógica de grupo.
Principais conclusões
- Geração cria um vai-um; propagação passa adiante um vai-um de entrada.
- Expandir as equações de vai-um elimina a dependência sequencial de cada saída de vai-um anterior.
- Os sinais de geração e propagação de grupo permitem que somadores largos usem vários níveis de antecipação.
- A antecipação e a seleção de vai-um trocam área de circuito por velocidade sem alterar a soma.
3Multiplicar e dividir inteiros em hardware
A multiplicação combina produtos parciais deslocados; a divisão decide um dígito do quociente a partir de um resto que muda. Acompanhe os dois processos em registradores pequenos e veja como operandos com sinal mudam os controles necessários. Multiplicadores mais rápidos formam e reduzem muitos produtos parciais juntos, enquanto divisores precisam lidar com dependências entre etapas. Instruções RISC-V disponibilizam metades do produto, quocientes e restos com regras precisas para entradas excepcionais.
3.1 Multiplicar com deslocamentos e somas
Cada bit do multiplicador binário escolhe uma cópia deslocada do multiplicando ou zero. Somar esses produtos parciais fornece o resultado. Um operando de n bits multiplicado por um operando de m bits pode exigir n + m bits, portanto dois operandos de 32 bits precisam de um produto completo de 64 bits.
Acompanhe deslocamentos e somas
Para operandos sem sinal de n bits, inicialize um produto de 2n bits com zero. Repita n vezes: teste o bit menos significativo do multiplicador, some o multiplicando atual se esse bit for 1, desloque o multiplicando à esquerda e desloque o multiplicador à direita. O registrador do multiplicando precisa ser largo o suficiente para manter suas cópias deslocadas.
Para 6 × 5 em quatro bits, o multiplicador é 0101:
| Etapa | Bit menos significativo do multiplicador | Multiplicando deslocado | Produto acumulado |
|---|---|---|---|
| 1 | 1 | 0000 0110 | 0000 0110 |
| 2 | 0 | 0000 1100 | 0000 0110 |
| 3 | 1 | 0001 1000 | 0001 1110 |
| 4 | 0 | 0011 0000 | 0001 1110 |
O produto final é 30. O bit testado e a direção do deslocamento funcionam juntos: testar o bit mais significativo enquanto o multiplicador é deslocado à direita associaria os bits aos pesos errados. Esse projeto sequencial leva n etapas, incluindo etapas cujo bit do multiplicador é zero.
Compartilhe espaço no registrador
O primeiro projeto usa um registrador de multiplicando e um somador de 2n bits. Um projeto aperfeiçoado mantém o multiplicando fixo em n bits, coloca o multiplicador na metade menos significativa de um registrador de produto de 2n bits e inicializa a metade mais significativa com zero.
Quando o bit menos significativo é 1, some o multiplicando à metade mais significativa. Mantenha o vai-um de saída do somador em um bit extra e depois desloque esse vai-um e as duas metades do produto juntos à direita. Os bits do multiplicador saem pela direita enquanto bits do produto ocupam o espaço liberado. Descartar o vai-um prejudica produtos grandes: com operandos de quatro bits, 15 × 15 se tornaria incorretamente 1 em vez de 225. Com uma etapa por clock, a implementação simples de 32 bits leva cerca de 32 ciclos.
Considere a largura do produto
Um produto sem sinal cabe em n bits exatamente quando os n bits mais significativos do produto completo são zero. Para 6 × 5, o resultado completo é 0001 1110; armazenar apenas 1110 produz 14. A multiplicação em si estava correta, mas o destino estreito descartou parte dela.
Um deslocamento de k bits à esquerda multiplica por quando o resultado cabe na representação. A multiplicação por 8 torna-se um deslocamento de três posições; a multiplicação por 10 pode usar duas cópias deslocadas:
(x << 3) + (x << 1)
A operação aritmética é . As regras de largura e da linguagem de programação ainda se aplicam aos deslocamentos e à adição; essa reescrita não cria mais bits de resultado.
Interprete as metades do resultado no RISC-V
mul retorna os XLEN bits menos significativos, em que XLEN é a largura do registrador de inteiros. mulhu retorna a metade mais significativa para operandos sem sinal. As instruções para a metade mais significativa com sinal são mulh para dois operandos com sinal e mulhsu para um primeiro operando com sinal e um segundo sem sinal.
O software que precisa do produto completo pode emitir a instrução apropriada para a metade mais significativa seguida de mul com os mesmos operandos. Uma implementação pode fundir o par. O resultado menos significativo sozinho não pode estabelecer se um produto sem sinal cabe na representação; a metade mais significativa fornece essa evidência.
Principais conclusões
- Cada bit do multiplicador seleciona um produto parcial deslocado ou zero.
- O produto completo pode exigir a soma das larguras dos operandos.
- O algoritmo sequencial de deslocamentos e somas leva uma etapa por bit do multiplicador.
- O multiplicador compacto deve preservar o vai-um da adição antes do deslocamento.
- Um produto sem sinal cabe no formato reduzido exatamente quando sua metade mais significativa é zero.
- O RISC-V fornece uma instrução de multiplicação para a metade menos significativa e três para a metade mais significativa, específicas para cada interpretação.
3.2 Multiplicar números com sinal e realizar multiplicações rápidas
A multiplicação com sinal deve tratar os sinais dos operandos sem perder o valor mais negativo. O hardware mais rápido também precisa reduzir muitos produtos parciais sem esperar uma adição completa com propagação de vai-um a cada vez.
Multiplique módulos com segurança
Uma abordagem registra os sinais, forma módulos sem sinal de n bits, multiplica-os em 2n bits e nega o produto completo se exatamente um operando for negativo. Para −8 em quatro bits, os bits de módulo 1000 representam 8 sem sinal. Eles não podem ser interpretados como um valor positivo com sinal de quatro bits.
Os n bits menos significativos do produto são idênticos nas interpretações com e sem sinal. 1111 × 0010 produz 30 sem sinal (0001 1110) ou −2 com sinal (1111 1110). Ambas as metades menos significativas são 1110; apenas as metades mais significativas diferem. Por isso, uma instrução mul serve às duas interpretações.
Acompanhe as decisões de Booth
O algoritmo de Booth opera diretamente com complemento de dois. Dê ao acumulador n + 1 bits e estenda o multiplicando com sinal até essa largura, para que ele e seu negativo caibam. Inicialize o acumulador com zero, coloque o multiplicador em seu registrador de n bits e acrescente um bit extra inicializado com zero.
Examine como um par o bit menos significativo do multiplicador e o bit acrescentado:
| Par | Operação no acumulador |
|---|---|
10 | Subtrair o multiplicando |
01 | Somar o multiplicando |
00 ou 11 | Deixá-lo inalterado |
Após cada decisão, desloque aritmeticamente à direita todo o registrador formado pelo acumulador, multiplicador e bit extra. Repita n vezes; descarte o bit acrescentado e o bit de sinal redundante mais significativo do acumulador para obter o produto de 2n bits.
Para 2 × (−3), use multiplicando 00010, multiplicador 1101 e acumulador 00000. Os pares são 10, 01, 10, 11. Após as respectivas operações e deslocamentos, acumulador e multiplicador são 11111 0110, 00000 1011, 11111 0101 e 11111 1010. Os oito bits menos significativos do produto 1111 1010 representam −6.
Um deslocamento lógico inseriria zero no extremo mais significativo e corromperia resultados parciais negativos. O bit extra do acumulador também importa: subtrair um multiplicando de n bits com o valor mais negativo exige um valor positivo indisponível em n bits com sinal.
Reduza o trabalho e os caminhos de vai-um
A recodificação de Booth substitui uma sequência de bits iguais a 1 por uma subtração na extremidade menos significativa e uma adição acima da extremidade mais significativa. Por exemplo, 126 é 128 − 2. Bits alternados podem não oferecer economia. Booth de base 4 examina dois bits do multiplicador por etapa e usa dígitos de −2 a +2, reduzindo o número de produtos parciais.
Um multiplicador rápido forma produtos parciais em paralelo. Um somador com salvamento de vai-um comprime três palavras em duas sem propagar sinais de vai-um pela palavra. Árvores de Wallace ou Dadda repetem essa redução e depois usam um somador final com propagação de vai-um. Reduzir 32 linhas a duas leva oito níveis de salvamento de vai-um. A segmentação em pipeline permite que vários produtos estejam em andamento; aceitar um por ciclo não significa que cada um termine em um ciclo.
Para um resultado com sinal reduzido a n bits, cada bit da metade mais significativa deve ser igual ao bit de sinal da metade menos significativa. Em quatro bits, −8 × −1 produz o produto completo 0000 1000. A metade mais significativa é zero, mas o bit de sinal mantido é 1, portanto +8 não cabe no destino com sinal.
Principais conclusões
- Módulos sem sinal preservam o módulo do operando com sinal mais negativo.
- Produtos com e sem sinal compartilham a metade menos significativa, mas podem ter metades mais significativas diferentes.
- Booth usa um bit extra no acumulador, decisões com pares de bits e deslocamentos aritméticos à direita.
- Sequências de bits iguais a 1 podem ser substituídas por duas operações de Booth; padrões alternados podem não economizar trabalho.
- Árvores com salvamento de vai-um reduzem muitos produtos parciais antes de uma adição final com propagação de vai-um.
- A segmentação em pipeline separa a latência do resultado da taxa de início de novos produtos.
- Um produto com sinal cabe no formato reduzido quando a metade mais significativa é a extensão de sinal da metade menos significativa.
3.3 Dividir inteiros e tratar os casos especiais
A divisão produz um quociente e um resto relacionados por
Para um divisor sem sinal diferente de zero, o resto é não negativo e menor que o divisor. Um dividendo e um divisor de n bits precisam de um quociente e um resto de n bits.
Produza o quociente um bit de cada vez
Leia os bits do dividendo a partir do extremo mais significativo. Dobre o resto parcial, incorpore o próximo bit e teste se o divisor cabe. Se couber, subtraia-o e escreva o bit de quociente 1; caso contrário, mantenha o resto parcial e escreva 0.
Para 0111 dividido por 0010, os restos parciais após incorporar cada bit são 0, 1, 3 e 3. Os dois primeiros são menores que 2, portanto seus bits de quociente são 0. Cada 3 permite uma subtração, deixando resto 1 e bit de quociente 1. O quociente é 0011 e o resto é 0001: 3 × 2 + 1 = 7.
A divisão com restauração tenta primeiro a subtração. Se o resultado da tentativa for negativo, some o divisor de volta e escreva 0; caso contrário, mantenha-o e escreva 1. Detecte a falha com um empréstimo ou uma diferença com sinal de n + 1 bits. Um teste de sinal de n bits não é seguro: em quatro bits, 0 − 9 dá a volta para 0111, cujo bit mais significativo é 0 apesar do empréstimo.
O hardware compacto coloca o dividendo na metade menos significativa de um registrador de 2n bits e o resto parcial na metade mais significativa. Ele desloca à esquerda em cada etapa e insere bits de quociente à direita. Ao final, a metade mais significativa contém o resto e a menos significativa contém o quociente.
A divisão sem restauração leva adiante um resultado de tentativa negativo e soma o divisor durante a etapa seguinte em vez de restaurar imediatamente. Um resto parcial final negativo precisa de uma última soma de volta. A divisão SRT seleciona vários bits de quociente por etapa usando os bits iniciais do divisor e do resto; entradas ausentes em uma tabela de seleção desse tipo causaram o erro FDIV do Pentium em 1994. A divisão continua dependente de cada resto parcial anterior.
Aplique a divisão com sinal por truncamento
Divida os módulos, negue o quociente se os sinais forem diferentes e atribua a um resto diferente de zero o sinal do dividendo.
| Cálculo | Quociente | Resto |
|---|---|---|
| −7 dividido por 2 | −3 | −1 |
| 7 dividido por −2 | −3 | 1 |
| −7 dividido por −2 | 3 | −1 |
Esses resultados truncam o quociente em direção a zero e preservam a identidade da divisão. RISC-V, Java e C desde C99 usam essa regra. Em Python, // arredonda para baixo: -7 // 2 é −4 e -7 % 2 é 1.
Trate entradas excepcionais
A divisão por zero no RISC-V retorna um quociente com todos os bits ativados e o dividendo original como resto. O caso de estouro com sinal, o valor mais negativo dividido por −1, retorna o quociente mais negativo e resto zero. Nenhum dos casos gera armadilha. O x86 gera uma exceção de erro de divisão para ambos. O software que precisa informar erros verifica primeiro o zero e também verifica o par que causa estouro com sinal.
Um deslocamento lógico à direita divide valores sem sinal por potências de dois, arredondando para baixo. Um deslocamento aritmético também arredonda valores negativos para baixo: −5 deslocado uma posição à direita torna-se −3, enquanto a divisão por 2 com truncamento produz −2. Para implementar o truncamento com um deslocamento, some a uma entrada negativa antes de deslocá-la k posições à direita. Para −5 e k = 1, desloque −4 para obter −2.
Principais conclusões
- O quociente e o resto devem satisfazer a identidade da divisão.
- A divisão com restauração soma o divisor de volta após uma subtração de tentativa malsucedida.
- É necessário um empréstimo ou um bit extra de diferença para testar com segurança uma subtração de tentativa sem sinal.
- A divisão com sinal por truncamento atribui a um resto diferente de zero o sinal do dividendo.
- O RISC-V define saídas sem armadilha para divisão por zero e estouro do quociente com sinal.
- O deslocamento aritmético à direita e a divisão com sinal por truncamento diferem para valores negativos com resto.
4Representar números reais em ponto flutuante IEEE 754
O ponto flutuante armazena um sinal, uma escala e uma quantidade limitada de bits significativos. Decodifique esses campos para distinguir intervalo de precisão e depois use os padrões de expoente reservados para reconhecer zeros, subnormais, infinitos e NaNs. Os valores especiais fazem parte do sistema aritmético: permitem que resultados minúsculos se aproximem de zero gradualmente e que operações excepcionais retornem resultados definidos enquanto registram indicadores de estado.
4.1 Codificar e decodificar formatos binários IEEE 754
Um valor normal de ponto flutuante binário tem a forma
O significando é o valor completo 1,f; a fração armazenada contém apenas f. A normalização garante o 1 inicial, portanto omitir esse bit oculto acrescenta um bit de precisão.
Leia os três campos
| Formato | Bits de sinal | Bits de expoente | Bits de fração | Viés | Precisão |
|---|---|---|---|---|---|
| binary16 | 1 | 5 | 10 | 15 | 11 bits |
| binary32 | 1 | 8 | 23 | 127 | 24 bits |
| binary64 | 1 | 11 | 52 | 1023 | 53 bits |
O IEEE 754-2019 define esses formatos. Precisão simples e dupla geralmente significam binary32 e binary64. A ordem de armazenamento é sinal, expoente, fração. Para um valor normal, subtraia o viés do campo de expoente sem sinal:
Fração significa a fração binária após a vírgula, não seus bits interpretados como inteiro. Em binary32, campos de expoente de 1 a 254 codificam expoentes de −126 a 127. Os campos 0 e 255 têm significados especiais.
Um viés faz com que expoentes maiores tenham campos sem sinal maiores. Para números positivos finitos, a ordenação sem sinal dos padrões completos segue a ordenação numérica. Valores negativos e NaNs exigem tratamento adicional.
Codifique e decodifique
Para codificar −0,75, escreva seu módulo como . O sinal é 1 e o campo de expoente é −1 + 127 = 126, ou 01111110. Descarte o 1 inicial oculto e preencha a fração com zeros. Os campos são 1 01111110 10000000000000000000000, resultando em 0xBF400000. Em binary64, o mesmo valor é 0xBFE8000000000000.
Para decodificar 0x41460000, divida-o em 0 10000010 10001100000000000000000. O campo de expoente é 130, portanto o expoente real é 3. O significando é
Multiplicar por 8 produz 12,375. Escrever o 1 oculto na fração armazenada alteraria o valor; armazenar −1 diretamente no campo de expoente perderia a regra do viés.
Diferencie intervalo de precisão
O binary32 alcança aproximadamente , com menor normal positivo e cerca de sete algarismos decimais significativos. O binary64 alcança aproximadamente , com menor normal positivo e cerca de 15 a 16 algarismos significativos. O binary16 tem máximo 65.504, menor normal positivo , menor subnormal positivo e cerca de 3,3 algarismos decimais significativos.
A precisão conta algarismos significativos, não algarismos após a vírgula decimal. Por exemplo, binary32 armazena 1.234.567,89 como 1.234.567,875.
No intervalo binary32 de até , valores normais adjacentes são espaçados por . Esse espaçamento é uma ulp, uma unidade na última posição. Logo acima de 1, ele é , frequentemente chamado épsilon de máquina. Em , o espaçamento passa a ser 2, portanto 16.777.217 está ausente mesmo que números muito maiores caibam. Mais bits de expoente ampliam o intervalo de escala; mais bits de fração aproximam os valores representáveis em uma dada escala.
Principais conclusões
- Formatos normais omitem da fração armazenada o 1 inicial garantido.
- Decodifique um expoente normal subtraindo seu viés.
- binary16, binary32 e binary64 têm precisão de 11, 24 e 53 bits.
- Intervalo e precisão são limites diferentes.
- O espaçamento entre números normais cresce com o expoente.
4.2 Usar zeros, infinitos, NaNs e números subnormais
Padrões de expoente reservados permitem que o IEEE 754 represente valores além dos números normalizados comuns. Sempre classifique os campos antes de aplicar uma fórmula de valor.
Reconheça os padrões reservados
| Campo de expoente | Campo de fração | Significado |
|---|---|---|
| Todos os bits zero | Zero | Zero com sinal |
| Todos os bits zero | Diferente de zero | Subnormal |
| Todos os bits ativados | Zero | Infinito com sinal |
| Todos os bits ativados | Diferente de zero | NaN |
O binary32 tem +0 em 0x00000000 e −0 em 0x80000000. Eles são iguais na comparação, mas a divisão pode revelar o sinal: 1 dividido por +0 produz +∞, enquanto 1 dividido por −0 produz −∞. Um resultado negativo minúsculo que é arredondado para zero torna-se −0.
O infinito positivo é 0x7F800000; o maior valor positivo finito é 0x7F7FFFFF. No arredondamento para o mais próximo, o estouro aritmético retorna um infinito com sinal. Dividir um valor finito diferente de zero por zero também retorna infinito com sinal, com outro indicador de exceção. Operações posteriores tratam o infinito de modo consistente: somar 1 a +∞ mantém +∞, multiplicá-lo por −2 produz −∞ e seu recíproco é +0.
Diferencie NaN de infinito
Operações como zero dividido por zero, infinito menos ele mesmo, zero vezes infinito e a raiz quadrada real de −1 não têm resultado numérico significativo. Elas produzem NaN, “não é um número”, e sinalizam operação inválida.
NaN é não ordenado: testes de igualdade e de ordenação menor que ou maior que envolvendo NaN são falsos, enquanto o de desigualdade é verdadeiro. Em particular, x == NaN não detecta NaN. Use isnan(x). NaNs silenciosos normalmente se propagam pelas operações aritméticas; NaNs sinalizadores geram operação inválida quando usados. Nesses formatos binários, o bit mais significativo da fração distingue um NaN silencioso. O NaN silencioso binary32 canônico do RISC-V é 0x7FC00000.
Aproxime-se de zero gradualmente
Um subnormal não tem 1 oculto. Seu expoente é fixado no menor expoente normal:
Para binary32, 0x00000001 é e 0x00400000 é . Para binary64, o menor valor positivo é . Usar o expoente menos o viés com um campo de expoente zero produziria um erro de um fator de dois, mesmo antes de acrescentar incorretamente um 1 oculto.
Os subnormais proporcionam subfluxo gradual: a precisão diminui à medida que os valores diminuem, com espaçamento absoluto fixo perto de zero. Valores finitos distintos em um formato ainda têm uma diferença representável diferente de zero. Modos de substituição por zero descartam essa proteção e podem acelerar o tratamento de subnormais em alguns processadores.
Leia os indicadores de exceção
O IEEE 754 define operação inválida, divisão por zero, estouro, subfluxo e resultado inexato. O tratamento padrão retorna um resultado e registra o estado; ele não precisa interromper a execução. Resultado inexato significa que o resultado arredondado difere do resultado exato.
No tratamento padrão, o subfluxo exige que o resultado seja minúsculo e inexato. Em binary32, é um subnormal exato e não ativa o indicador de subfluxo. O RISC-V registra NV, DZ, OF, UF e NX em fflags dentro de fcsr, e exceções de ponto flutuante não acionam armadilhas aritméticas. Um infinito retornado sozinho não identifica se ocorreu estouro ou divisão por zero; examine o indicador.
Principais conclusões
- Classifique campos de expoente reservados antes de decodificar um valor normal.
- Zeros com sinal são iguais na comparação, mas podem produzir infinitos com sinais diferentes.
- NaN é não ordenado e deve ser detectado com um teste de NaN.
- Subnormais usam um 0 inicial e expoente um menos o viés.
- O subfluxo gradual preserva pequenas diferenças que a substituição por zero pode apagar.
- Um subnormal exato não ativa o indicador de subfluxo.
5Calcular e arredondar com números de ponto flutuante
O hardware de ponto flutuante precisa mover e combinar bits significativos antes de arredondar a resposta. Percorra alinhamento, normalização e arredondamento e depois relacione essas etapas a falhas de precisão conhecidas. Bits extras de arredondamento distinguem um empate de um valor logo acima dele, e a multiplicação e adição fundidas preservam informações que duas operações separadas podem perder. Os mesmos limites explicam somas que mudam, contadores que param e conversões arriscadas.
5.1 Somar e multiplicar números de ponto flutuante
A aritmética de ponto flutuante opera separadamente sobre significandos e expoentes. O resultado final deve ser o resultado exato da operação arredondado para o formato de destino, portanto a movimentação intermediária de bits deve preservar informações suficientes para essa última decisão.
Some com um expoente compartilhado
A adição segue quatro estágios: alinhar, operar, normalizar, arredondar. Compare os expoentes e desloque o significando do menor operando à direita pela diferença entre eles. Some os módulos para sinais iguais; subtraia os módulos para sinais opostos. Desloque o resultado para a forma normalizada e ajuste seu expoente. Depois arredonde, normalizando novamente se o arredondamento criar um vai-um.
Use significandos de quatro bits para examinar 0,5 + (−0,4375):
- Escreva os operandos como e .
- Alinhe o segundo para .
- Subtraia os módulos: .
- Normalize para , ou 0,0625. Nenhum bit diferente de zero foi perdido, portanto nenhuma alteração por arredondamento é necessária.
O cancelamento pode exigir um grande deslocamento de normalização à esquerda. O hardware usa um subtrator de expoentes, um deslocador de alinhamento, um somador de significandos, um contador de zeros à esquerda e lógica de normalização e arredondamento. Somadores de ponto flutuante geralmente são segmentados em pipeline ao longo de vários ciclos.
Um modelo decimal mostra por que algarismos extras importam: com quatro algarismos significativos, 99,99 + 0,161 é alinhado como na escala . O resultado intermediário exato é 10,01510 nessa escala. Normalize para e arredonde para . Cortar a parcela alinhada cedo demais perderia informações necessárias para escolher 100,2.
Multiplique escalas e significandos
Multiplique os significandos, some os expoentes reais e aplique XOR aos sinais. Com campos com viés, subtraia o viés uma vez:
antes dos ajustes de normalização. Dois significandos normais multiplicados produzem um valor de 1 até 4, portanto seu produto precisa de no máximo um deslocamento de normalização à direita. O arredondamento pode exigir outro ajuste; os limites do expoente também precisam ser verificados.
Para 0,5 × (−0,4375), os campos de expoente binary32 fornecem 126 + 125 − 127 = 124, ou expoente real −3. O produto dos significandos é . O XOR dos sinais é 1, produzindo .
Arredonde uma vez com multiplicação e adição fundidas
A FMA calcula a × b + c com um arredondamento após a expressão completa. A multiplicação e a adição separadas arredondam duas vezes. Em binary32, considere , e c = −1. Seu produto exato é . Uma multiplicação separada o arredonda para 1, portanto a adição retorna zero. A FMA mantém a pequena diferença do produto e retorna .
A extensão F do RISC-V fornece 32 registradores de ponto flutuante, de f0 a f31; D amplia o mesmo banco para precisão dupla. flw/fsw e fld/fsd transferem valores. As operações aritméticas incluem fadd.s, fmul.s, fdiv.s e fsqrt.s, com formas .d para precisão dupla. fmadd.s calcula multiplicação e adição fundidas. Comparações como flt.s gravam 0 ou 1 em um registrador de inteiros, e fcvt converte formatos ou valores inteiros.
Principais conclusões
- A adição alinha os expoentes antes de combinar os significandos.
- A normalização altera tanto a posição do significando quanto o expoente.
- Multiplicar campos de expoente com viés exige subtrair um viés.
- O arredondamento pode exigir uma segunda normalização.
- A FMA arredonda o produto mais a soma completos uma vez.
- As operações aritméticas das extensões F e D do RISC-V usam um banco de registradores de ponto flutuante; as comparações retornam valores lógicos inteiros.
5.2 Arredondar resultados corretamente
Um formato finito não pode armazenar todo resultado exato. Arredondamento correto significa escolher o resultado representável exigido pela direção de arredondamento, como se a operação tivesse sido primeiro calculada exatamente. A aritmética básica, a raiz quadrada e a FMA obedecem a essa regra. Os bits de conteúdo e de sinal de NaN não precisam ser idênticos entre processadores.
Escolha uma direção de arredondamento
| Direção | Regra |
|---|---|
| roundTiesToEven | Valor mais próximo; um empate exato escolhe um bit final do significando igual a 0 |
| roundTowardPositive | Em direção a +∞ |
| roundTowardNegative | Em direção a −∞ |
| roundTowardZero | Em direção a zero |
| roundTiesToAway | Valor mais próximo; um empate exato vai para longe de zero |
As quatro primeiras são exigidas para implementações binárias; o desempate para o par é o padrão. O desempate para longe de zero é exigido para formatos decimais, e o RISC-V também o fornece para operações binárias. Seus nomes são RNE, RUP, RDN, RTZ e RMM; uma instrução pode selecionar um modo diretamente ou usar o modo dinâmico em fcsr.
Para desempate para o par ao arredondar para inteiros, 2,5 torna-se 2 e 3,5 torna-se 4. Em binário, com significandos de quatro bits, é arredondado para , e também é arredondado para . O bit par pertence ao significando mantido, não ao expoente ou a um algarismo decimal exibido.
Mantenha informações de guarda, arredondamento e aderência
Após a normalização, mantenha dois bits adicionais além do significando de destino: guarda e arredondamento. O bit de aderência é o OR de todos os bits descartados posteriores. Ele registra se toda essa parte restante é zero.
Para arredondamento ao mais próximo, guarda 0 significa abaixo da metade. Guarda 1 com arredondamento ou aderência igual a 1 significa acima da metade. Guarda 1 com os dois indicadores posteriores iguais a 0 significa um empate exato. Em um empate, incremente o significando mantido somente se seu bit menos significativo atual for 1.
Para uma soma de 8 + 0,5625 com significandos de quatro bits, o alinhamento fornece
Mantenha 1.000; guarda é 1, arredondamento é 0 e aderência é 1 porque a parte restante contém um 1. O valor está acima da metade, portanto incremente para . Descartar a aderência transformaria isso falsamente em um empate e escolheria 8.
Um bit de aderência é uma evidência sobre todos os bits perdidos, não apenas o terceiro bit após a parte mantida. Durante o deslocamento, quando algum bit perdido é 1, o estado de aderência permanece em 1 para essa parte acumulada.
Interprete erro e estouro
Para resultados finitos dentro do intervalo, o arredondamento para o mais próximo tem erro absoluto de no máximo meia ulp; o arredondamento direcionado tem erro menor que uma ulp. Para resultados normais binary32, o limite relativo usual do arredondamento para o mais próximo é ; para binary64, é . Resultados subnormais exigem raciocínio com erro absoluto porque sua precisão relativa diminui.
A direção de arredondamento também controla os resultados de estouro. Um estouro positivo produz +∞ no arredondamento para o mais próximo ou em direção ao positivo, mas o maior valor positivo finito no arredondamento em direção a zero ou ao negativo. Um estouro negativo produz o comportamento inverso.
Conversões para inteiros têm regras próprias. Em C, conversões representáveis como (int)2.7 e (int)-2.7 truncam para 2 e −2, independentemente da direção atual de arredondamento em ponto flutuante. Verifique o intervalo de destino e a parte fracionária descartada.
Principais conclusões
- O arredondamento correto escolhe o valor de destino a partir do resultado exato e da direção de arredondamento.
- Um empate exato no arredondamento para o mais próximo escolhe o vizinho cujo bit menos significativo mantido é 0.
- Guarda e arredondamento preservam dois bits extras; aderência registra qualquer parte posterior diferente de zero.
- Um bit de aderência diferente de zero pode distinguir um resultado acima da metade de um empate.
- A direção de arredondamento controla se o estouro retorna infinito ou um limite finito.
5.3 Prever e evitar erros de precisão
Erros de ponto flutuante frequentemente decorrem diretamente do espaçamento finito. Separe o erro já presente nos operandos armazenados do arredondamento realizado por uma operação e da informação perdida durante uma conversão.
Identifique o erro de representação
Uma fração irredutível tem expansão binária finita exatamente quando seu denominador é uma potência de dois. Valores como 0,5, 0,25 e 0,375 são exatos. A expansão de 0,1 se repete, portanto binary32 armazena 0x3DCCCCCD, cerca de 0,10000000149011612. binary64 também armazena uma aproximação.
Consequentemente, 0.1 + 0.2 em binary64 produz 0,30000000000000004, diferente do valor armazenado mais próximo de 0,3. Um resultado curto exibido, como 0.1, pode ser o menor decimal que, convertido de volta, produz os mesmos bits armazenados; isso não estabelece exatidão.
Para resultados finitos aproximados, use uma tolerância escolhida para o problema, por exemplo
A tolerância absoluta trata valores próximos de zero; a tolerância relativa varia com o módulo. As tolerâncias devem refletir o cálculo e o erro aceitável, não apenas o número de algarismos exibidos.
Observe a adição perder uma entrada pequena
A absorção ocorre no arredondamento para o mais próximo quando uma pequena parcela não consegue mover um operando grande para seu próximo vizinho representável. Em binary32, 16.777.216 + 1 é arredondado de volta para 16.777.216: os valores vizinhos estão separados por dois, e esse empate seleciona o significando par. Um contador float que soma 1 pode, portanto, parar de avançar.
Alterar a ordem da adição pode alterar a resposta. Com binary32, x = −1,5 × 10³⁸, y = 1,5 × 10³⁸ e z = 1, (x + y) + z produz 1. Mas y + z é arredondado para y, portanto x + (y + z) produz zero. A adição não é associativa. Reduções paralelas podem mudar seu agrupamento quando a quantidade de threads muda, afetando os bits finais.
O arredondamento repetido também se acumula: somar 0,1 em binary32 dez milhões de vezes a um total binary32 produz 1.087.937 em vez de 1.000.000. Um acumulador mais largo reduz a perda por arredondamento. Somar primeiro módulos menores também pode preservar contribuições que um total acumulado grande absorveria.
Separe cancelamento de subtração inexata
O cancelamento remove algarismos iniciais comuns de operandos quase iguais. A subtração em si pode ser exata enquanto erros anteriores dos operandos se tornam grandes em relação à resposta pequena. Em binary32, 1,0000001 é armazenado como . Subtrair 1 produz cerca de em vez de , aproximadamente 19% de erro relativo.
Verifique conversões e escolhas de formato
binary64 representa exatamente todo inteiro de 32 bits. binary32 não: 16.777.217 é arredondado para 16.777.216 no desempate para o par. Acima de , binary64 também deixa de representar alguns inteiros. Converter um valor de ponto flutuante para um tipo inteiro menor pode ultrapassar completamente seu intervalo.
No primeiro voo do Ariane 5, em 1996, uma conversão fora do intervalo de ponto flutuante de 64 bits para um inteiro com sinal de 16 bits desligou os sistemas de referência inercial e contribuiu para a perda do foguete. Na falha do Patriot em 1991, em Dhahran, uma aproximação truncada de 0,1 em ponto fixo acumulou cerca de 0,34 s de erro de tempo após cerca de 100 horas, deslocando a janela de rastreamento em cerca de 687 m. Esse foi um erro de representação em ponto fixo, não uma operação IEEE de ponto flutuante.
Escolha binary64 para maior precisão de uso geral, binary32 quando seu menor uso de memória for adequado à tarefa e binary16 ou bfloat16 para cargas de trabalho adequadas de baixa precisão. bfloat16 tem oito bits de expoente e sete de fração. Valores monetários exatos pertencem a unidades monetárias menores expressas em inteiros ou a um tipo decimal.
Principais conclusões
- Uma fração binária finita exige um denominador que seja potência de dois após a redução.
- Uma saída decimal curta pode ocultar erro de representação.
- A absorção e o arredondamento repetido podem alterar somas e parar contadores de ponto flutuante.
- A adição em ponto flutuante não é associativa, portanto o agrupamento afeta a reprodutibilidade.
- O cancelamento expõe o erro anterior dos operandos em relação a uma pequena diferença.
- Conversões exigem verificações de precisão e de intervalo.
- A escolha do formato depende da precisão, do intervalo e do custo de armazenamento necessários.
Exercícios resolvidos de Aritmética computacional
1Acompanhar um somador e avaliar seu resultado
12 passos
- 1IntroduçãoPrimeiro os bits, depois a interpretação
Um somador de 8 bits mantém oito bits de soma e produz um vai-um de saída. Os mesmos bits de soma podem representar um valor sem sinal ou um valor com sinal em complemento de dois. Se eles correspondem ao resultado pretendido depende dessa interpretação.
Comece com 58 + 27. Ambos os valores cabem nas duas interpretações, portanto você pode acompanhar primeiro o circuito e depois examinar os intervalos.
- 2ExplicaçãoUma posição combina três bits
Um somador completo combina dois bits de entrada e o vai-um de entrada. Sua soma é o XOR deles. Seu vai-um de saída é 1 quando pelo menos duas das três entradas são 1.
Em um somador com propagação de vai-um, esse vai-um de saída torna-se o vai-um de entrada da posição seguinte. Apenas a posição menos significativa recebe diretamente o vai-um inicial. Para adição comum, o vai-um inicial é zero.
- 3ExemploCalcule as colunas menos significativas
Escreva 58 como
0011 1010e 27 como0001 1011. Começando pela direita, o bit 0 soma 0 e 1 com vai-um 0, produzindo soma 1 e vai-um 0.O bit 1 soma 1 e 1, produzindo soma 0 e vai-um 1. O bit 2 então soma 0 e 0 com esse vai-um, produzindo soma 1 e vai-um 0. O vai-um deve ser incluído onde chega, mesmo quando ambos os bits dos operandos são zero.
- 4ExemploConclua a soma
Continue pelas posições mais significativas. O bit 3 soma dois bits iguais a 1, produzindo soma 0 e vai-um 1. O bit 4 combina dois bits iguais a 1 com esse vai-um, produzindo soma 1 e vai-um 1. O bit 5 combina 1, 0 e 1, produzindo soma 0 e vai-um 1. O bit 6 recebe esse vai-um e produz 1.
O resultado completo é
0101 0101, ou 85. O vai-um final é 0, e o resultado com sinal permanece positivo. - 5DesafioEscolha a extensão
Um operando com sinal de 4 bits
1011deve ser somado a um operando de 8 bits. Qual padrão de 8 bits preserva seu valor e o que a extensão com zeros faria?---reveal---
A extensão de sinal produz
1111 1011, ainda −5. A extensão com zeros produz0000 1011, ou +11, alterando a entrada antes da adição. A extensão segue a interpretação do operando, não a largura do outro operando. - 6ExemploReutilize o somador para subtração
Agora calcule 58 − 27. Inverta
0001 1011para1110 0100e defina o vai-um inicial como 1. Some0011 1010+1110 0100+ 1 para obter0001 1111, com vai-um de saída 1.O resultado é 31. Nessa subtração sem sinal, vai-um de saída 1 significa ausência de empréstimo. Inverter o segundo operando sem o 1 inicial produziria 30.
- 7Ideia-chaveVai-um e estouro respondem a perguntas diferentes
O vai-um de saída informa se uma adição sem sinal excedeu os bits disponíveis. O estouro com sinal testa o intervalo com sinal: parcelas de mesmo sinal não devem produzir um resultado de sinal oposto.
O hardware calcula o estouro com sinal aplicando XOR ao vai-um de entrada e ao vai-um de saída do bit de sinal. Pode haver vai-um sem estouro com sinal, estouro com sinal sem vai-um, ambos ou nenhum.
- 8ExemploUma soma válida sem sinal pode falhar com sinal
Some 90 e 60 em 8 bits. O resultado é
1001 0110, com vai-um de saída 0. O valor sem sinal 150 cabe no intervalo de 0 a 255.Ambas as entradas com sinal são positivas, mas a interpretação com sinal armazenada é −106. Portanto, o estouro com sinal é 1. O padrão armazenado continua sendo os oito bits menos significativos de 150; é o intervalo do destino com sinal que não comporta o resultado exato.
- 9DesafioInterprete os dois sinais
Um somador de 8 bits soma
1111 0110e0001 0100, produzindo0000 1010com vai-um de saída 1. O que as interpretações sem sinal e com sinal mostram?---reveal---
Sem sinal, 246 + 20 = 266 estoura e armazena 10. Com sinal, −10 + 20 = 10 cabe, portanto o estouro com sinal é 0. A adição de sinais opostos não pode estourar o intervalo com sinal, embora esse cálculo de bits tenha um vai-um de saída.
- 10ConexãoO programa decide como responder
A instrução
adddo RISC-V retorna os bits menos significativos sem indicadores ou armadilha de estouro. Uma verificação sem sinal pode comparar a soma com uma entrada; um resultado menor sinaliza que houve volta. A verificação com sinal deve usar relações com sinal.As regras da linguagem também importam. A adição sem sinal em C dá a volta, enquanto o estouro com sinal é indefinido. A adição de inteiros em Java dá a volta, e os inteiros do Python crescem. Acompanhar corretamente os bits, por si só, não determina o comportamento no nível da linguagem.
- 11DesafioRelacione subtração ao intervalo com sinal
Uma ULA de 8 bits calcula 100 − (−35). Qual valor com sinal é armazenado e qual interpretação exige informar estouro?
---reveal---
O resultado exato com sinal é 135, cujos oito bits menos significativos são
1000 0111, interpretados como −121. A subtração com sinal estoura porque as entradas têm sinais diferentes e o sinal do resultado difere do sinal de 100. Interpretar o segundo padrão como 221 sem sinal produz 100 − 221, que precisa de um empréstimo sem sinal. - 12RecapitulaçãoEscolha um teste de intervalo após acompanhar os bits
Adição e subtração compartilham somadores completos, com inversão e vai-um inicial selecionando a subtração. Estenda cada entrada conforme seu significado antes de operar.
Depois, verifique vai-um ou empréstimo para valores sem sinal e estouro para valores com sinal. Em seguida, aplique as regras do processador e da linguagem. A aritmética de saturação faz outra escolha: limita um resultado fora do intervalo a uma extremidade em vez de manter os bits menos significativos que deram a volta.
2Construir uma ULA que compara corretamente
14 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoVários resultados, uma saída selecionada
- 2ExplicaçãoRepita uma fatia de um bit
- 3ExemploDecodifique os controles de um projeto
- 4DesafioConstrua NOR com as mesmas portas
- 5ConexãoDesloque pelas distâncias selecionadas
- 6ExplicaçãoReduza o resultado a Zero
- 7ExemploVeja um sinal enganoso da diferença
- 8DesafioInterprete os mesmos padrões de duas formas
- 9ExplicaçãoDescreva um vai-um antes que ele chegue
- 10ExemploPreveja o vai-um final de um bloco
- 11DesafioUm vai-um gerado encontra uma interrupção
- 12Ideia-chaveUse portas para reduzir a espera
- 13DesafioMantenha a comparação correta com um somador mais rápido
- 14RecapitulaçãoSepare seleção, interpretação e velocidade
3Acompanhar um produto e um quociente no hardware
18 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoProdutos combinam linhas; quocientes resultam de decisões
- 2ExemploEscolha produtos parciais para 9 vezes 6
- 3ExemploConclua as contribuições selecionadas
- 4Ideia-chavePreserve o vai-um do multiplicador compacto
- 5DesafioVerifique um produto sem sinal em formato estreito
- 6ExplicaçãoMantenha o módulo com sinal em bits sem sinal
- 7ExplicaçãoPrepare o registrador de Booth
- 8ExemploExecute as duas primeiras etapas de Booth
- 9ExemploConclua o produto com sinal
- 10DesafioTeste se o resultado com sinal cabe após a multiplicação
- 11ConexãoComprima linhas em vez de concluir cada soma
- 12ExemploIncorpore os primeiros bits do dividendo
- 13ExemploComplete o quociente e o resto
- 14DesafioAplique a regra do resto com sinal
- 15DicaUse o empréstimo na subtração de tentativa
- 16DesafioRelacione um atalho de divisão à multiplicação
- 17ConexãoInterprete resultados excepcionais do RISC-V
- 18RecapitulaçãoVerifique a identidade e o destino
4Decodificar bits de ponto flutuante antes de calcular
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoUma escala e um conjunto limitado de algarismos
- 2ExemploNormalize o módulo
- 3ExemploSome o viés e monte os campos
- 4DesafioDecodifique outro valor normal
- 5ExplicaçãoO intervalo não garante detalhes inteiros
- 6ExplicaçãoClassifique primeiro os expoentes reservados
- 7ExemploDecodifique um subnormal sem 1 oculto
- 8Ideia-chaveUm resultado minúsculo exato não precisa de indicador de subfluxo
- 9DesafioDiferencie infinito de um resultado inválido
- 10DicaTeste NaN sem igualdade
- 11DesafioRelacione a codificação ao subfluxo gradual
- 12RecapitulaçãoInterprete os campos antes de avaliar um valor
5Alinhar, arredondar e explicar a perda de precisão
18 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoMantenha informações até a decisão de arredondamento
- 2ExemploAlinhe uma adição
- 3ExemploNormalize antes de escolher o vizinho
- 4ExplicaçãoMultiplique com uma correção de viés
- 5DesafioCorrija um cálculo de expoente
- 6ExplicaçãoUm bit mantido par resolve um empate
- 7ExemploAcompanhe guarda, arredondamento e aderência
- 8DesafioDiferencie um empate de um valor próximo
- 9ConexãoA direção de arredondamento altera resultados negativos
- 10Ideia-chaveA FMA preserva um produto até depois da adição
- 11ExplicaçãoUma entrada decimal pode chegar já arredondada
- 12ExemploUm contador alcança uma barreira de espaçamento
- 13DesafioPreveja uma mudança de agrupamento
- 14Ideia-chaveUma subtração exata pode expor um erro anterior
- 15DicaEscolha uma tolerância que funcione perto de zero
- 16DesafioVerifique uma conversão de ida e volta de inteiro
- 17DesafioCombine alinhamento, aderência e absorção
- 18RecapitulaçãoLocalize a perda de informação
Questões de Aritmética computacional
Conjunto 1: Somas de inteiros, subtração e decisões da ULA10 Questões de Prática
Questão 1 de 10
Mostrar respostaOcultar resposta
Questão 2 de 10
Mostrar respostaOcultar resposta
Questão 3 de 10
Mostrar respostaOcultar resposta
Questão 4 de 10
Mostrar respostaOcultar resposta
Questão 5 de 10
1101?Mostrar respostaOcultar resposta
1111 1101 ainda representa −3; a extensão com zeros para 0000 1101 reinterpretaria o padrão original como 13 sem sinal e alteraria seu valor com sinal.Questão 6 de 10
0101 e b = 1010, quais resultados na largura completa slt com sinal e sltu sem sinal produzem?Mostrar respostaOcultar resposta
Questão 7 de 10
Mostrar respostaOcultar resposta
Questão 8 de 10
Mostrar respostaOcultar resposta
Questão 9 de 10
Mostrar respostaOcultar resposta
Questão 10 de 10
1001 0110. Quais são seu resultado e sua saída Zero?Mostrar respostaOcultar resposta
Conjunto 2: Redes de vai-um e formação de produtos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
1001 e b = 0111 com vai-um inicial 0. Quais são a geração de grupo, a propagação de grupo e o vai-um final?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
1110 e 0011. Quais metades mais significativas resultam das multiplicações com e sem sinal e algum dos produtos cabe em seu respectivo intervalo de 4 bits?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 3: Produtos com sinal, divisão e atalhos aritméticos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
q = div(a, b), r = rem(a, b) e depois q × b + r com aritmética que dá a volta. Para a = −2³¹ e b = −1, o que acontece?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 4: Campos de ponto flutuante e valores excepcionais10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
101 seguida de zeros. Qual é seu valor?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
0x00000008?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 5: Decisões de arredondamento e perda de precisão10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 6: Diagnosticar operações aritméticas no caminho de dados10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
0111 1000 de a = 1000 1010. Quais são os resultados de menor que com e sem sinal e a saída Zero?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
1010 e 0101 com vai-um de entrada 1. O bit menos significativo do segundo operando muda de 1 para 0. O que acontece com o vai-um final e a soma?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Absorção
Acumulador
Alinhamento dos significandos
Antecipação de vai-um
Aritmética de saturação
Aritmética modular
Armadilha (trap)
Arredondamento correto
Arredondamento direcionado
Arredondamento para o mais próximo com desempate para o par
Atribuição se menor
slt do RISC-V compara operandos com sinal, enquanto sltu aplica ordenação sem sinal aos mesmos padrões.Á
Árvore de Wallace
B
bfloat16
Bit de aderência
Bit de arredondamento
Bit de guarda
Bit oculto
Bnegate
C
Campo de fração
01, seguida de zeros para preencher o campo.Cancelamento
Comparação sem sinal
1111 é maior que 0001 sem sinal, embora seus valores com sinal sejam −1 e 1.D
Deslocador de barril
Deslocamento aritmético à direita
Dividendo
Divisão com restauração
Divisão sem restauração
Divisão SRT
Divisor
E
Empréstimo
Erro de representação
Estouro com sinal
Estouro sem sinal
Exceção de resultado inexato
Exceção de subfluxo (underflow)
Extensão com zeros
0000 0000 1111 1010 quando estendido para 16 bits.Extensão de sinal
1010 com sinal para 1111 1010 preserva −6; inserir zeros produziria 10 positivo.É
Épsilon de máquina
F
Fatia de bit (bit slice)
I
Indicador de condição
Infinito
L
Latência da multiplicação
M
Metade mais significativa do produto
Multiplexador
Multiplicação e adição fundidas
Multiplicação por deslocamentos e somas
Multiplicador
1001 seleciona uma cópia sem deslocamento e uma cópia deslocada três posições à esquerda.Multiplicando
N
Não associatividade
Não é um número (NaN)
Normalização
Número subnormal
0x00000002 representa o dobro do menor subnormal positivo.P
Precisão
Produto parcial
Q
Quociente
R
Recodificação de Booth
Recodificação de Booth de base 4
Registrador de ponto flutuante
Resto
rem do RISC-V fornece −2 para −17 dividido por 5 porque o resto diferente de zero segue o sinal do dividendo.S
Saída Zero
Significando (mantissa)
Sinal corrigido pelo estouro
Sinal de geração de vai-um
Sinal de geração de vai-um do grupo
Sinal de propagação de vai-um
Sinal de propagação de vai-um do grupo
Somador com propagação de vai-um
Somador com salvamento de vai-um
Somador com seleção de vai-um
Somador completo
Subfluxo gradual
Subtração em complemento de dois
T
Tolerância absoluta
Tolerância relativa
U
Unidade lógica e aritmética
Unidade na última posição
V
Verificação de limites
Viés do expoente
Z
Zero com sinal
Sobre esta aula
Crie seus próprios Materiais de Estudo
Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.