Monday 11 September 2017

Normalized Mantissa Binário Opções


Como 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 torná-lo normalizado (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 Na representação de ponto fixo Como é que tudo funcionaIm 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.Im tentando converter um int em um float personalizado, no qual o usuário especifica a quantidade de bits reservados para o exp e mantissa, mas eu não Entender como a conversão funciona. Minha função recebe um valor int ee int exp para representar o número (valor 2exp) ou seja, valor 12, exp 4, retorna 192. mas eu não entendo o processo que eu preciso fazer para mudá-los. Eu estive olhando para isso por dias e jogar com IEEE conversor web apps, mas eu só não entendo o que é o processo de normalização. Como eu vejo que seu movimento o ponto binário e ajustar o expoente, mas eu não tenho idéia do que isso significa, alguém pode me dar um exemplo para ir embora também eu não entendo o que é o exponencial viés. A única informação que tenho é que você acabou de adicionar um número para o seu expoente, mas eu não entendo porquê. Eu tenho procurado Google por um exemplo que eu posso entender, mas isso não está fazendo qualquer sentido para mim perguntou Mar 1 15 às 23:31 U2EF1 assim como eu sei quantas vezes ele precisa ser deslocado sobre Como se o usuário especifica 4 bits para A mantissa, e o valor é 3, como eu sei para mudar 0011 sobre a 1000 Poderia eu algo como get maxval pow (2, ltspecified mant. Bitsgt) -1 então shift value (0011) direito até o valor gt maxval e Tem um contador de manter o controle de quantas vezes eu faço este ndash Tommy K Mar 1 15 at 23:51 Um número de ponto flutuante é normalizado quando forçar a parte inteira de sua mantissa para ser exatamente 1 e permitir que sua fração parte seja o que nós gostar. Por exemplo, se tomássemos o número 13.25. Que é 1101.01 em binário, 1101 seria a parte inteira e 01 seria a parte da fração. Eu poderia representar 13,25 como 1101,01 (20). Mas isso não é normalizado porque a parte inteira não é 1. No entanto. Nós somos permitidos deslocar a mantissa para a direita um dígito se nós aumentarmos o expoente por 1: Esta representação 1.10101 (23) é a forma normalizada de 13.25. Dito isto, sabemos que números de ponto flutuante normalizados virão sempre na forma 1.fffffff (2exp) Por causa de efficiencys, não nos incomodamos de armazenar a parte de 1 inteiro na representação binária em si, apenas fingimos que está lá. Então, se nós estivéssemos a dar o seu personalizado float tipo 5 bits para a mantissa, saberíamos que os bits 10100 seria realmente para 1,10100. Aqui está um exemplo com a mantissa padrão de 23 bits: Quanto ao viés de expoente, vamos dar uma olhada no formato flutuante de 32 bits padrão, que é dividido em 3 partes: 1 bit de sinal, 8 bits de expoente e 23 bits de mantissa : Os expoentes 00000000 e 11111111 têm propósitos especiais (como representando Inf e NaN), então com 8 bits de expoente, poderíamos representar 254 expoentes diferentes, por exemplo 21 a 2254. por exemplo. Mas e se quisermos representar 2-3. Como obter expoentes negativos O formato corrige esse problema automaticamente subtraindo 127 do expoente. Portanto: 0000 0001 seria 1 -127 -126 0010 1101 seria 45 -127 -82 0111 1111 seria 127-127 0 1001 0010 seria 136-127 9 Isto muda a gama de expoentes de 21 2254 para 2-126. 2127 para que possamos representar expoentes negativos. O processo de normalização converte as entradas em um intervalo de seleção. Binary32 espera que o significand (não mantissa) esteja no intervalo 1.0 lt s lt 2.0 a menos que o número tenha um expoente mínimo. Exemplo: valor 12, exp 4 é o mesmo que valor 12 (222), exp 4 3 valor 1,5, exp 7 Como o significand sempre tem um dígito inicial de 1 (a menos que o número tenha um expoente mínimo), não há necessidade de Armazená-lo. E em vez de armazenar o expoente como 7. um viés de 127 é adicionado a ele. Valor 1,5 decimal - 1,1000. 000 binário - 0,1000. 000 binário armazenado (23 bits em todos) exp 7 - bias exp 7 127 - 134 decimal - 10000110 binário O padrão binário armazenado é a concatenação do signo, significand com um 1 bit de liderança implicado e um expoente de polarização. Expoente é 0 - o valor mínimo, o bit implícito é 0 e números tão pequenos como 0,0 podem ser armazenados. Quando o expoente enviesado é 255 - o valor máximo, os dados armazenados já não representam números finitos mas infinito e Não-um-números. Verifique o link referenciado para obter mais detalhes. Tommy-chux e eigenchris, juntamente com os outros têm fornecido excelentes respostas, mas se eu estou olhando para os seus comentários corretamente, você ainda parece estar lutando com as porcas e parafusos de como eu iria tomar esta informação e, em seguida, usar este Na criação de uma representação de flutuação personalizada onde o usuário especifica a quantidade de bits para o expoente Não se sinta mal, é uma clara como lama a primeira dúzia de vezes que você passar por ele. Acho que posso dar uma facada para limpá-lo. Você está familiarizado com a representação IEEE754-Single-Precision-Floating-Point de: Esse bit de sinal de 1 bit. 8-bit expoente polarizado (em 8-bit excesso-127 notação), e os restantes 23-bit mantissa. Quando você permite que o usuário escolha o número de bits no expoente, você terá que retrabalhar a notação de expoente para trabalhar com o novo limite escolhido pelo usuário. O que isso mudará Mudará a manipulação do bit de sinal? Será que vai mudar o mantisa manipulação - Não (você ainda vai converter o mantissasignificand para o formato de bit oculto). Portanto, a única coisa que você precisa se concentrar é a manipulação de expoentes. Como você abordaria este Recall, o expoente atual de 8 bits está no que é chamado de notação de excesso-127 (onde 127 representa o maior valor para 7 bits, permitindo que qualquer viés seja contido e expresso dentro do limite atual de 8 bits. O usuário escolhe 6 bits como o tamanho do expoente, então o que você terá que fornecer um método semelhante para garantir que você tem um número fixo para representar sua nova notação excessiva que irá trabalhar dentro do limite do usuário. Uma escolha para o valor exponencial não-exagerado poderia ser tentado como 31 (os maiores valores que podem ser representados em 5 bits).Para que você poderia aplicar a mesma lógica (tomando o exemplo 13.25 acima).A sua representação binária para o número é 1101.01 Para o qual você move o decimal 3 posições para a esquerda para obter 1.10101 o que lhe dá um exponencial viés de 3. No seu exemplo de expoente de 6 bits você iria adicionar 3 31 para obter sua notação de excesso-31 para o expoente: 100010. Em seguida, colocar A mantissa em formato de bit oculto (ou seja, soltar o le Ading 1 de 1.10101 resultando em sua nova Tommy Precision Representation: Com bit de sinal de 1 bit. Expoente polarizado de 6 bits (na notação de excesso de 6 bits) e mantissa de 25 bits remanescente. As mesmas regras se aplicariam para reverter o processo para obter seu número de ponto flutuante de volta da notação acima. (Apenas usando 31 em vez de 127 para apoiar o viés fora do expoente) Espero que isso ajude de alguma forma. Eu não vejo muito mais que você pode fazer se você está realmente indo para permitir que um usuário selecionado tamanho expoente. Lembre-se, o padrão IEEE-754 não era algo que foi adivinhado e um monte de bom raciocínio e trade-offs entrou em chegar ao 1-8-23 sign-exponente-mantissa layout. No entanto, acho que seu exercício faz um grande trabalho em exigindo que você compreenda firmemente o padrão. Agora totalmente perdido e não abordado nesta discussão é o que os efeitos que isso teria sobre a gama de números que poderiam ser representados neste Custom Precision Floating Point Representação. Eu não olhei para ele, mas a principal limitação parece ser uma redução no MAXMIN que poderia ser representada. Respondeu Mar 2 15 at 10:53

No comments:

Post a Comment