Você está na página 1de 95

Computao com Ponto Flutuante IEEE

Graduao em Engenharia Eltrica

Erivelton Geraldo Nepomuceno

Departamento de Engenharia Eltrica


Universidade Federal de So Joo del-Rei

Agosto de 2016

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 1 / 95
Introduo
Computao numrica uma parte vital da infraestrutura
tecnolgica e cientca da atualidade.

Praticamente toda computao numrica utiliza aritmtica de


ponto utuante.

Quase todos os computadores fazem uso da norma IEEE para


aritmtica de ponto utuante.

Entretanto, percebe-se que aspectos importantes da norma IEEE


ainda no so compreendidos por vrios estudantes e prossionais.

Computao numrica signica computao com nmeros.

uma rea to antiga quanto a prpria civilizao humana.

Em torno de 1650, os egpcios j empregava tcnicas de


computao.

Contar pedras e gravetos foi utilizado h anos para contar e


armazenar nmeros.

O baco foi utilizado na Europa at a introduo da notao


posicional decimal.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 2 / 95
Introduo

Figura 1: Primeira calculadora utilizada pelo homem: um baco


representando o nmero 6302715408. Fonte: Wikipdia.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 3 / 95
Introduo
A partir do sc. XVI, o sistema decimal se tornou base em toda a
Europa.
O prximo grande avano foi a tabulao de logaritmos por John
Napier no incio do sc. XVII.
Com logaritmos possvel substituir divises e multiplicaes por
subtraes e adies.
Isaac Newton e Leibniz desenvolveram o clculo no sc. XVII e
tcnicas numricas para a soluo de vrios problemas.
Outros grandes matemticos, tais como Euler, Lagrange, Gauss
foram responsveis por grandes desenvolvimentos na computao
numrica.
Um outro dispositivo utilizado foi a rgua de deslizamento at a
dcada de 70 do sculo passado.
Dispositivos mecnicos para clculo foram inventados por
Schickard, Pascal e Leibniz.
Charles Babbage iniciou o desenvolvimento de equipamentos sem
interveno humana.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 4 / 95
Introduo
Durante Segunda Guerra Mundial houve um grande
desenvolvimento de dispositivos para clculos, e pode-se armar
que mais ou menos nessa poca comeou-se a era da computao.
Uma das primeiras mquinas consideradas como computador foi o
Z3, construdo pelo engenheiro Konrad Zuse na Alemanha entre os
anos de 1939 e 1941. O Z3 usava dispositivos eletromecnicos e j
empregava nmeros binrios de ponto utuante.
O governo britnico desenvolveu nessa mesma poca um
dispositivo eletrnico chamado Colossus usado para decodicar
mensagens secretas.

Figura 2: Colossus Mark 2 desenvolvido em 1944. Fonte: Wikipdia.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 5 / 95
Introduo
Considera-se como primeiro computador eletrnico o ENIAC
( Electronic Numerical Integrator And Computer). um dispositivo
de cerca de 18000 vlvulas e foi construdo na Universidade da
Pensilvnia entre os anos de 1943 e 1945 por Eckert e Mauchly.

Figura 3: Eniac desenvolvido em 1946. Fonte: Wikipdia.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 6 / 95
Introduo
Os dois principais cientistas que inuenciaram os padres de
desenvolvimento dos dispositivos computacionais foram Alan Turin
e John von Neumann.

Figura 4: Alan Turin. Figura 5: John von Newmann.


Fonte: Wikipdia. Fonte: Wikipdia.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 7 / 95
Introduo
Durante a dcada de 1950, o principal uso dos computadores foi
para computao numrica.
A partir de 1960, os computadores passaram a ser usados em
empresas para processar informao, tais como, texto e imagem.
Usurios frequentemente no esto cientes de que a manipulao
de texto, som ou imagem envolve computao numrica.
Os computadores so usados para resolver equaes que modelam
os mais diferentes sistemas: da expanso do universo
micro-estrutura do tomo; processamento de imagens e anlise
estatstica de dados mdicos; predio de clima; simulao de
circuitos para projetos de computadores menores e mais rpidos;
modelagem de aeronaves para testes e treinamento de pilotos;
conabilidade de sistemas eltricos.
Os resultados numricos so comparados com os resultados
experimentais.
Em sntese: todas reas da cincia e engenharia utilizam
fortemente a computao numrica.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 8 / 95
Os nmeros reais
Os nmeros reais so representados por uma linha.

1/2 2 e

-2 -1 0 1 2 3 4

Figura 6: A linha que representa os nmeros reais.

A linha se estende innitamente em direo a e +.


Os smbolos e + no so considerados como nmeros.

Denition 1
O sistema de nmeros real estendido consiste do campo real R e dois
smbolos: + e . Preserva-se a ordem original em R, e dene-se

+ < x <

para qualquer x R. Utiliza-se o smbolo R.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 9 / 95
Os nmeros reais
H innitos mas contveis nmeros inteiros 0,1, 1,2, 2, . . . .
Os nmeros racionais (Q) so aqueles que consistem da razo de
dois inteiros, tais como: 1/2, 2/3, 6/3.
Os nmeros racionais so innitos mas contveis.

Exerccio 1
Mostre que os nmeros racionais so contveis. Dica: utilize uma
tabela e faa uso da diagonal.

Os nmeros irracionais so os nmeros reais que no so racionais.



Exemplos: 2, , e.
Exemplo 1
O nmero e o limite de  n
1
1+
n
quando n .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 10 / 95
Os nmeros reais
As investigaes para a denio de e comearam no sc. XVII.
Todo nmero irracional pode ser denido como o limite de uma
sequncia de nmeros racionais.
O conjunto de nmeros irracionais dito ser incontvel.
Nmero romano: MDCCCCLXXXV = 1985.
O sistema posicional faz uso de um aspecto essencial: o zero
representado por um smbolo.
Os babilnios em 300 a.C. usavam um smbolo para representar o
zero.
O sistema arbico foi desenvolvido na ndia por volta de 600 d.C.
Aps o ano de 1200 iniciou-se o uso dos nmeros arbicos,
notadamente devido a obra Liber Abaci (ou Livro do Clculo)
escrito pelo matemtico italiano Leonardo Pisano Bigollo, mais
conhecido como Fibonacci.

Exerccio 2

Mostre que 2 um nmero irracional.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 11 / 95
Os nmeros reais
O sistema decimal requer 10 smbolos (0 a 10). A escolha
pautada em funo do nmero de dedos.

Os babilnios tinham um outro sistema em base 60.

O zero necessrio para distinguir 601 de 61.

Sistema decimal foi utilizado inicialmente apenas para nmeros


inteiros.

Embora o sistema decimal conveniente para pessoas, o mesmo


no acontece para computadores.

O sistema binrio mais til, no qual cada nmero representado


por uma palavra de bits.

Cada bit corresponde a uma potncia de 2.

Um bit pode ser visto como um entidade fsica que est ligado ou
desligado. Em eletrnica sabemos que o bit representado por um
nvel de tenso baixo ou alto.

Bits so organizados em grupos de 8, chamado de byte.


Cada byte pode representar 2
8 = 256 diferentes nmeros.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 12 / 95
Os nmeros reais
O nmero (71)10 = 7 10 + 1 tem sua representao binria como

