Saturday 27 April 2019

Opções normais de flutuação de ponto representação binário


Estou tentando ajudar alguém com alguns trabalhos de casa e estou recebendo respostas erradas. A questão é a seguinte: Representar -0.10937510 em representação de ponto flutuante normalizado com uma mantissa complementar de dois bits fracionários de 5 bits e um complemento de complemento de dois dígitos inteiros de 3 bits. Tenho escrito as seguintes notas: Vamos trabalhar a resposta para a pergunta: -0.10937510 Passo 1: Converter em binário. 0 0. 0 0 0 1 1 1 0 0 Passo 2: Multiplicar por 1 (20) - (00.00011100) 2 x 20 Passo 3: Deslocar para fazer o número inteiro da mantisa Precisamos de fazer 6 deslocamentos para a esquerda Porque Porque temos 0.000111 Shift 1 00.00111 Shift 2 000.0111 Shift 3 0000.111 Shift 4 00001.11 Shift 5 000011.1 Shift 6 0000111 Portanto, obtemos, - (1112) x 2 (-6) Passo 4: Converta mantissa. Nesta pergunta, fomos convidados a converter para twos complementar (fração de 5 bits) Portanto, precisamos converter 111 para twos complementar e fazer este 5 bit Passo A: Converter para complementar uns (5 bits) -00111 11000 Passo B: Converter para Passo 5: Converter expoente top 2-bit twos complementar 2 (-6) Portanto, precisamos converter -6 para binário (twos complemento) Passo A: Converter em binário 1 1 0 Passo B : Converter para os complementos (3-bit) 110 001 Etapa C: Converter para twos complementar 010 A resposta é, então, 11001 0102 Como você pode ver, 2-6 parece errado para um complemento de 3 bits twos. Alguém pode apontar o que eu poderia estar fazendo errado Normalmente o significand (não mantissa 1) é deslocado para que o mais significativo um bit está em uma determinada posição, não assim o significand é um inteiro. O formato IEEE 754 normaliza o significado para 1. dddd. Onde cada d é um dígito na base sendo usado. Shifting seu valor para mover o primeiro bit para essa posição gera um expoente de 4. Você teria 1.110 2 2 4. Para representar o significando em dois complemento, adicionamos um outro bit à esquerda, produzindo 01.110 2 2 4. e então Aplicar a negação para produzir 10.010 para o significand e 100 para o expoente. No entanto, pode haver alguma variação nos detalhes. O significado é normalizado para 1. dddd ou .1 dddd. É o significand cinco bits antes de adicionar um bit de sinal ou depois Você tem exemplos de valores com representações conhecidas neste formato Ou mais detalhes sobre o formato 1 Significand é o termo preferido. Um significand é linear um mantissa é logarithmic. Im um pouco confuso sobre como normalizar números em C. Eu sei que se você tem algo como o ponto flutuante valor binário 1101.101, é normalizado como 1.101101 x 23, movendo o ponto decimal 3 Posições para a esquerda. No entanto, não tenho certeza como fazer isso no código. Então, se eu tenho 10010000 exp 0 e eu quero obter 01001000 exp 1, o campo de fração é 001 eo resultado final é 010001. Se eu tiver um número de 8 bits e os 2 bits de liderança são 00, eu quero movê-lo até que eu Encontrar um 1, ou se eu tiver um bit líder de 01 então ele já está normalizado. Similary para um líder 2 bits de 11 eu movê-lo para a esquerda. Então, se o meu número era de 32 bits, 1 para o sinal, 8 para o expoente, 23 para a mantissa, eu faria algo como: E, em seguida, vários mais se declarações para os outros 2 números de bit de liderança (00, 10) Claro se meu código lógico está certo. Como você diz, você precisa extrair o sinal, mantissa e expoente. O diagrama acima, tirado da Wikipedia, mostra como é definido para o formato de ponto flutuante de precisão simples mais comum, IEEE 754. Para extrair cada parte precisamos fazer isso em três etapas detalhadas abaixo. Eu não tenho o código C, mas vou mostrar os passos que você precisa tomar. Depois de extrair as 3 partes, basta colocá-las nas posições de bit mostradas no diagrama acima. Se seu um número unsigned este é sempre 0. Se seu assinado seu o MSB. 2. Exponente Se o número é assinado e negativo você precisará virar todos os bits e adicionar 1 para transformá-lo positivo. Se não, você pode deixá-lo como ele é. Para extrair o expoente devemos saber onde o ponto binário está destinado a ser. Seja a posição do ponto binário b (no seu exemplo, seu 3). Deixe o primeiro bit do MSB que é 1 be p (No seu exemplo o seu 6). Deixando o expoente ser e. 3. Mantissa Isso será igual aos bits da posição p-1 para baixo para o bit 0.Como para representar 0.148 2 em aritmética de ponto flutuante normalizado com o formato (0,148) (0,00100101111.) 2 Nós deslocamos 3 bits para a esquerda para fazer Normalizou (1,00101111) 2 2. Exponente 1164 (75) (1001011) 2 e Mantissa (01001111) 2. Assim, a representação de ponto flutuante é (0100101100101111) 2 (4B2F) Representação A Mas se armazenamos a mantissa desnormalizada em um registro de 8 bits, então ela não armazenará os últimos três 1s e então a mantissa teria normalizado de (0,00100101) 2 para (1,00101000 ) 2 inserindo 3 0s em vez de 1s. A representação teria sido (0100101100101000) 2 (4B28) Representação B Então, ao normalizar, o processador leva em conta os bits de mantissa desnormalizados além de 8 bits também Ou apenas arredonda-o Qual é o correto: A ou B Armazena a mantissa Em representação de ponto fixo Como funciona tudo

No comments:

Post a Comment