Sie sind auf Seite 1von 4

1

A norma IEEE 754 em Matlab


1. Representao dos nmeros em ponto flutuante.
A norma IEEE 754 define dois formatos bsicos para os nmeros em ponto flutuante,
FP (b, p, q): o formato simples, com 32 bits e o formato duplo, com 64 bits. Assim a base da
representao binria (b=2). O MATLAB segue a norma IEEE 754 com 64 bits. Para
comprov-lo basta observar os valores das variveis realmin e realmax e da sua preciso (eps).
A norma IEEE em formato duplo representa os nmeros em unidades de memria NSU
(Numerical Storage Unit) de 64 bits distribudas em trs zonas:
# bits

11

expoente

52

mantissa

1. Sinal o primeiro bit usado para o sinal da mantissa:


o S=0 para nmeros positivos
o S=1 para nmeros negativos
2. Expoente os 11 bits seguintes so reservados para o expoente.
o O menor expoente possvel: e = -1022 (00000000001)
o O maior expoente possvel: e = 1023 (11111111110)
O expoente enviesado, o que significa que para se obter um expoente tal que
-1022 e 1023, subtrai-se 1023 (210 -1) ao expoente que est realmente
armazenado (em 11 bits podemos representar nmeros desde 0 at 2047 = 211-1).
O expoente enviesado permite assim usar os 11 bits para representar expoentes
negativos e positivos. Note que o maior nmero possvel que podemos representar
com 11 bits 2047 = 11111111111, e que 2047-1023 = 1024 um nmero maior que o
maior expoente possvel (1023). O nmero 2047 = 11111111111 reservado para
representar a condio de OVERFLOW. Similarmente, o expoente com todos os bit
nulos 0 = 00000000000 reservado para representar a condio de UNDERFLOW e
indicar que o nmero deixa de ser normalizado (ver mais detalhes a continuao).
3. Mantissa dispe de 52 bits e normalizada seguindo a norma 1 mantissa < 2.
Assim, o primeiro bit da mantissa sempre 1 (bit implcito) e no necessrio
armazen-lo. Por conseguinte, embora se usem 52 bits para a mantissa, na
realidade p = 53.
Assim, a norma IEEE em formato duplo permite representar nmeros na forma:

N = (-1)S 2 e-1023 (d0. d-1 d-2 d-52 )

2
em que s = 0, 1 o sinal da mantissa, 0 < e < 2047 o expoente e os dk so bits, i.e., dk=0, 1
com d0=1 se o nmero for normalizado e d0=0 se o no for.

2. Machine Epsilon

O parmetro real que representa a unidade de preciso de um computador (este


varia de computador a computador): O nmero real positivo mais pequeno que
somado a 1 o modifica, ou seja, o menor valor positivo u representvel que satisfaz:
1 + u > 1.

O Matlab armazena a preciso com a qual trabalha na varivel eps.


eps

ans =
2.220446049250313e-016

2^-52

ans =
2.220446049250313e-016
-52

Assim, eps = 2

2.2204e-016

3. Condio de OVERFLOW.

A condio de OVERFLOW acontece quando o resultado de uma operao um


nmero superior ao maior nmero representvel, que no caso do formato duplo
corresponde ao nmero:

21023 x 1.1111 = 21023 x (2 - 2-52)


Note que (2 - 2-52 ) representa o maior nmero menor que 2, tendo em conta a preciso
eps = 2-52.

O Matlab armazena o maior nmero representvel na varivel realmax.


realmax

ans =
1.797693134862316e+308

2^1023*(2-2^-52)
ans =
1.797693134862316e+308

A condio de OVERFLOW representada por uma configurao de bits do expoente


igual a 11111111111, razo pela qual esta configurao do expoente havia sido
reservada.
o se a mantissa for exactamente 0, ento esta configurao representa (-1)S
o se a mantissa for diferente de 0, a norma indica uma de duas alternativas:
uma situao de erro fatal com interrupo do programa
a emisso de um cdigo especial de NaN (not a number)
Por exemplo, em Matlab, podemos verificar a condio de OVERFLOW quando
introduzirmos o nmero 2^1024, um nmero superior ao maior nmero
representvel.
>> 2^1023
ans =
8.988465674311580e+307
>> 2^1024
ans =
Inf
% devolve infinito.

4. Condio de UNDERFLOW.

A condio de UNDERFLOW acontece quando o resultado de uma operao um


nmero inferior ao menor nmero representvel, que no caso do formato duplo
corresponde ao nmero:

2-1022 x 1.0000 = 2-1022 x 20 = 2-1022

O Matlab armazena o menor nmero representvel na varivel realmin.


realmin
ans =
2.225073858507201e-308
>> 2^-1022
ans =
2.225073858507201e-308

A soluo perante UNDERFLOW atribuir um valor 0 ao resultado, e continuar com


as operaes, ou seja, o programa no interrompido. Esta soluo conhecida por
UNDERFLOW sbito.

4
Seguindo o exemplo anterior com a condio de OVERFLOW, pudssemos verificar a
condio de UNDERFLOW se introduzirmos o nmero 2-1023 em Matlab. Este nmero
inferior ao menor nmero representvel.
>> 2^-1023
ans =
1.112536929253601e-308
>> 2^-1030
ans =
8.691694759793755e-311
Mas como podemos verificar a situao de UNDERFLOW no detectada. Se
continuarmos verificando para nmeros menores podemos apurar que a situao de
UNDERFLOW s ocorre a partir do expoente -1075.
>> 2^-1074
ans =
4.940656458412465e-324
>> 2^-1075
ans =
0
Isto acontece porque o Matlab implementa a tcnica de UNDERFLOW GRADUAL.

5. Tcnica de UNDERFLOW GRADUAL.


Esta tcnica prescrita pela norma IEEE 754 consiste em desistir de ter mantissas
normalizadas quando ocorrer UNDERFLOW, Por exemplo, se o resultado de uma operao em
formato duplo fosse 2-1024 , ento este seria representado pelo nmero:
0 00000000000 0100000000000000 00000
em que o expoente com todos os bits nulos serve para indicar que o nmero no normalizado.
Assim, esta representao especial deve ser interpretada como representando um nmero
cujo expoente o menor possvel, 2-1022 , e cuja mantissa 2-2 , ou seja o nmero 2-1024.
Como resultado a tcnica de UNDERFLOW GRADUAL possibilita que o menor nmero
representvel em formato duplo, seja um nmero cujo expoente o menor possvel, 2-1022 , e
cuja mantissa seja o nmero que mais se aproxima a zero, ou seja, a preciso eps = 2-52.
Assim obtemos o nmero

2-1022 x 0.0001 = 2-1022 x 2-52 = 2-1074


Nmeros inferiores a este so postos a zero.
Mtodos Numricos, IFAM., 2013