(1000111)2 = 1 64 + 0 32 + 0 16 + 0 8 + 1 4 + 1 2 + 1 1.
O nmero fracionrio pode ser representado, tal como

11 1
= (5,5)10 = 5 1 + 5
2 10
e
11 1
= (101.1)2 = 1 4 + 0 2 + 1 1 + 1 .
2 2
Nmeros irracionais possuem expanso decimal e binria innita e
sem repetio.

Exerccio 3
1
Faa a transformao de
10 para o sistema binrio.

Exerccio 4

Faa a expanso decimal e binria dos seguintes nmeros: 2, , e.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 13 / 95
Representao Computacional de Nmeros
Qual a melhor maneira de representar nmeros em um
computador?

Inteiros so representados por 32 bits. O inteiro 71 seria


armazenado como

00000000000000000000000001000111.

Faixa: 0 a 232 1 ou 0 a 4294967295.


O nmero 2
32 no possvel de ser representado.

Exerccio 5
Qual o nmero mnimo de bits necessrios para representar o nmero
50000?

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 14 / 95
Representao Computacional de Nmeros
necessrio representar nmeros positivos e negativos.

A ideia mais simples representar o nmero com duas partes sinal


e mdulo.

Neste caso, utiliza-se 1 bit para o sinal e 31 bits para para


armazenar o mdulo do nmero.

Entretanto, o mtodo mais comum o complemento de 2.

Seja x tal que 0 x 231 1 representado em sua forma binria.

J o o valor negativo y tal que 1 y 231 armazenado na


representao binria do inteiro positivo

232 y.

Exerccio 6
Coloque o nmero 71 na forma binria de complemento de 2.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 15 / 95
Representao Computacional de Nmeros

Em um sistema de 32 bits, se dois nmeros positivos forem


adicionados e o resultado for maior que 231 1 ocorre o chamado
integer overow.

Subtrao de dois nmeros inteiros representados na representao


do complemento de 2 no necessita de hardware adicional.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 16 / 95
Representao Computacional de Nmeros
Nmeros racionais podem ser representados por pares de inteiros:
o numerador e denominador.
Esta representao precisa, mas inconveniente do ponto de
vista aritmtico.
Sistemas que representam os nmeros racionais dessa forma tem
sido chamados de simblicos.
Para a maioria dos casos, os nmeros reais, entretanto, so
armazenados usando representao binria.
H dois mtodos: ponto xo e ponto utuante.
Ponto xo: 1 bit para o sinal, um grupo de bits para representar o
nmero antes do ponto binrio e um grupo de bits para representar
o nmero aps o ponto binrio.

Exemplo 2
Para uma preciso de 32 bits o nmero 11/2 pode ser representado
como
|0|000000000000101|1000000000000000|.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 17 / 95
Representao Computacional de Nmeros
Exerccio 7
Represente o nmero 1/10 na representao binria de ponto xo com
32 bits.

Faixa: aproximadamente de 216 a 215 .


O ponto xo bastante limitado quanto a faixa que se pode
armazenar.

atualmente pouco usado para computao numrica.

Entretanto microcontroladores com ponto xo so mais


econmicos, possuem circuitos internos mais simples e necessitam
1
de menos memria .

1
Anoop, C. V. and Betta, C. Comparative Study of Fixed-Point and Floating
Code for a Fixed-Point Micro. dSPACE User Conference - India, 2012.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 18 / 95
Representao Computacional de Nmeros
Ponto utuante baseado na notao exponencial ou cientca.

Um nmero x representado por

x = S 10E , em que 1 S < 10,

em que E um inteiro. Os nmeros S e E so chamados de


signicante ou mantissa e expoente, respectivamente.

Exemplo 3
A representao exponencial de 0,00036525 3,6525 104 .

O ponto (vrgula) decimal utua para a posio imediatamente


posterior ao primeiro dgito no nulo. Est a razo para o nome
ponto utuante.

No computador, utiliza-se a base 2. Assim x escrito como

x = S 10E , em que 1 S < 2. (1)

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 19 / 95
Representao Computacional de Nmeros
A expanso binria do signicante

S = (b0 b1 b2 b3 . . .) com b0 = 1. (2)

Exerccio 8
O nmero 11/2 representado como

11
= (1,011)2 22 .
2
Os bits aps o ponto binrio so chamados de parte fracionria do
signicando.

As Eq. (1) e (2) so representaes normalizadas de x e o processo


de obteno desta representao chama-se normalizao.

Para representar um nmero normalizado, a sua representao


binria dividida em trs partes: sinal, expoente E e o signicante
S, nesta ordem.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 20 / 95
Representao Computacional de Nmeros
Exemplo 4
Um sistema de 32 bits pode ser dividido nos seguintes campos: 1 bit
para o sinal, 8 para para o expoente e 23 bits para o signicante.

Sinal: 0 para positivo e 1 para negativo.

E pode ter os valores entre -128 e 127 (usando complemento de 2).

S utiliza 23 bits para armazenar o valor aps o ponto.

No necessrio armazenar b0 (bit escondido).

Se x R pode ser armazenado exatamente em um computador


ento x chamado de nmero ponto utuante. Seno, x deve ser
arredondado.

Exemplo 5
O nmero 71 representado por (1.000111)2 26 e armazenado

|0| ebits(6) |00011100000000000000000|.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 21 / 95
Representao Computacional de Nmeros
ebits(6) representa a converso de 6 para o nmero binrio no
expoente.

Se um nmero x no tem uma expanso binria nita, necessrio


terminar esta expanso. Esse processo chamado de truncamento.

Exemplo 6
Considere o nmero 1/10, cuja expanso

1
= (0,0001100110011 . . .)2 .
10
Primeiro devemos normalizar e em seguida truncar. Assim a
representao de 1/10

|0| ebits(4) |10011001100110011001100|.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 22 / 95
Representao Computacional de Nmeros
A preciso (p) de um sistema de ponto utuante o nmero de
bits do signicante (incluindo o bit escondido).
No sistema de 32 bits, p = 24, sendo 23 bits no signicante e 1 bit
escondido.
Um ponto utuante normalizado com preciso p expresso por
E
x = (1,b1 b2 . . . bp2 bp1 )2 2 . (3)

O menor ponto utuante x que maior que 1

(1,000 . . . 1)2 = 1 + 2(p1) .


D-se um especial nome machine epsilon (epsilon da mquina) a
distncia entre este nmero e o nmero 1:

= (0,000 . . . 01)2 = 2(p1) . (4)

De modo mais geral, para um ponto utuante x dado por (2) ns


denimos

ulp(x) = (0,00 . . . 01)2 2E = 2(p1) 2E = 2E . (5)

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 23 / 95
Representao Computacional de Nmeros
Ulp abreviao de unit in the last place ou unidade da ltima
posio.
Se x>0 ento ulp(x) a distncia entre x e o prximo maior
ponto utuante maior.
Se x<0 ento ulp(x) a distncia entre x e o prximo menor
ponto utuante.

Exerccio 9
Seja a preciso p = 24 tal que = 223 . Determine ulp(x) para x igual
aos seguintes valores: a) 0,25; b) 2; c) 3; d) 4; e) 10; f ) 100; g) 1030. D
sua resposta em potncia de 2.

