Considere uma representação de ponto fixo que pode ser considerada como um caso degenerado de um número flutuante. É perfeitamente possível usar o complemento de 2 para números negativos. Mas por que um bit de sinal é necessário para números de ponto flutuante, os bits de mantissa não deveriam usar os complementos de 2?
Além disso, por que os bits expoentes usam uma polarização em vez de uma representação de magnitude assinada (semelhante aos bits de mantissa) ou representação de complemento de 2?
Atualização: desculpe se eu não deixei claro. Eu estava procurando o motivo de como a representação de ponto flutuante é modelada. Se não houver uma forte troca de implementação entre as alternativas, alguém poderia explicar os aspectos históricos da representação de ponto flutuante?
Da Wikipedia:
O complemento de dois é uma representação de números negativos que por acaso é muito conveniente. Essa é toda a razão para usá-lo.
Um par mantissa-expoente é uma representação de um número de ponto flutuante. Na maioria das vezes, ao usar números de ponto flutuante, você não está fazendo aritmética apenas na mantissa ou apenas no expoente.
fonte
Falsa suposição. Não é necessário. Tenho certeza de que encontrei formatos de ponto flutuante que usavam o complemento 2 para a mantissa, mas eu teria que procurar nomes.
Estou longe de ser especialista em análise numérica, mas entendo que assinar zero é importante para eles. Provavelmente é mais fácil de manipular do que o complemento. Esse foi provavelmente um critério na escolha do IEEE-754.
Novamente, é algo que não é necessário e alguns fizeram as coisas de maneira diferente.
É a representação para a qual é mais fácil fazer uma implementação de hardware para o conjunto de operações que são feitas nos expoentes (e aqui não é desejável ter uma representação para -0).
Uma das conseqüências dessa escolha é que você pode usar a comparação de números inteiros assinados para comparar o número de FP, se você não se importa com o NaN, o que talvez seja um critério para alguns (o fato de o NaN precisar de tratamento especial me faz duvidar que não era para IEEE-754).
fonte
O IEEE 754 usa sinal / magnitude, não o complemento de dois ou o de um.
O complemento de dois tem a desvantagem de que o intervalo positivo e o negativo não são idênticos. Se todos os padrões de bits forem válidos, você terá números x nos quais não poderá calcular facilmente -x. Isso é ruim. A alternativa é que existem padrões de bits inválidos, o que também é ruim. No IEEE 754, não há padrões de bits inválidos para o ponto flutuante de 64 ou 32 bits; portanto, você não precisa se preocupar com isso.
O complemento de alguém tornaria a multiplicação / divisão mais complexa (com magnitude assinada, você apenas executa os sinais e trata a mantissa como um número não assinado). Para adicionar e subtrair, eu realmente não quero pensar em adicionar e subtrair no complemento, isso faz minha cabeça doer.
fonte
Ter zeros assinados fornece maior expressividade que pode ser útil em cálculos numéricos. A página da Wikipedia ' Zero assinado ' diz:
Um dos principais projetistas do ponto flutuante IEEE 754, WH Kahan é um defensor do zero assinado por esses motivos. Sua opinião provavelmente terá muito peso.
fonte
Eu acho que é importante entender que os cálculos de ponto flutuante produzem valores aproximados , não valores exatos . Ou seja, se um cálculo de ponto flutuante gera um valor codificado X, então isso representa um valor teoricamente ideal que quase certamente NÃO é X, mas está no intervalo [X .. X + e) {onde 'e' é o ' epsilon da máquina ', ou seja, não há número de ponto flutuante entre X e X + e}. Mais especificamente, um zero de ponto flutuante representa um número ideal que provavelmente não é exatamente zero, mas que é muito pequeno para representar com um valor codificado de ponto flutuante diferente de zero.
Dado que, usar a representação de sinal e magnitude é uma maneira de permitir que a codificação 'lembre' exatamente de que lado de zero está o valor ideal, o positivo ou o negativo. Isso é crítico em certos cálculos complexos (no sentido 'a + bi') - funções complexas-> complexas geralmente são 'multivaloradas'; portanto, para uma computação adequada, é essencial prestar atenção aos locais dos 'cortes de ramificação'. Os zeros assinados marcam, de certo modo, os locais desses cortes de ramificação - o cálculo feito no lado positivo será diferente daquele no lado negativo.
fonte
A maioria dos formatos de ponto flutuante tira proveito do fato de que, em um sistema binário, qualquer valor diferente de zero com um expoente não mínimo terá um "1" como o bit mais significativo da mantissa. Assim, em um sistema com um campo de 23 bits para a mantissa, as mantissas de números positivos não variam de 0 a 8.388.607, mas de 8.388.608 a 16.777.215. As mantissas de números que podem ou não ser positivos variam de -16.777.215 a -8.388.608 e de +8.388.608 a +16.777.215. Enquanto o complemento de dois é o melhor formato numérico quando é necessário ter cálculos "suavemente" cruzando zero, os intervalos descontínuos de valores de mantissa significam que os cálculos não seriam capazes de operar sem problemas ao longo de zero, usando o complemento de dois ou qualquer outra coisa .
fonte