3 / 20 · Conceito
Política de saída em ponto fixo
Separe escala de entrada, arredondamento de negativos, saturação e comportamento modular.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Os bits armazenam um inteiro; a escala fornece significado
Represente x como um inteiro X e F bits fracionários, de modo que x=X/2^F. Usamos o mesmo F para A e B. Seu produto e acumulador têm 2F bits fracionários. Converter a soma bruta final S de volta à escala de entrada exige divisão por 2^F. Converta uma vez após a redução completa; arredondar cada termo primeiro pode descartar contribuições que se tornariam significativas em conjunto.
Para F=4, [1.5,−0.5] é armazenado como [24,−8] e [0.25,2.0] como [4,32]. O produto escalar bruto é 24×4−8×32=−160. Seu valor real é −160/256=−0.625, e seu inteiro de saída em F=4 é −10.
Teste explicitamente o arredondamento de negativos
Para S=−17 e F=4, o inteiro exato da saída é −1.0625. Um deslocamento aritmético à direita produz −2; truncar em direção a zero produz −1. Arredondar para o mais próximo, com empates para o par, também produz −1. Portanto, um deslocamento aritmético não é intercambiável com qualquer interpretação de “descartar a fração”. Nos valores de empate −24/16=−1.5 e −40/16=−2.5, o desempate para o par seleciona −2 em ambos os casos.
Nossa conversão padrão arredonda a soma completa para o mais próximo, com empates para o par, e depois satura na largura de saída. Sobre o módulo, calcule o quociente q e o resto r. Incremente q quando r exceder metade do divisor ou quando for igual à metade e q for ímpar. Restaure o sinal original depois. Em RTL, obter o módulo do número mais negativo exige uma variável temporária mais larga; a referência em Node usa BigInt.
Defina o overflow na saída
A saída com sinal de oito bits cobre −128..127. Um valor arredondado de 130 satura em 127 ou, com comportamento modular, torna-se −126. Um valor de −130 satura em −128 ou, com comportamento modular, torna-se 126. Qualquer uma das políticas pode ser intencional, mas deve ser nomeada e testada.
Compare separadamente o acumulador bruto e a saída convertida. Uma soma bruta errada aponta para aritmética ou escalonamento; uma soma correta com saída errada aponta para escala, arredondamento ou saturação. Preserve casos de limite calculados manualmente para que a referência e o RTL não possam ocultar juntos o mesmo erro de conversão.
Experimente
Encontre o resultado com empates para o par para F=4, S=−56 e a saída saturada de oito bits para F=4, S=−2080.
Ler a explicação
−56/16=−3.5 arredonda para o inteiro par −4. −2080/16=−130, que satura em −128 após o arredondamento.