At o momento, foi discutido apenas nmeros no nulos.


O zero no pode ser representado com o uso do bit escondido.
0000 . . . representa 1.
At 1975, resolvia esta questo no utilizando o bit escondido.
A norma IEEE reduz em 1 o expoente e utiliza um carcter
especial para identicar o zero.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 24 / 95
Representao Computacional de Nmeros
Considere o seguinte sistema binrio ctcio em que todos os
nmeros podem ser representados da seguinte forma

(b0 b1 b2 )2 2E ). (6)

b0 permitido ser 0 se b1 e b2 forem tambm zero. Neste caso, o


nmero decimal representado o zero.

O nmero E pode ser 1, 0 ou 1.


O conjunto de nmero representados pode ser visto na Figura

Figura 7: Conjunto de nmeros representados por (6). Fonte: Livro (Overton,


2001, p. 15).

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 25 / 95
Representao Computacional de Nmeros
A preciso de (6) p = 3.
O maior nmero (1,11)2 21 = (3,5)10 .
O menor nmero positivo (1,00)2 21 = (0,5)10 .
O ponto utuante seguinte ao nmero 1 1,25, assim = 0,25.
A distncia entre cada nmero dada por

ulp(x) = 2E .

A distncia entre 0 e 0,5 maior do que a distncia entre 0,5 e


1. Essa distncia pode ser reduzida com a introduo dos
nmeros subnormalizados.

Von Neumann foi inicialmente contra ao ponto utuante.

possvel escolher microprocessadores com ponto xo ou ponto


utuante.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 26 / 95
Representao IEEE
Ponto utuante usado desde meados da dcada de 1950.

Durante as duas dcadas seguintes, cada empresa adotava um


padro diferente.

A IBM, lder do mercado durante as dcadas de 1960 e 1970,


adotou um padro IBM 360/370, de 24 bits e hexadecimal.

A mantissa era armazenada em 24 bits, para ser interpretado como


6 dgitos hexadecimais.

1 dgito era para o sinal, 7 para o expoente e 16 para a potncia de


16.

A normalizao era obrigatria apenas para o primeiro dgito


hexadecimal que devia ser zero.

Como consequncia, alguns nmeros eram menos precisos que


outros.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 27 / 95
Representao IEEE
Em uma colaborao entre pesquisadores e projetistas de
microprocessadores, um padro para representao de ponto
utuante e aritmtica foi desenvolvido nas dcadas de 1970 e 1980.
O grupo de cientistas e engenheiros foi liderado peloInstitute for
Electrical Engineering and Electronics Engineers - IEEE. O grupo
cou conhecido como IEEE p754.
A comunidade cientca foi liderada por William Kahan.

Figura 8: William Morton Kahan (1933), matemtico, professor da


Universidade da Califrnia em Berkeley. Fonte: Wikipdia.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 28 / 95
Representao IEEE
Os participantes industriais foram: Apple, Digital Equipment
Corporation, Intel, Hewlett-Packard, Motorola e National
Semiconductor.
Kahan recebeu o prmio Alan Turin em 1989 da ACM.
O fundador do Matlab, Cleve Moler, chegou a mencionar que as
duas grandes atraes tursticas dos Estados Unidos eram o Grand
Canyon e os meetings of IEEE p754.

Figura 9: Cleve Moler (1939), matemtico, criador do Matlab e fundador da


empresa Mathworks. Fonte: Mathworks.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 29 / 95
Representao IEEE
A norma IEEE para ponto utuante binrio e aritmtica foi
publicada em 1985, sendo denominada ocialmente como
ANSI/IEEE Std 754-1985.

Em 1989, ela recebeu reconhecimento internacional como IEC 559.

Em 2008, uma verso atualizada foi publicada, sendo denominada


IEEE 754-2008.

Em 2011, o padro internacional ISO/IEC/IEEE 60559:2011 (com


contedo idntico ao IEEE 754) foi aprovado para uso.

A norma IEEE 754-2008 trata dos seguintes tpicos:


I Formatos para aritmtica;
I Formatos para troca de dados;
I Regras para arredondamento;
I Operaes aritmticas;
I Tratamento de excees.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 30 / 95
Representao IEEE
A norma IEEE possui trs aspectos essenciais:

1 Representao consistente em todas as mquinas que adotam o


padro;

2 Operao de arredondamento adequado para o ponto utuante;

3 Tratamento consistente de excees, tais como a diviso por zero.

O primeiro dgito do padro IEEE escondido. Isso exige uma


representao especial para o zero.

Uma outra representao especial exigida o nmero 2 .


H tambm a necessidade de representaes especiais para
0, 0, . H tambm o smbolo N aN , que representa Not a
Number (no um nmero).

2
Walter Rudin no considera como um nmero. Ele trata como um smbolo

que s faz parte do conjunto dos reais estendidos.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 31 / 95
Representao IEEE
O padro IEEE especica dois formatos bsicos: single e double.
O formato single usa 32 bits (Figura 32).

Figura 10: Fonte: (Overton, 2001).


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 32 / 95
Representao IEEE
O formato single possui:
I1 bit: sinal;
I8 bits: expoente;
I 24 bits:

O sinal representa o sinal do nmero.


A primeira linha representa o zero

| | 00000000 | 00000000000000000000000 |.
Todas as linhas, exceto zero, comeam com um bit 1 escondido.
O expoente utiliza uma representao deslocada (biased
representation).O expoente a representao binria de E + 127.
Exemplo 7
O nmero 110 = (1,000 . . . 0)2 20 armazenado como

| 0 | 01111111 | 00000000000000000000000 |.

O expoente E a representao binria de 0 + 127.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 33 / 95
Representao IEEE
A faixa de E vai do nmero binrio de 1 a 254, o que corresponde
a Emin = 126 e Emax = 127.
O menor nmero positivo normalizado

| 0 | 00000001 | 00000000000000000000000 |.

Esse valor denotador por

Nmin = (1,000 . . . 0)2 2126 = 2126 1,2 1038 . (7)

O maior nmero positivo normalizado

| 0 | 11111110 | 11111111111111111111111 |.

Esse valor denotador por

Nmax = (1,111 . . . 1)2 2127 = (2 223 ) 2127 3,4 1038 . (8)

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 34 / 95
Representao IEEE
Nmeros subnormalizados usam a combinao de expoente zero e a
parte fracionria no zero.

Nmeros subnormais no podem ser normalizados, pois a


normalizao iria resultar em um expoente fora da faixa de
representao.

Nmeros subnormais tem sua preciso reduzida a medida que o


nmero decresce.

Exemplo 8
O nmero 2127 = (0,1)2 2126 . representado como

| 0 | 00000000 | 10000000000000000000000 |.

Exerccio 10
Calcule o menor nmero positivo que pode ser armazenado em um
sistema de 32 bits.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 35 / 95
Representao IEEE
O formato double utiliza 64 bits. As denies so semelhantes as
do formato de 32 bits.

A Tabela 4

Formato Emin Emax Nmin Nmax


Single 126 127 2126 1,2 1038 2128 3,4 1038
Double 1022 1023 21022 2,2 10308 21023 1,8 10308
Tabela 1: Faixa dos formatos de Ponto Flutuante do IEEE

A Tabela 2 apresenta a preciso dos formatos IEEE.

