A noção de número desnormalizado é utilizada na representação de números em informática pelo método de ponto flutuante , padronizado pela norma IEEE 754 . É uma forma de representar números de valor muito próximo de zero.
A representação de ponto flutuante para computadores é baseada em dois conceitos: notação científica e o sistema binário (ou base 2).
Para escrever números na base 10, podemos usar a chamada notação "científica" , que inclui duas partes:
na forma " n × 10 a ". Por exemplo :
O termo " expoente " corresponde à potência de 10, e o termo mantissa corresponde à parte decimal. Assim, em "1,23 × 10 −2 ",
O sistema binário , também chamado de " base 2", é uma forma de anotar números envolvendo apenas dois dígitos, 0 e 1. É bem adequado para a eletrônica, pois corresponde a dois estados muito distintos: temos terminais auxiliares de um componente a tensão V 0 ou uma tensão V 1 ("a corrente não flui ou a corrente passa"). Para distinguir essa notação da notação decimal, adicionamos aqui um "b" no final do número. Aqui estão alguns exemplos de números:
Um número decimal binário de quatro dígitos n 1 n 0 , n -1 n -2 b corresponde ao número decimal n 1 × 2 1 + n 0 × 2 0 + n -1 × 2 -1 + n -2 × 2 - 2 .
Podemos, portanto, ter uma notação científica binária:
n 1 n 0 , n -1 n -2 b pode ser escrito n 1 , n 0 n -1 n -2 b × 2 1 .por exemplo
No caso de notação científica binária, o número de ponto flutuante deve estar entre 1b inclusive e 10b excluído (ou seja, 2 excluídos), ou seja, sua parte inteira é necessariamente 1b.
De acordo com a referida norma, a representação de um número real pode ser dividida em três partes:
O valor do número representado é igual a:
valor = sinal × (1 + mantissa ) × 2 ( expoente - deslocamento)De fato, em notação científica em base binária, toda a parte é necessariamente 1, portanto, é inútil usar um bit para representá-la, fica-se satisfeito em representar a parte fracionária.
Um número é considerado desnormalizado quando
Se seguíssemos a mesma representação dos números com expoente diferente de zero, teríamos
valor = sinal × (1 + mantissa ) × 2 -shiftmas o valor retido é
valor = sinal × mantissa × 2 -shift + 1ou seja, para um expoente codificado em 8 bits (a chamada representação de precisão única), temos
valor = sinal × mantissa × 2 -126e que para um expoente codificado em 11 bits (a chamada representação de precisão dupla), temos
valor = sinal × mantissa × 2 -1022Com os números desnormalizados, abandonamos a notação científica. Se a mantissa corresponder a 0,1b (o “b” significa que estamos no modo binário, na base dois), então:
vemos, portanto, que o menor número representável de forma normalizada é 1.000… 00b × 2 - deslocamento (uma vez que uma mantissa nula e um expoente nulo são usados para representar zero), enquanto na representação desnormalizada, é 0,000… 01b × 2 - deslocamento . Podemos, portanto, representar números menores. Também garante a continuidade com os números normalizados, uma vez que:
ou um "salto" de 0,000 ... 01b × 2 - shift + 1
Portanto, temos, em simples precisão:
Modelo | Expositor | Mantissa | Valor aproximado | Desvio / anterior |
---|---|---|---|---|
Zero | 0000 0000 | 000 0000 0000 0000 0000 0000 | 0,0 | |
Menor número desnormalizado | 0000 0000 | 000 0000 0000 0000 0000 0001 | 1,4 × 10 −45 | 1,4 × 10 −45 |
Próximo número desnormalizado | 0000 0000 | 000 0000 0000 0000 0000 0010 | 2,8 × 10 −45 | 1,4 × 10 −45 |
Próximo número desnormalizado | 0000 0000 | 000 0000 0000 0000 0000 0011 | 4,2 × 10 −45 | 1,4 × 10 −45 |
... | ... | ... | ... | ... |
Maior número desnormalizado | 0000 0000 | 111 1111 1111 1111 1111 1111 | 1,175 494 21 × 10 −38 | 1,4 × 10 −45 |
Menor número padronizado | 0000 0001 | 000 0000 0000 0000 0000 0000 | 1,175 494 35 × 10 −38 | 1,4 × 10 −45 |
Próximo número padronizado | 0000 0001 | 000 0000 0000 0000 0000 0001 | 1,175 494 49 × 10 −38 | 1,4 × 10 −45 |