Formato Preciso Epsilon da Mquina


Single p = 24 = 223 1,2 107
Double p = 53 = 252 2,2 1016
Extended p = 64 = 263 1,1 1019
Tabela 2: Preciso dos formatos de Ponto Flutuante do IEEE

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 36 / 95
Representao IEEE
A preciso single p = 24 corresponde a aproximadamente 7 dgitos
decimais, pois 2
24 107 .
Ou de modo equivalente

log10 (224 ) 7. (9)

Exemplo 9
A representao no formato single IEEE para

= 3,141592653 . . .

quando convertida para decimal

= 3,141592741 . . . .

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 37 / 95
Arredondamento
Os nmeros na norma IEEE podem ser expressos na forma

(1,b1 b2 . . . bp2 bp1 )2 2E ,


em que p a preciso para nmeros normalizados. b0 = 1 e
Emin E Emax . Para nmeros subnormalizados e o zero, b0 = 0
e E = Emin .
x R est na faixa normalizada se Nmin |x| Nmax .
Os nmeros 0 e e os nmeros subnormais no esto na faixa
normalizada, embora sejam nmeros vlidos.
Se o nmero real no um nmero utuante, ento ao menos uma
das situaes seguintes ocorre:
1 x est fora dai faixa normalizada. Por exemplo, x = 2130 est fora
da faixa normalizada no formato single.
2 A expanso binria de x requer um nmero maior que p bits para
uma especicao exata. Por exemplo,
1 + 225 = (1.0000000000000000000000001)2
requer mais bits que o formato single permite.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 38 / 95
Arredondamento
Em ambos casos, necessrio aproximar x por uma representao
diferente do nmero real original.

Denition 2
Seja o nmero x o nmero utuante mais prximo de x que menor
ou igual a x. Seja x+ o nmero utuante mais prximo de x que
maior ou igual a x.

Se o nmero mais prximo zero, o sinal do zero ser o sinal de x.


Seja x representador por

x = (1,b1 b2 . . . bp2 bp1 bp bp+1 . . .)2 2E . (10)

O nmero utuante mais prximo que menor ou igual a x em


(10) :
x = (1,b1 b2 . . . bp2 bp1 . . .)2 2E . (11)

x obtido pelo truncamento da expanso binria da mantissa,


em que se descartam bp ,bp+1 .
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 39 / 95
Arredondamento

Se x no um nmero utuante ento

x+ = ((1,b1 b2 . . . bp2 bp1 )2 + (0,00 . . . 01)2 ) 2E . (12)

O intervalo entre x e x+

2(p1) 2E . (13)

O valor de (13) igual a ulp(x ).


Se x > Nmax ento x = Nmax e x+ = +.
Se x positivo mas menor que Nmin ento x subnormal ou zero
e x+ subnormal ou Nmin . Se x negativo a situao reversa.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 40 / 95
Arredondamento
A norma IEEE dene o valor arredondado correto de x, denotado
por round(x) da seguinte forma.
Se x um nmero utuante ento round(x) = x. Seno, o valor
depende do modo de arredondamento:
I Arredondamento para baixo: round(x) = x .
I Arredondamento para cima: round(x) = x+ .
I Arredondamento em direo a zero: round(x) = x (x > 0) ou
round(x) = x+ (x < 0)
I Arredondamento para o mais prximo: round(x) tanto x ou x+ ,
dependendo de qual for mais prximo de x. Se houver um empate,
aquele com o ltimo bit signicativo igual a zero escolhido.
O modo padro em praticamente todas as aplicaes o
arredondamento para o mais prximo.

Exemplo 10
Usando o padro IEEE single, elabore um exemplo em que x e x+
esto a um mesma distncia de x.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 41 / 95
Arredondamento
Denition 3
Seja x um nmero real. Dene-se como erro absoluto de
arredondamento
abserr(x) = |round(x) x|. (14)

O erro absoluto de arredondamento menor que o intervalo entre


x e x+ . Ento

abserr(x) = |round(x) x| < 2(p1) 2E . (15)

Isso signica que abserr menor que uma ulp.


Com o arredondamento para o mais prximo, tem-se

abserr(x) = |round(x) x| < 2p 2E , (16)

ou metade de uma ulp.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 42 / 95
Arredondamento
Denition 4
O erro de arredondamento relativo para um nmero x denido por

round(x) x
relerr(x) = || = | |. (17)
x

O erro relativo satisfaz o limite

round(x) x 2(p1) 2E
relerr(x) = || = | |< = 2(p1) = .
x 2E
(18)

Para o arredondamento para o mais prximo, tem-se:

1
|| < . (19)
2
O nmero de bits em acordo para o arredondamento para o mais
prximo
log2 (relerr(x)) > p. (20)

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 43 / 95
Arredondamento
O nmero de dgitos decimais em concordncia

log10 (relerr(x)) > log10 (). (21)

Para o formato single, round(x) e x concordam em pelo menos 7


casas digitais (Tabela 2).

Theorem 1
Seja x R normalizado em um sistema binrio de ponto utuante com
preciso p. Ento
round(x) = x(1 + )
para um que satisfaz
|| < = 2(p1)
ou para modo de arredondamento para o mais prximo
1
|| < = 2p .
2
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 44 / 95
Operaes na norma IEEE
Um ponto central na norma IEEE exigir que:
I Operaes aritmtica arredondadas corretamente (adio,
subtrao, multiplicao e diviso).
I Operao de resto e raiz quadrada arredondada corretamente.
I Converso de formato arredondada corretamente.
Arredondado corretamente signica que o arredondamento se
adequar o resultado de destino.

comum que o resultado de uma operao aritmtica de dois


pontos utuantes no seja um ponto utuante.

Exemplo 11
1 e 224 so nmeros utuantes (representao exata). Mas o resultado
de 1 + 224 no um nmero utuante.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 45 / 95
Operaes na norma IEEE
Seja x e y nmeros utuantes, ento

x y = round(x + y) = (x + y)(1 + )
x y = round(x y) = (x y)(1 + )
x y = round(x y) = (x y)(1 + )
x y = round(x y) = (x y)(1 + )

em que
1
|| < .
2

Exerccio 11
Seja x=z=1 e y = 225 . Calcule

(a) (x + y) z single.
no formato

(b) (x + y) z no formato double.


Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 46 / 95
Operaes na norma IEEE

Exerccio 12
Considerando os valores no Exerccio 11 e formato single, calcule
(a) x (y z).
(b) (x z) y .

A disponibilidade dos modos de arredondamento para baixo e para


cima permite que o programador faa qualquer computao duas
vezes, em cada um dos modos. Os dois resultados denem um
intervalo em que o resultado exato deve estar contido. Essa
metodologia d origem a computao por intervalos.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 47 / 95
Operaes na norma IEEE

A entrada de nmero normalmente feita por algum tipo de


programao em alto nvel. Em seguida processada por um
compilador ou interpretador. possvel de entrar com o nmero
por meio de sua expanso decimal ou por meio de nmero
fracionrio.

A norma prev vrios tipos de converso entre formatos. Segue


alguns:
I Converso entre diferentes formatos de ponto utuante (single e
double, por exemplo).
I Converso entre ponto utuante e formato inteiro.
I Converso de binrio para decimal e decimal para binrio.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 48 / 95
Excees
Um dos aspectos mais difceis de programao a necessidade de
antecipar situaes de exceo.

O mais simples exemplo de exceo a diviso por zero.

At os anos de 1950, a diviso de um nmero positivo por zero


resultava no maior nmero utuante disponvel.

A partir de 1960, essa diviso passou a gerar uma interrupo no


programa, oferecendo ao usurio alguma mensagem do tipo: fatal
error - division by zero.

Exemplo 12
O clculo da resistncia total de um circuito eltrico com dois resistores
conectados em paralelo, R1 e R2 , quando R1 = 0 dado por

1 1 1 1
T = 1 1 = 1 1 = 1 = = 0.
R1 + R2 0 + R2 + R2

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 49 / 95
Excees
verdade que a0 zero para qualquer valor nito de a.
Tambm verdade que a/0 = , + = e a = .
As expresses 0 , e 0/0 no tem sentido matemtico.
So consideradas operaes invlidas.

A norma IEEE responde a essas operaes com o resultado NaN


(Not a Number).

Exemplo 13
Seja as sequnciasxk e yk divergentes to , por exemplo, xk = 2k e
yk = 2k, para k = 1,2,3 . . . . Claramente a sequncia xk + yk diverge
para . Mas no possvel calcular o resultado de xk yk .
Consequentemente NaN.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 50 / 95
Excees
Qual a razo para 1/0 ter o valor de e no ?
Para responder isso, tem-se diferentes nmeros para 0 e 0, de tal
forma que a/0 = e a/ 0 = .
O teste 0 == 0 verdadeiro e o teste == falso.
3
A raiz quadrada de um nmero negativo uma operao invlida .
No h relao de ordem para variveis que recebem NaN.
Overow ocorre quando o resultado da operao nito mas com
valor absoluto maior que o maior nmero utuante disponvel.
Na norma IEEE, o resultado de um overow Nmax ou a
depender do modo de arredondamento.
Underow ocorre quando o valor exato de uma operao no zero
mas possui valor absoluto menor que o menor nmero utuante
normalizado.
Na norma IEEE, o resultado de um underow um nmero
subnormal, Nmin ou 0 a depender do modo de arredondamento.
Esse processo conhecido como gradual underow.
3

No Scilab, o resultado de 1 = i
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 51 / 95
Excees
Exemplo 14
Considere a seguinte operao usando o padro single do IEEE. O
segundo operando Nmin e o primeiro ligeiramente superior.

( 1,01000000000000000000000 )2 2126
( 1,00000000000000000000000 )2 2126
= ( 0,01000000000000000000000 )2 2126 (22)
128
Normalize : = ( 1,00000000000000000000000 )2 2

Sem gradual overow, o resultado do Exemplo 14 seria zero. O


valor correto pode ser armazenado como

| 0 | 00000000 | 01000000000000000000000 |.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 52 / 95
Excees
Situao Resultado
Operao Invlida NaN
Diviso por zero
Overow ou Nmax
Underow Subnormal, 0 ou Nmin
Inexato Valor arredondado corretamente
Tabela 3: Resposta padro a excees de acordo com a norma IEEE.

A Tabela 3 sintetiza a resposta da norma IEEE a cinco tipos de


exceo.

Exerccio 13
Pense em alguma alternativa que possa tornar o clculo de (23) mais
eciente. p
x2 + y 2 (23)

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 53 / 95
Microprocessadores Intel
Os dois principais fabricantes de chips a adotarem o padro IEEE
foram Intel (nos computadores da IBM) e Motorola (nos
computadores da Apple e Sun).
O microprocessador Intel original era o chip 8086 em 1978, que
inclua a unidade central de processamento (CPU) e a unidade de
lgica e aritmtica (ALU), mas sem operaes de ponto utuante.
Em 1980, a Intel anunciou os chips 8087 e 8088, sendo
primeiramente usados pelos computadores da IBM.
O chip 8087 possua um co-processador para ponto utuante,
oferecendo assim uma unidade de ponto utuante (FPU).
Os sucessores do 8087, os chips 80287, 80387 possuam
co-processadores separados.
A partir dos chips 80486 DX, o Pentium, o Pentim Pro, o Pentium
II passaram a incluir a FPU no chip principal.
Embora as geraes de chips sejam cada vez mais rpidas, a
arquitetura da famlia Pentium permanece essencialmente a mesma
do chip 8087.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 54 / 95
Microprocessadores Intel

Instrues de ponto utuante operam principalmente em dados


armazenados em registradores de 80 bits.

Espera-se que os programas armazenem as variveis usando o


formato single ou double.

A preciso extendida pode ser usada para aumentar a preciso de


operaes aritmticas. O resultado deve ser arredondado para o
formato single ou double.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 55 / 95
Microprocessadores Intel
Os registradores esto organizados em uma pilha numerada de 0 a
7.

Em qualquer instante, o topo da pilha denotado por ST (0), o


segundo por ST (1), e assim sucessivamente.

A pilha de registros conveniente para calcular expresses


aritmticas.

Por exemplo, considere a seguinte expresso a ser computada

(a + b) c,

assumindo que os nmeros utuantes a,b, e c esto disponveis na


memria na posio A, B e C , respectivamente. O resultado ser
armazenado na posio X . A sequncia de instrues em
linguagem assembly descrita por um conjunto mnemnico de
palavras para descrever os passos adotados pelo computador.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 56 / 95
Microprocessadores Intel
Instrues em Assembly para a expresso (a + b) c.
FLD A
FLD B
FADD
FLD C
FMUL
FSTP X
FLD coloca o valor presente na memria na posio A no topo da
pilha.

Quando h um valor no topo, FLD empurra esse valor para a


segunda posio.

FADD adiciona o valor de ST (0) a ST (1).


FMUL multiplica os valores de ST (0) e ST (1).
FSTP armazena o resultado nal na posio X da memria.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 57 / 95
Microprocessadores Intel

Tabela 4: Contedo dos registrados em tempos sucessivos.


Registrador Time 0 Time 1 Time 2 Time 3 Time 4 Time 5
ST (0) a b ab c (a b) c
ST (1) a ab
ST (2)
ST (3)
ST (4)
ST (5)
ST (6)
ST (7)

Os valores nos registradores no nmeros ponto utuantes, no


frmulas. A expresso ab usada ao invs de a + b, porque
demonstra o valor correto aps arredondamento.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 58 / 95
Microprocessadores Intel
Adicionalmente ao ponteiro que indica a posio no topo da pilha,
o status word contm as cinco excees que so requeridas pelo
IEEE.

H tambm a control word, com registro de 16 bit exclusivo,


usada para denir o modo de arredondamento, o modo de preciso
e as mascaras de exceo.

O ponto utuante tem suas condies iniciais denidas pela


varivel FNINIT. Esta varivel dene:
I Modo de arredondamento: round to nearest.
I Modo de preciso: extended.
I Excees: todas recebem uma mscara.
Em 2000 a Intel anunciou a criao do IA 64 Itanium chip.

ia 64 possui 128 registradores e capaz de realizar a seguinte conta


corretamente (a b + c). Essa operao chamada de FMA, do
ingls fused multiply-add instruction.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 59 / 95
Exerccios em Sala
y nas seguintes
1 Calcule o resultado para operaes.

1 2
(a) y = lim xn + quando x0 [0,5; 1,5].
n 2 xn
(b) Calcule y = lim xn+1 , para x0 = 27 e
( n
xn /2 if xn for par
xn+1 = .
3xn + 1 if xn for mpar
2 Seja a funo recursiva denida por

xn+1 = 4,1xn (1 xn ),

que normalmente chamada de equao logstica. Considere a


sequncia de valores dada por {xn }. Calcule y = {xn } quando
n e a condio inicial dada por
p
20(41)5/2 + 1447341 1681
x0 = .
3362
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 60 / 95
Ponto Flutuante no C
A linguagem de programao C tornou-se muito popular a partir
dos anos 1980.

No C, o format oat refere-se ao formato single do IEEE.

Clculos feitos com formato oat utiliza preciso de 32 bits.

O Exemplo 15 refere-se a um programa que l uma varivel x e


imprime na tela o valor dessa varivel.

Exemplo 15
main () /* Program 1: Echo */
{
float x;
scanf("%f",&x);
printf("x=%f",x);
}

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 61 / 95
Ponto Flutuante no C
O segundo argumento de scanf indica o endereo de x.
O segundo argumento de printf o valor de x.

Os dois tipos de formato no C so o %f e %e, indicando m nmero


xo de casas decimais e o formato exponencial.

Considere a entrada de x = 2/3.

Tabela 5: Sada do Exemplo 15 para diferentes formatos.


Cdigo do Formato Sada
%f 0.666667
%e 6.666667e-01
%8.3f 0.667
%8.3e 6.667e-01
%21.15f 0.666666686534882
%21.15e 6.666666865348816e-01

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 62 / 95
Ponto Flutuante no C

O valor da entrada arredondado corretamente para 24 bits de


preciso na sua mantissa, o que corresponde a aproximadamente 7
dgitos decimais.

O C utiliza o modo de arredondamento para o mais prximo.

As duas primeiras linhas da Tabela 5 mostra o formato single com


a o arredondamento para o mais prximo (o que explica o dgito 7).

A terceira e quarta linha, solicitam apenas 3 casas decimais.

As duas ltimas linhas tentam mostrar um resultado com um


nmero maior de casas decimais que o possvel. O resultado que
cerca de metade dos dgitos no possuem signicado.

Para o formato double necessrio usar os comandos %lf e %le.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 63 / 95
Ponto Flutuante no C
Considere o seguinte programa com um loop.

main () /* Program 2: First Loop Program */


{
int n = 0;
float x = 1;

/* Repatedly divide x by 2 until it underflows to 0 */

while (x>0) {
x = x/2;
n++;
printf("(2 raised to the power -%d) = %e \n",n,x);
}
}

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 64 / 95
Ponto Flutuante no C
Considere um outro programa com um loop.

main () /* Program 3: Second Loop Program */


{
int n = 0;
float x = 1, y = 2;

/* Repatedly divide x by 2 until y = (1+x) rounds to 1 */

while (y>1) {
x = x/2;
y=1+x;
n++;
printf("(1 added to (2 to the power -%d) = %e \n", n, y);
}
}

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 65 / 95
Ponto Flutuante no C
Considere um outro programa com um loop.

main () /* Program 4: Parallel Resistance Formula */


{
float r1, r2, total;

printf("Enter the two resistances \n");


scanf("%f %f, &r1,&r2);

printf("r1=%e r2=%e \n",r1, r2);

total(1/(1/r1+1/r2);

printf("Total resitance s %e \n", total);


}

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 66 / 95
Ponto Flutuante no C
Tabela 6: Resultados do Clculo da Resistncia Paralela
R1 R2 Resistncia Total
1 1 5.000000e 01
1 10 9.090909e 01
1 1000 9.990010e 01
1 1.0e5 9.999900e 01
1 1.0e10 1.000000e + 00
1 0.1 9.090909e 02
1 1.0e 5 9.999900e 06
1 1.0e 10 1.000000e 10
1 0 0.000000e + 00

Exerccio 14
Se R1 = 1, aproximadamente para qual faixa de valores de R2 o
Program 4 oferece um resultado igual a 1?

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 67 / 95
Ponto Flutuante no C
Para iniciar a biblioteca matemtica no C, necessrio incluir o
comando #include <math.h> no incio do programa.

Tabela 7: Algumas funes matemticas do C


Rotina Descrio
fabs valor absoluto
sqrt raiz quadrada
exp exponencial (base e)
log logaritmo (base e
log10 logaritmo (base 10)
sin seno (argumento em radianos)
cos cosseno (argumento em radianos)
atan arco-tangente (resultado em radianos)
pow potncia (pow(x,y) retorna xy
A norma IEEE e o padro C99 no denem qual a preciso para
essas funes (exceto a raiz quadrada).

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 68 / 95
Cancelamento
Considere os os dois nmeros

x = 3,141592653589793
e
y = 3,141592653585682
.

O primeiro nmero uma aproximao de 16 dgitos de ,


enquanto o segundo concorda com em 12 dgitos. A diferena

z = x y = 0,000000000004111 = 4,111 1012 . (24)

Se a diferena for calculada no C com preciso single o resultado


seria
z = 0,000000e + 00 (25)

A diferena entre (24) e (25) que primeiro o computador converte o


nmero decimal para binrio. Em seguida, trunca esse valor para
poder armazenar. No formato single, esses dois valores so iguais.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 69 / 95
Cancelamento

Se o formato double for usado, o resultado ser a diferena:

z = 4,110933815582030 1012 . (26)

O valor em (26) concorda em 3 dgitos com (24). Qual o


signicado dos outros dgitos?

A resposta que o valor em (26) a diferena arredondada entre x


e y. Os demais dgitos so esprios.

Neste caso, dizemos que h uma perda de preciso na computao


z = x y.
Independente se h uma perda de preciso completa ou parcial,
este fenmeno chamado de cancelamento.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 70 / 95
Cancelamento
Um exemplo de cancelamento pode ser obtido pela aproximao da
derivada.

Seja f :RR uma funo contnua e diferencivel.

Como pode ser feito uma estimativa de f 0 (x)?


Por denio, tem-se:

f (x + h) f (x)
lim . (27)
h0 h
Uma idia natural avaliar (27) para um valor pequeno de h. Mas
quo pequeno?

Mostraremos um programa em que o valor de h denido para


faixa de 10
1 a 1020 .
Neste caso, ns sabemos precisamente qual o valor da derivada de
sin(x) em x, que cos(x). E assim, pode-se comparar os resultados.

O valor absoluto da diferena entre o valor calculado por (27) e o


valor correto denominado erro.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 71 / 95
Cancelamento
Exemplo 16
%Programa 5 - Elaborado no Matlab

%Parmetros iniciais
x=1;h=1;n=1;deriv=cos(x);
%Exibir na tela
sprintf('O valor da derivada %13.6e',deriv)
disp(' h diffquo abs(deriv - diffquo)')

%Definir h na faixa de 10^{-1} a 10^{-20}

while (n <= 20)


h(n+1)=h(n)/10;
diffquo(n)=(sin(x+h(n+1))-sin(x))/h(n+1);
error(n)=abs(deriv-diffquo(n));
disp(sprintf('%5.1e %13.6e %13.6e',h(n+1),diffquo(n),error(n)))
n=n+1;
end
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 72 / 95
Cancelamento
O valor da derivada 5.403023e-01

h diffquo abs(deriv - diffquo)


1.0e-01 4.973638e-01 4.293855e-02
1.0e-02 5.360860e-01 4.216325e-03
1.0e-03 5.398815e-01 4.208255e-04
1.0e-04 5.402602e-01 4.207445e-05
1.0e-05 5.402981e-01 4.207362e-06
1.0e-06 5.403019e-01 4.207468e-07
1.0e-07 5.403023e-01 4.182769e-08
1.0e-08 5.403023e-01 2.969885e-09
1.0e-09 5.403024e-01 5.254127e-08
1.0e-10 5.403022e-01 5.848104e-08
1.0e-11 5.403011e-01 1.168704e-06
1.0e-12 5.403455e-01 4.324022e-05
1.0e-13 5.395684e-01 7.339159e-04
1.0e-14 5.440093e-01 3.706976e-03
1.0e-15 5.551115e-01 1.480921e-02
1.0e-16 0.000000e+00 5.403023e-01
1.0e-17 0.000000e+00 5.403023e-01
1.0e-18 0.000000e+00 5.403023e-01
1.0e-19 0.000000e+00 5.403023e-01
1.0e-20 0.000000e+00 5.403023e-01

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 73 / 95
Cancelamento
0
10

2
10

4
10
error

6
10

8
10

10
10 20 15 10 5 0
10 10 10 10 10
h
Figura 11: Erro em funo do valor de h. Escala logartmica. Conforme
programa no Exemplo 16.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 74 / 95
Cancelamento
O erro apresentado na Figura 81 em funo do valor de h, usando
uma escala logaritmica.

O resultado bastante interessante. Percebe-se que o erro diminui


a medida em que o valor de h se torna menor, como de se esperar.

Mas esse fenmeno ocorre at um certo ponto. Quando h se torna


pequeno demais, a aproximao se torna pior. Por qu?

Se x = 1 e h menor que metade da preciso da mquina


( 1016 ), ento x + h, isto , 1 + h arredondado para 1, e o
valor de sin(x + h) e sin(x) se cancelam completamente.

Pode-se resumir essa questo da seguinte forma. Ao usar h muito


grande, enfrenta-se um alto erro de discretizao. Enquanto ao
usar um h muito pequeno, aparece um alto erro de cancelamento.

Para a funo f (x) = sin(x) com x = 1, a melhor escolha de h


em torno de 108 , aproximadamente o a raiz quadrada da preciso
da mquina.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 75 / 95
Cancelamento
O valor do erro reduzido por 10 a medida que h reduzido em
10, at o ponto em que o cancelamento torna-se expressivo.

Assume-se que f contnua e duas vezes diferencivel, como o caso


da funo sin(x).
Existe um valor z entre x e x + h tal que

h2 00
f (x + h) = f (x) + hf 0 (x) + f (z), (28)
2
em que f 00 (z) a segunda derivada de f em z.
A Equao (28) chamada de srie de Taylor truncada.

De (28), tem-se:

f (x + h) f (x) h2 00
f 0 (x) = f (z). (29)
h 2
A quantidade (29) a diferena enter aquilo que computado e o
valor da derivada. O valor absoluto de (29) o erro de
discretizao que da ordem de O(h).
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 76 / 95
Cancelamento
Ao reduzir h em 10, o erro de discretizao tambm reduz em 10
(aproximadamente, uma vez que o valor de z tambm muda).

Deve-se dessa forma, sempre que possvel, evitar o cancelamento.

Se f for sucientemente suave, possvel calcular um valor mais


aproximado da derivada.

Para isso, computa-se a inclinao da reta passando por


(x + h,f (x + h)) e (x h,f (x h)).
A Equao (27) torna-se

f (x + h) f (x h)
lim . (30)
h0 2h
A Equao (30) chamada de quociente de diferena central.

Para um valor sucientemente pequeno de h (mas grande suciente


para que o cancelamento no seja expressivo), o quociente da
diferena central mais preciso que o quociente da diferena.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 77 / 95
Cancelamento
Considere a srie de Taylor truncada

h2 00 h3
f (x + h) = f (x) + hf 0 (x) + f (x) + f 000 (z1 ) (31)
2 6
para z1 entre x e x + h.
Considerando, x h, tem-se
h2 00 h3
f (x h) = f (x) h0 f 0 (x) + f (x) f 000 (z2 ) (32)
2 6
para z2 entre x e x h.
Subraindo (32) de (31) e divindo por 2h,tem-se
f (x + h) f (x h) h2 000
f 0 (x) = (f (z1 ) f 000 (z2 )). (33)
2h 12
O valor absoluto de (33) o erro de discretizao para o quociente
da diferena central, que da ordem de O(h2 ), ao invs de O(h)
para o quociente da diferena.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 78 / 95
Cancelamento
O exerccio 11.1, pg. 75, (Overton, 2001), pede para mudar o
programa do Exemplo 16, e usar o quociente da diferena central.
O programa foi implementado no Matlab conforme Exemplo 17.

Exemplo 17
x=1;h=1;n=1;deriv=cos(x);
sprintf('O valor da derivada %13.6e',deriv)
disp(' h diffquo abs(deriv - diffquo)')

%Definir h na faixa de 10^{-1} a 10^{-20}

while (n <= 20)


h(n+1)=h(n)/10;
diffquo(n)=(sin(x+h(n+1))-sin(x-h(n+1)))/(2*h(n+1));
error(n)=abs(deriv-diffquo(n));
disp(sprintf('%5.1e %13.6e %13.6e',h(n+1),diffquo(n),error(n)))
n=n+1;
end
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 79 / 95
Cancelamento
O valor da derivada 5.403023e-01

h diffquo abs(deriv - diffquo)


1.0e-01 5.394023e-01 9.000537e-04
1.0e-02 5.402933e-01 9.004993e-06
1.0e-03 5.403022e-01 9.005045e-08
1.0e-04 5.403023e-01 9.004295e-10
1.0e-05 5.403023e-01 1.114087e-11
1.0e-06 5.403023e-01 2.771683e-11
1.0e-07 5.403023e-01 1.943278e-10
1.0e-08 5.403023e-01 2.581230e-09
1.0e-09 5.403023e-01 2.969885e-09
1.0e-10 5.403022e-01 5.848104e-08
1.0e-11 5.403011e-01 1.168704e-06
1.0e-12 5.402900e-01 1.227093e-05
1.0e-13 5.401235e-01 1.788044e-04
1.0e-14 5.440093e-01 3.706976e-03
1.0e-15 5.551115e-01 1.480921e-02
1.0e-16 5.551115e-01 1.480921e-02
1.0e-17 0.000000e+00 5.403023e-01
1.0e-18 0.000000e+00 5.403023e-01
1.0e-19 0.000000e+00 5.403023e-01
1.0e-20 0.000000e+00 5.403023e-01

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 80 / 95
Cancelamento
0
10

2
10

4
10
error

6
10

8
10

10
10

12
10 20 15 10 5 0
10 10 10 10 10
h
Figura 12: Erro em funo do valor de h. Escala logartmica. Conforme
programa no Exemplo 17.
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 81 / 95
Condicionamento de Problemas
O condicionamento de um problema mede a preciso que se pode
esperar ao se utilizar um sistema de ponto utuante,
independentemente do algoritmo utilizado.
Seja y = f (x) uma funo duas vezes diferencivel e que x e f (x)
estejam na faixa normalizada. Considere

x = round(x).
Utilizando um computador com ponto utuante, o melhor que se
pode esperar do resultado

y = f (x).
Observao: f no pode ser calculada sempre exatamente.
O erro relativo satisfaz o seguinte limite

|x x|
< ,
|x|
em que a preciso de mquina (h um fator de 1/2 quando se
arredonda para o mais prximo).
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 82 / 95
Condicionamento de Problemas
Segue ento que

 
|x x|
log10 > log10 (). (34)
|x|

O lado esquerdo da inequao (34) estima o nmero de dgitos em


que x concorda com x.
Em quantos dgitos, pode-se esperar que y concorde com y?
Para encontrar a resposta, deve-se analisar

 
|y y|
log10 .
|y|

Seja
y y f (x) f (x) x x x
= . (35)
y x x f (x) x

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 83 / 95
Condicionamento de Problemas
O fator (36) aproxima f 0 (x).
f (x) f (x)
, (36)
x x
Assim, tem-se:
y y x x
f (37)
y x
em que
|x| |f 0 (x)|
f = . (38)
|f (x)|
f chamado de nmero condicional de f em x. Isto mede
aproximadamente quanto o erro de arredondamento relativo
amplicado pelo clculo de f em x.
Tomando o logaritmo na base 10 de ambos os lados de (37), tem-se
   
y y x x
log10 log10 log10 (f ) . (39)
y x
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 84 / 95
Condicionamento de Problemas

O lado esquerdo de (39) aproximadamente o nmero de dgitos


em que y concorda com y.
O primeiro termo do lado direito de (39) aproximadamente o
nmero de dgitos que x concorda com x (que no formato single
de 7 dgitos).

Regra prtica: para estimar o nmero de dgitos em que y = f (x)


concorda com y = f (x), diminua

log10 (f )

do nmero de dgitos que x = round(x) concorda com x (7 no


single e 16 no double).

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 85 / 95
Condicionamento de Problemas
Exerccio 15
Calcule o nmro de dgitos perdido para as seguintes funes e
condies iniciais:

(1) exp(x)
(a) 1,000001
(b) 0,000001
(c) 1,000001
(2) log(x)
(a) e (double)
(b) 1,001
(c) 1,000001
(d) 1/e (double)
(3) sin(x)
(a) (double)
(b) /2 (double)
(c) 0,000001
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 86 / 95
Condicionamento de Problemas

Exerccio 16
Seja a equao do mapa logstico

xn+1 = rxn (1 xn ), (40)

com r = 327/100 e r = 39/10. Considere o conjunto de condies


x0 = [0,1; 100/327; 10/39]. Calcule o valor de f para x1 e
iniciais para
xn quando n .

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 87 / 95
Estabilidade de Algoritmos

Um algoritmo um mtodo computacional bem denido para


resolver uma determinada classe de problemas.

Em cincia da computao, o estudo de algoritmos se concentra na


ecincia, ou seja, na habilidade em obter a resposta correta.

Algoritmos numricos objetiva encontrar uma soluo


aproximadamente correta.

A estabilidade de um algoritmo mede a qualidade do algoritmo em


obter uma resposta para o problema.

Algoritmos que obtm respostas imprecisas so chamadas instveis.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 88 / 95
Estabilidade de Algoritmos
Seja a funo
y = f (x),
duas vezes diferencivel com x e f (x) na faixa normalizada.

Deseja-se calcular o valor de y, mas o melhor que se pode conseguir



y = f (x). (41)

Um algoritmo para calcular f (x) estvel se o resultado y satisfaz

|y y| |x x|
f , (42)
|y| |x|

y uma aproximao de y . Assim, no se arma que y = f (x).


Considere o problema de juros compostos.

Seja um investimento de a0 em um banco que paga 5% de juros ao


ano, calculado a cada 4 meses.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 89 / 95
Estabilidade de Algoritmos
Isso signica que ao m do primeiro quadrimestre do ano, o valor
do investimento

a1 = a0 (1 + 0,05/4). (43)

Ao m do segundo perodo tem-se

a2 = a0 (1 + 0,05/4)2 . (44)

E assim ao m de n perodos

an = a0 (1 + 0,05/4)n . (45)

Em termos gerais, a equao para juros compostos

an = a0 Cn (x) (46)

em que
 x n
Cn (x) = 1 + . (47)
n
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 90 / 95
Estabilidade de Algoritmos
Para um valor xo de x, tem-se que Cn (x) tem um valor limite,
para n , de exp(x).
Vamos investigar o nmero condicional de Cn (x). Usando a regra
da cadeia, o valor da derivada

 x n1 1 Cn (x)
Cn0 (x) = n 1 + = . (48)
n n 1 + nx

e o valor do nmero condicional

|x| |x| |Cn (x)| |x|


C = |Cn0 (x)| = x = . (49)
|Cn (x)| |Cn (x)| |1 + n | |1 + x/n|

Eq. (49) bem denida para n grande, considerando que |x| no


seja grande.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 91 / 95
Estabilidade de Algoritmos
Exemplo 18
x=input('Entre com o valor de x: ')
n=input('Entre com o valor do nmero de meses: ')
%Preciso single
x=single(x);n=single(n);
z=1+x/n;w=1;
for i=1:n
w=w*z;
end
v=log(z);
disp(sprintf('Algoritmo 1: a resposta %13.6e',w));
disp(sprintf('Algoritmo 2: a resposta %13.6e',power(z,n)));
disp(sprintf('Algoritmo 3: a resposta %13.6e',exp(n*v)));
XS%Melhor mtodo - Algoritmo 4:
%log1p(s) = log(1+s)
u=x/n;
v=log1p(u);
disp(sprintf('Algoritmo 4: a resposta %13.6e',exp(n*v)));
Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 92 / 95
Estabilidade de Algoritmos

Resultado do Exemplo 18

Algoritmo 1: a resposta 1.000000e+00


Algoritmo 2: a resposta 1.000000e+00
Algoritmo 3: a resposta 1.000000e+00
Algoritmo 4: a resposta 1.051271e+00

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 93 / 95
Estabilidade de Algoritmos

Instabilidade devido a Cancelamento.

O fenmeno de cancelamento pode ser pode ser explicado pelo


nmero de condicionamento. Seja a funo

f (x) = x 1 (50)

e
|x|
f = (51)
|x 1|
A Eq. (51) mostra valores muito altos para x 1.
Assim, um algoritmo que introduz cancelamento, tambm introduz
mal condicionamento.

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 94 / 95
Estabilidade de Algoritmos

Exemplo 19
Leia, discuta em grupo, e implemente o artigo:

Nepomuceno, E. G. (2014) Convergence of recursive functions on


computers. The Journal of Engineering, Institution of Engineering
and Technology, 1-3. doi: 10.1049/joe.2014.0228

Prof. Erivelton (UFSJ) Comp. com Ponto Flutuante IEEE Agosto de 2016 95 / 95

Você também pode gostar