Você está na página 1de 80

Cálculo Numérico

Aula 01 - 25/nov/2020

Wilson H. Hirota

Universidade Federal de São Paulo

wilson.hirota@unifesp.br
Objetivos
• Gerais
◦ Introduzir os métodos clássicos utilizados na resolução numérica de problemas
matemáticos aplicados à Engenharia e Ciências
• Especı́ficos
◦ Capacitar os alunos a implementar computacionalmente os métodos numéricos
clássicos
◦ Capacitar o aluno a:
• Obter a solução de sistemas de equações algébricas lineares
• Obter as raı́zes de uma equação algébrica não linear
• Fazer o ajuste de curvas a dados experimentais
• Aplicar os métodos de interpolação e integração numérica e estimar os
erros associados.
• Metodologia
◦ Aulas teóricas expositivas e aulas práticas com resolução de exercı́cios em
computador (Scilab)
2 / 80
Bibliografia
• Burden, R. L.; Faires, J. D. Análise Numérica. São Paulo, SP: Cengage Learning,
2008.
• Burian, R.; Lima, A. C. Cálculo Numérico. Editora LTC, 2007
• Chapra, S. C.; Canale, R. P. Métodos Numéricos para Engenharia. 5o ed. São
Paulo: McGraw-Hill, 2008
• Franco, N. M. B. Cálculo Numérico. Editora Pearson Prentice Hall, 2007
• Ruggiero, M. A. G.; Lopes, V. L. R. Cálculo Numérico - Aspectos Teóricos e
Computacionais. 2o ed. Editora Makron Books do Brasil, 1996
• Sperandio, D.; Mendes, J. T.; Monken e Silva, L. H. Cálculo Numérico:
Caracterı́sticas Matemáticas e Computacionais dos Métodos Numéricos. Editora
Prentice-Hall, 2003
• Cunha, M. Cristina C. Métodos Numéricos. Editora Unicamp, 2009
• Arenales, S.; Darezzo, A. Cálculo Numérico: Aprendizagem com apoio de
software. Editora Thomson Learning, 2008
• Asano, C. H.; Colli, E. Cálculo Numérico: Fundamentos e Aplicações. São Paulo:
USP, 2009
(<https://www.ime.usp.br/˜asano/LivroNumerico/LivroNumerico.pdf>)
3 / 80
Computação Numérica
• Introdução/Motivações

◦ Durante o projeto e a operação de um processo, os engenheiros quı́micos


frequentemente se deparam com diversos desafios:

• Qual estratégia usar para controlar a pressão de topo de uma coluna


debutanizadora?

• Quais variáveis (controladas e manipuladas) devem ser selecionadas para a


implementação de um controlador preditivo multivariado?

• Ao mudar as condições da planta de gás, quanto tempo será necessário para


o processo atingir o regime permanente?

• Qual a perda de gás em uma linha de transporte de gás?

• Qual a energia mı́nima requerida para o processo de compressão de


propeno?

O que todas essas perguntas têm em comum?

4 / 80
Computação Numérica
• Introdução/Motivações

O que todas essas perguntas têm em comum?

◦ Requerem muitas informações preliminares

◦ Requerem a realização de diversos cálculos complexos

◦ São inviáveis de serem calculadas manualmente

◦ A precisão dos resultados requer rigor termodinâmico

◦ Uma pergunta pode ser consequência de outra

◦ Podem ser respondidas com o auxı́lio da

Modelagem Matemática e Simulação de Processos

5 / 80
Computação Numérica
• Introdução/Motivações
◦ A utilização de simuladores matemáticos ou numéricos requer a execução de
uma sequência de etapas bem definidas

◦ Em Engenharia, assim como em qualquer área do conhecimento cientı́fico, a


resolução de um problema passa inicialmente por uma fase de observação e
entendimento dos fenômenos fı́sicos e quı́micos envolvidos no problema em
questão, a fim de construir um modelo matemático que represente, com a
maior fidelidade possı́vel, o problema que desejamos tratar.

◦ O que é um modelo matemático?


• Um modelo matemático nada mais é do que uma abstração matemática de
um processo/fenômeno real (Seborg; Edgar; Mellichamp, 20101 )

• Exemplo: Equação geral de conservação microscópica


(ρϕ) + ∇ · (ρvϕ) = σV˙ φ − ∇ · jφ
∂t

1 Seborg, D. E.; Edgar, T. F.; Mellichamp, D. A. Process Dynamics and Control. [S.l.]: John Wiley & Sons,
2010
6 / 80
Computação Numérica
• Introdução/Motivações
◦ Uma vez estabelecidas as equações que descrevem o processo, o passo seguinte
será resolvê-las

Infelizmente, grande parte dos modelos em Engenharia Quı́-


mica não tem solução analı́tica. Portanto, a computação e os
métodos numéricos têm atuado como importantes ferramentas
para a obtenção de soluções aproximadas de tais problemas

◦ Por outro lado, quando optamos pela resolução computacional e


numérica de um modelo, introduzimos uma série de erros e incertezas
decorrentes, principalmente:
• da precisão dos dados de entrada;

• de erros na fase de modelagem;

• da capacidade limitada do hardware em armazenar números em ponto


flutuante ;
• das operações numéricas provenientes de um algoritmo numérico
7 / 80
Computação Numérica
• Introdução/Motivações
◦ Os dados de entrada contêm uma imprecisão inerente (i.e. não há como
evitar que ocorram), uma vez que representam medidas obtidas através de
sensores e equipamentos analı́ticos
◦ A influência destas perturbações no resultado final vai depender da
estabilidade do problema

Em algumas situações, conhecidas como problemas malcondi-


cionados, a influência dessas pertubações pode ser desastrosa
e inviabilizar completamente as soluções numéricas.
Neste caso, são necessárias técnicas especializadas, objeto de
uma área da matemática conhecida como Problemas Inversos

◦ Os erros na fase de modelagem são os erros decorrentes de simplificações


(hipóteses simplificadoras). O principal objetivo das hipóteses simplificadoras é
desenvolver um modelo matemático que tenha condições de ser tratado com as
ferramentas matemáticas disponı́veis e que demande um tempo computacional
razoável
8 / 80
Computação Numérica
• Introdução/Motivações
◦ Os erros associados tanto aos cálculos quanto às medidas podem ser
caracterizados com relação a sua acurácia e precisão
• Acurácia (ou exatidão): se refere a quão próximo o valor calculado ou
medido está próximo do valor verdeiro
• Precisão: se refere a quão próximos os valores individuais calculados ou
medidos estão uns dos outros
◦ O conjunto de todas essas incertezas e erros certamente vai
”contaminar”o resultado final
◦ Se esta contaminação é desprezı́vel, ou se ela compromete o resultado, é uma
análise necessária para que tenhamos resultados realistas
◦ Assim, é necessário que tenhamos algum controle e conhecimento sobre os
erros que foram sendo introduzidos, e como eles se propagam durante a
resolução numérica dos modelos matemáticos
◦ Portanto, o objetivo desta seção introdutória é apresentar os principais erros
que podem surgir durante a fase de resolução numérica de um problema:
• Erros de arredondamento
• Erros de truncamento
9 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo
◦ A partir do momento em que se calcula um resultado aproximado, é preciso
saber como estimar ou delimitar o erro cometido na aproximação
◦ A delimitação do erro é sempre desejável, pois com ela tem-se um valor em que
o erro cometido seguramente é inferior a um limite
◦ Portanto, uma questão central em computação numérica é a quantificação dos
erros cometidos durante a solução numérica de um dado problema. Para tanto,
precisamos definir medidas de erros. As medidas de erro mais utilizados são:
• Erro absoluto

• Erro relativo

Definição: Erro absoluto


Seja x uma aproximação do valor exato x ∗ , o erro absoluto da aproximação x̄
é definido como:

Eabs = |x ∗ − x̄ |

10 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo

Definição: Erro absoluto


Seja x uma aproximação do valor exato x ∗ , o erro absoluto da aproximação x̄
é definido como:

Eabs = |x ∗ − x̄ |

◦ Um defeito da definição de erro absoluto é que esta definição não leva em conta
a ordem de grandeza dos valores envolvidos

• Por exemplo: um erro absoluto de 5kgf /cm 2 na leitura de uma pressão de


2500kgf /cm 2 representa uma boa acurácia, enquanto que o mesmo erro na
medida de uma pressão de 20kgf /cm 2 representa uma baixa acurácia

◦ Então, dependendo da ordem de grandeza dos números envolvidos, o erro


absoluto não é suficiente para descrever a precisão de um cálculo.
◦ Por esta razão, o erro relativo Erel é amplamente empregado
11 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo

Definição: Erro relativo


Seja x uma aproximação do valor exato x ∗ , o erro relativo da aproximação x̄ é defi-
nido como:
Eabs x ∗ − x̄

Erel = ∗ =
x x∗

◦ Observe que o erro relativo é adimensional e, muitas vezes, é expresso em


porcentagens. Mais precisamente, o erro relativo em porcentagem da
aproximação x̄ é dado por:

x − x̄
Erel (%) = × 100%
x∗

12 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo

◦ Por exemplo:

a. Considere o valor exato x ∗ = 2345.713 e o valor aproximado x̄ = 2345.000,


então:

Eabs = 0.713 e Erel = 0.00030396

b. Considere agora o valor exato x ∗ = 1.713 e o valor aproximado x̄ = 1.000.


Neste caso temos:

Eabs = 0.713 e Erel = 0.416229

◦ Observe que nos dois exemplos o erro absoluto é o mesmo, embora o erro
cometido pela aproximação seja muito mais significativo no exemplo (b), pois,
em (a), o erro relativo é da ordem de 0.03%, e em (b), é da ordem de 41.6%

13 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo

◦ Observe que nas duas definições anteriores, os erros são calculados em relação
ao valor verdadeiro

◦ Entretanto, na maioria dos casos o valor exato (x ∗ ) não é conhecido a priori

◦ Assim, é necessário trabalhar com um limitante superior (), ou majorante, que


satisfaça a condição:

|x ∗ − x̄ | ≤ 
onde  é um limitante conhecido como erro máximo absoluto

◦ Da desigualdade anterior pode-se concluir que o valor exato pertence ao


intervalo :

− ≤ x ∗ − x̄ ≤  =⇒ x̄ −  ≤ x ∗ ≤ x̄ + 
isto é, x̄ é o valor aproximado da grandeza x ∗ com erro absoluto não superior a
.
14 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo

Portanto, em termos práticos, o erro é calculado usando-se a


melhor estimativa disponı́vel do valor verdadeiro, uma vez que
nos procedimentos numéricos geramos uma sequência de soluções
aproximadas que convergem ou não para a solução do problema

◦ Então, o erro absoluto aproximado (a ) e o erro relativo aproximado (δr ) serão
calculados da seguinte forma:

• Erro absoluto: a = x̄ k +1 − x̄ k

k +1
− x̄ k


• Erro relativo: δr =
x̄ k +1

◦ Os cálculos (as iterações) são repetidos até que:

|a | ≤  ou |δr | ≤ 
ou seja, os erros absolutos e relativos são usados como critério de parada nesta
sequência de aproximações
15 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo
◦ Se a relação |a | ≤  (ou |δr | ≤ ) for válida, supõe-se que x̄ k +1 é a solução do
problema dentro de uma tolerância  pré-estabelecida; caso contrário devemos
proceder ao cálculo de outro termo da sequência
◦ Exemplo 01: Para resolver a equação do tipo f (x ) = x 2 − a = 0, com a > 0,
podemos utilizar o seguinte processo iterativo:
r0 = x0  
1 a
rk +1 = rk + , k = 0, 1, 2, . . .
2 rk
Suponha que a = 2 e x0 = 1 (chute inicial), então:

rk +1 −rk
k rk rk +1 |rk +1 − rk | r
k +1
0 1 1.5 0.5 0.333333
1 1.5 1.416667 0.08333 0.058824
2 1.416667 1.414216 0.002451 0.001733
.. .. .. .. ..
. . . . .
16 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo
◦ Exemplo 01:
• Assim, dado um valor inicial arbitrário x0 , podemos através da expressão
anterior, gerar uma sequência soluções aproximadas r1 , r2 , r3 , . . .

• Dado que a propriedade de convergência da sequência de aproximações


esteja estabelecida e uma tolerência pré-fixada  esteja definida para o
cálculo de uma raiz da equação f (x ) = 0, podemos verificar de forma
absoluta, se a sequência de aproximações atingiu a precisão anterior ,
realizando o seguinte teste:

• Se |rk +1 − rk | ≤  for verdadeiro, dizemos que rk +1 é raiz da equação


f (x ) = 0 com tolerância ; caso contrário, devemos calcular outro
elemento da sequência e, de forma relativa, realizar o seguinte teste:

r −rk
• Se k +1
rk +1
≤  for verdadeiro, concluimos que rk +1 é a raiz da
equação com tolerância  e, em caso contrário, devemos proceder ao
cálculo de outro termo da sequência
17 / 80
Computação Numérica
• 1. Erro absoluto e Erro relativo
◦ Exemplo 01: Para resolver a equação do tipo f (x ) = x 2 − a = 0, com a > 0,
podemos utilizar o seguinte processo iterativo:
r0 = x0  
1 a
rk +1 = rk + , k = 0, 1, 2, . . .
2 rk
Suponha que a = 2 e x0 = 1 (chute inicial), então:

rk +1 −rk
k rk rk +1 r|rk +1 − rk |

k +1
0 1 1.5 0.5 0.333333
1 1.5 1.416667 0.08333 0.058824
2 1.416667 1.414216 0.002451 0.001733
.. .. .. .. ..
. . . . .

• Observe que não é possı́vel obter o valor exato da 2, pois se trata de um
número irracional
• Portanto, também é conveniente relacionar os erros ao número de
algarismos significativos da aproximação
18 / 80
Computação Numérica
• 2. Algarismos significativos

Algarismos significativos

O conceito de algarismos significativos foi desenvolvido para designar formalmente a


confiabilidade de um valor numérico, isto é, os algarismos significativos de um número
são aqueles que podem ser usados com confiança

◦ Por exemplo:
• O valor aproximado π̄ = 3.14 para π = 3.1415926535 . . . tem 3 algarismos
significativos

• O valor aproximado 0.3333 para 1/3 = 0.33333333 . . . tem 4 algarismos


significativos

• O valor aproximado 0.0067 para e −5 = 0.006737946999 . . . tem 2


algarismos significativos
19 / 80
Computação Numérica
• 2. Algarismos significativos
◦ Embora a avaliação dos algarismos significativos de um número seja um
procedimento imediato, alguns casos podem gerar confusão

• Por exemplo, zeros não são sempre algarismos significativos porque eles
podem ser necessários apenas para localizar a vı́rgula decimal

• Os números 0.00001845, 0.0001845 e 0.001845 têm quatro algarismos


siginficativos
• Em 001234.56 tem 6 algarismos significativos, pois os dois zeros à
esquerda não são significativos
• Analogamente, quando zeros à direita são usados em números grandes,
não é claro quantos, ou se algum, destes zeros são significativos

• O valor 45300 pode ter três, quatro ou cinco algarismos significativos,


dependendo de os zeros serem conhecidos com confiança

• Tais incertezas podem ser resolvidas usando-se a notação cientı́fica, onde


4.53 × 104 , 4.530 × 104 e 4.5300 × 104 designam que o número é conhecido
com três, quatro ou cinco algarismos significativos, respectivamente
20 / 80
Computação Numérica
• 2. Algarismos significativos
◦ Ao efetuar operações aritméticas com números em ponto flutuante
também é necessário seguir algumas regras para a apresentação dos resultados:

• Adição e Subtração: Quando somamos ou subtraı́mos dois números com


quantidade de algarismos significativos diferentes, o resultado deve manter
a precisão do operando de menor precisão (i.e. deverá ter o mesmo número
de casas decimais do operando de menor precisão)
• Por exemplo:
• Vamos supor que se queira efetuar o operação 15.67 + 0.1278
• O número 15.67 tem 4 algarismos siginficativos e o último algarismo
significativo é o 7, que ocupa a casa dos centésimos.
• O número 0.1278 também possui 4 algarismos significativos, porém o
último algarismo significativo, o número 8, ocupa a casa dos milésimos
• Portanto, o último algarismo significativo do resultado deve estar na
casa dos centésimos, ou seja: 15.67 + 0.1278 = 15.7978 que,
arredondado, fica 15.80
21 / 80
Computação Numérica
• 2. Algarismos significativos
◦ Ao efetuar operações aritméticas com números em ponto flutuante
também é necessário seguir algumas regras para a apresentação dos resultados:

• Multiplicação e divisão: Quando multiplicamos ou dividimos dois


números com quantidade de algarismos significativos diferentes, o resultado
deve ter o mesmo número de algarismos significativos do operando com o
menor número de algarismos significativos.
• Por exemplo:
• Na operação 7.2569/4 o dividendo tem 5 algarismos significativos e o
divisor apenas 1 algarismo significativo.
• Portanto, o resultado também deve ter apenas uma algarismo
significativo, ou seja, 7.2569/4 = 1.81423 que, arredondado, é igual a
2
• Analisando os dois exemplos anteriores, é fácil concluir que
haverá um acúmulo de erros de arredondamento se um
grande número de operações aritméticas for efetuado para
resolver um determinado problema
22 / 80
Computação Numérica
• 2. Algarismos significativos
◦ Neste sentido, o conceito de algarismos significativos tem duas implicações
importantes:

1. Como os métodos numéricos fornecem resultados aproximados, é


necessário especificar a quantidade de algarismos significativos de uma
aproximação considerada aceitável

• De uma forma geral, podemos estabelecer a seguinte definição

Diz-se que o número x̄ se aproxima do valor x ∗ com n algarismos significa-


tivos corretos se n for o maior inteiro não-negativo para o qual2 :

x − x̄ −n
x ∗ ≤ 0.5 × 10

2 Não existe uma definição única na literatura para o conceito de algarismos significativos corretos.
Embora não sejam equivalentes, todas elas transmitem a mesma idéia.
23 / 80
Computação Numérica
• 2. Algarismos significativos

Diz-se que o número x̄ se aproxima do valor x ∗ com n algarismos signi-


ficativos corretos se n for o maior inteiro não-negativo para o qual:

x − x̄ −n
x ∗ ≤ 0.5 × 10

◦ Exemplo 02: Em matemática, as funções, em geral, podem ser representadas


por séries infinitas. Por exemplo, a função exponencial pode ser calculada
usando-se a expansão em série de Maclaurin:

X x2 x3 xk
ex = =1+x + + + ... + + ...
i=0
2! 3! k!
Utilizar a expansão em série fornecida acima para calcular um valor
aproximado de e 0.5 com pelo menos três algarismos significativos
corretos

24 / 80
Computação Numérica
• 2. Algarismos significativos

Diz-se que o número x̄ se aproxima do valor x ∗ com n algarismos signi-


ficativos corretos se n for o maior inteiro não-negativo para o qual:

x − x̄ −n
x ∗ ≤ 0.5 × 10

◦ Exemplo 02:
• Algoritmo:
• Começando com e x = 1, some um termo de cada vez para estimar o
valor de e 0.5
• Em seguida, calcule o erro relativo e o erro relativo aproximado (δr ).
Observe que o valor verdadeiro é e 0.5 = 1.648721 . . .
• Repita o processo até que o erro relativo aproximado atenda o critério
de erro que garanta três algarismos significativos corretos, ou seja:

δr ≤ 0.5 × 10−n = 0.5 × 10−3 =⇒ δr ≤ 0.0005 ou δr ≤ 0.05%


25 / 80
Computação Numérica
• 2. Algarismos significativos

Diz-se que o número x̄ se aproxima do valor x ∗ com n algarismos signi-


ficativos corretos se n for o maior inteiro não-negativo para o qual:

x − x̄ −n
x ∗ ≤ 0.5 × 10

◦ Exemplo 02:

k ek0.5 Erel (%)a δr (%)b Observe que, em vez


1 1 39.3 de três algarismos sig-
2 1.5 9.02 33.3 nificativos, o resul-
3 1.625 1.44 7.69 tado é exato até o
4 1.645833333 0.175 1.27 quinto algarismo sig-
5 1.648437500 0.0172 0.158 nificativo.
6 1.648697917 0.00142 0.0158
a Erro relativo verdadeiro
b Erro relativo aproximado

26 / 80
Computação Numérica
• 2. Algarismos significativos
◦ Neste sentido, o conceito de algarismos significativos tem duas implicações
importantes:

2. Em computação como cada número√tem apenas um número fixo e finito


de algarismos, números como π ou 5 jamais poderão ser representados
exatamente. Além disso, o sistema binário (representação numérica
normalmente utilizada pelos computadores) pode não representar
precisamente certos números exatos na base 10
A omissão dos algarismos significativos remanescentes é chamada de erro
de arredondamento

O erros numéricos de arredondamento estão diretamente relacionados à ma-


neira como os números são armazenados no computador.
Estes erros surgem devido ao fato de algumas propriedades básicas da arit-
mética real não valerem quando executadas no computador, pois, enquanto
na matemática alguns números são representados por infinitos algarismos, na
máquina isso não é possı́vel, tendo em vista que a memória da máquina é finita.

27 / 80
Computação Numérica
• 2. Algarismos significativos

O erros numéricos de arredondamento estão diretamente relacionados à


maneira como os números são armazenados no computador.
Estes erros surgem devido ao fato de algumas propriedades básicas da arit-
mética real não valerem quando executadas no computador, pois, enquanto
na matemática alguns números são representados por infinitos algarismos,
na máquina isso não é possı́vel, tendo em vista que a memória da máquina
é finita.

◦ Dessa forma, os erros de arredondamento dependem de como os números são


representados na máquina, e a representação, por sua vez, depende da base em
que são escritos os números e a quantidade máxima de dı́gitos usados nessa
representação

◦ Portanto, para melhor enteder como ocorre o erro de arredondamento, é


importante conhecer os diferentes sistemas de numeração e como os
números são armazenados em um computador

28 / 80
Computação Numérica
• 3. Sistema de numeração posicional

Um sistema de numeração (ou sistema numérico) define como um nú-


mero pode ser representado utilizando diferentes bases.
Por exemplo: Os números (2A)16 e (52)8 referem-se à mesma quantidade,
(42)10 , mas suas representações são diferentes. Isso é o mesmo que utilizar
as palavras cheval e horse para se referir à mesma entidade, um cavalo.

◦ Diversos sistemas de numeração foram utilizados no passado, e podem ser


classificados em dois grupos: sistemas posicionais e sistemas não
posicionais

◦ Nesta secão, o objetivo é discutir os sistema de numeração posicional,


uma vez que é o sistema atualmente utilizado.

29 / 80
Computação Numérica
• 3. Sistema de numeração posicional

Em um sistema de numeração posicional, a posição que um sı́mbolo


(dı́gito) ocupa no número determina o valor que ela representa

◦ De um modo geral, um número x real na base β é representado por:

x = ± (dk −1 . . . d2 d1 d0 · d−1 d−2 . . . d−l )β


ou na forma polinomial (representação em ponto fixo)

parte fracionária
z }| {
k −1
x = ± dk −1 × β + . . . + d1 × β + d0 × β + d−1 × β −1 + d−2 × β −2 + . . . + d−l × β −l
1 0
| {z }
parte inteira

onde d é o conjunto de sı́mbolos (algarismos do número), k é o número de digitos da


parte inteira, l é o número de dı́gitos da parte fracionária e β é a base. O sinal ±
mostra que o número pode ser positivo ou negativo.

30 / 80
Computação Numérica
• 3. Sistema de numeração posicional

◦ Exemplo 03: A seguir, os valores posicionais para o número inteiro 224, no


sistema decimal

102 101 100 valor posicional


2 2 4 número
x = + 2 × 102 + 2 × 101 + 4 × 100 valor

◦ Exemplo 04: A seguir, veja os valores posicionais para o número real +24.13

101 100 10−1 10−2 valor posicional


2 4 • 1 3 número
x = + 2 × 10 + 4×1 + 1 × 0.1 + 3 × 0.01 valor

31 / 80
Computação Numérica
• 3. Sistema de numeração posicional
◦ Um sistema de numeração é determinado fundamentalmente pela base, que
indica a quantidade de sı́mbolos e o valor de cada sı́mbolo
◦ De um modo geral, podemos dizer que as bases numéricas mais importantes
em computação são:
• Base decimal: neste sistema, a base é igual a 10, e utilizamos 10 sı́mbolos
para representar um número d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

• Base binária: neste sistema, a base é igual a 2, e utilizamos somente dois


sı́mbolos para representar uma número d = {0, 1}

• Base octal: neste sistema, a base é igual a 8, e utilizamos oito sı́mbolos


para representar um número d = {0, 1, 2, 3, 4, 5, 6, 7}

• Base hexadecimal: neste sistema, a base é igual a 16, e utilizamos 16


sı́mbolos para representar um número
d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C , D, E , F }

32 / 80
Computação Numérica
• 3. Sistema de numeração posicional
◦ Apesar do sistema decimal (base 10) ser mais familiar a um ser humano,
normalmente um computador opera no sistema binário, pois um computador é
composto de chaves eletrônicas que podem ficar em apenas dois estados, ligado
e desligado

◦ Portanto, para representar diferentes tipos de dados, utilizamos um padrão


binário3 , uma sequência, ou como às vezes é chamado, uma cadeia de bits4 .
Historicamente, um padrão binário de 8 bits é chamado de byte

◦ Por exemplo, a sequência abaixo mostra um padrão binário em um


computador de 16 bits

1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1

3 Algumas vezes, o termo palavra é utilizado para se referir a um padrão binário


4 Um bit (dı́gito binário) é a menor unidade de dados que pode ser armazenada em um computador, e
tem um valor igual a 0 ou 1
33 / 80
Computação Numérica
• 3. Sistema de numeração posicional
◦ Dessa forma, na interação entre o usuário e o computador:

• Os dados de entrada são enviados pelo usuário em base decimal

• Estas informações são convertidas para a base binária, e todas as operações


serão efetuadas nesta base

• Os resultados finais serão convertidos para a base decimal e, finalmente,


serão apresentados ao usuário.

◦ Todo este processo de conversão é uma fonte de erros que afeta o resultado
final dos cálculos em razão da limitação da representação de um número em
um computador

◦ Na próxima seção, estudaremos os processos para conversão de números do


sistema decimal para o binário e vice-versa

34 / 80
Computação Numérica
• 4. Conversão de base
Binário para decimal:

Este tipo de conversão é fácil e rápido, pois multiplicamos cada dı́gito pelo
seu valor posicional no sistema binário e somanos os resultados parciais
para obter o número no sistema decimal.

parte fracionária
z }| {
k −1
x = dk −1 × 2 + . . . + d1 × 2 + d0 × 2 + d−1 × 2−1 + . . . + d−l × 2−l
1 0
| {z }
parte inteira

◦ Exemplo 05: Mudar a representação do números:

i. 1101 da base 2, para a base 10

ii. 110.11 da base 2, para a base 10

iii. 0.110 da base 2, para a base 10

35 / 80
Computação Numérica
• 4. Conversão de base
◦ Exemplo 05:
i. 1101 da base 2, para a base 10
1101 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 8 + 4 + 0 + 1 = 13
Portanto: (1101)2 = (13)10
ii. 110.11 da base 2, para a base 10
110.11 = 1×22 +1×21 +0×20 +1×2−1 +1×2−2 = 4+2+0+0.5+0.25 = 6.75
Portanto: (110.11)2 = (6.75)10
0.110 = 1 × 2−1 + 1 × 2−2 + 0 × 2−3 = 0.5 + 0.25 + 0 = 0.75
Portanto: (0.110)2 = (0.75)10

O Scilab oferece uma função para a conversão de um número binário para a


base decimal (número inteiro): bin2dec. Exemplo:
-> bin2dec(’101’)
ans =
5
36 / 80
Computação Numérica
• 4. Conversão de base
Número inteiro para binário:

O procedimento consiste na divisão do número na base decimal sucessiva-


mente por 2, armazenando a cada passo, o algarismo do resto (r ), até que
o quociente da divisão seja igual a 0. O binário é constituı́do pelos restos
das divisões, a partir do resto (bit) mais significativo (rn ) para o menos
significativo (r1 ).

25 2 Dessa forma temos:


1 12 2 (x )10 = (rn rn−1 . . . r1 )2
0 6 2 Obs.: O dı́gito ”mais à
0 3 2 direitaӎ chamado de bit
menos significativo, pois
1 1 2 possui o menor peso. Já o
1 0 dı́gito ”mais à esquerda”é
chamado de bit mais
Resto (bit) mais significativo
significativo, pois possui o
Resto (bit) menos significativo maior peso.
37 / 80
Computação Numérica
• 4. Conversão de base
◦ Exemplo 06: Mudar a representação do número:
i. 23 da base 10, para a base 2

23 2
1 11 2
1 Portanto:
5 2
1 2 2
(23)10 = (10111)2
0 1 2
1 0

O Scilab oferece uma função para a conversão de um número decimal inteiro


para a base binária: dec2bin. Exemplo:
-> dec2bin(347)
ans =
101011011

38 / 80
Computação Numérica
• 4. Conversão de base

Número real para binário:

Nesses casos, precisamos de dois procedimentos, um para parte inteira


(quando presente) e outro para a parte fracionária.

Conversão da parte inteira: Para converter a parte inteira, seguimos o


procedimento apresentado no item b. (i.e. divisões sucessiva por 2).
Conversão da parte fracionária: O procedimento é constituı́do pelos
seguintes passo:

a. Multiplicar o número fracionário por 2


b. A parte inteira do passo a) é o primeiro dı́gito binário
c. A parte fracionária do passo b) é novamente multiplicada por 2
d. O processo continua até que a parte fracionária seja nula.

39 / 80
Computação Numérica
• 4. Conversão de base
◦ Exemplo 07: Mudar a representação dos números:
i. 9.625 da base 10, para a base 2
Primeiramente, decompomos 9.625 como a soma de um número inteiro e
um número fracionário, ou seja:

9.625 = 9 + 0.625

Para converter a parte inteira, seguimos o procedimento apresentado no


item b., o que nos fornece (9)10 = (1001)
Para converter a parte fracionária, usamos o algoritmo do slide anterior:
0.625 × 2 = 1.25
0.25 × 2 = 0.5
0.5 × 2 = 1.0
Portanto: (9.625)10 = (1001.101)2

40 / 80
Computação Numérica
• 4. Conversão de base
◦ Exemplo 07: Mudar a representação dos números:
ii. 0.125 da base 10, para a base 2
0.125 × 2 = 0.25
0.25 × 2 = 0.5
0.5 × 2 = 1.0
Portanto: (0.125)10 = (0.001)2
iii. 3.8 da base 10, para a base 2
Conversão da parte inteira: (3)10 = (11)2
Conversão da parte fracionária:
0.8 × 2 = 1.6
0.6 × 2 = 1.2
0.2 × 2 = 0.4
0.4 × 2 = 0.8
0.8 × 2 = . . .
Logo, (3.8)10 = (11.11001100 . . . )2 tem representação finita no sistema decimal,
mas representação infinita na base binária. Esse exemplo ilustra um caso de
erro de arredondamento
41 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ Conforme visto na seção anterior, um número é modificado para o sistema
binário antes de ser armazenado na memória do computador
◦ Contudo, ainda há questões que precisam ser abordadas:

• Como os números (inteiros e reais) são armazenados em um


computador (representação de um número)
• Como armazenar o sinal de um número
• Como mostrar o ponto decimal

◦ Existem diversas maneiras de se lidar com a questão do sinal, que serão


discutidas posteriormente.
◦ Para o ponto decimal, os computadores utilizam duas diferentes representações:
• Representação com ponto fixo: representação utilizada para armazenar
números inteiros (i.e. sem parte fracionária)
• Representação em ponto flutuante: representação utilizada para
armazenar um número real (i.e. com uma parte fracionária)
42 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros
• Em princı́pio, a representação de um número inteiro no computador não
apresenta qualquer dificuldade.
• Como os computadores atuais, em quase sua totalidade, utilizam Unidades
Lógica e Aritmética que representam internamente os números em uma
base fixa β (β ≥ 2), dado um número inteiro x 6= 0, ele possui uma única
representação:

x = ±(dk −1 . . . d2 d1 d0 ·)β = ±(dk −1 × β k −1 + . . . + d1 × β 1 + d0 × β 0 )

Portanto, um número inteiro normalmente é armazenado na memó-


ria utilizando a representação em ponto fixo.

• Contudo, um usuário (ou um programa) pode armazenar um número


inteiro como um número real, com a parte fracionária definida como zero!
• Esse procedimento é adotado, por exemplo, quando um número inteiro
for grande demais para ser armazenado em um tamanho predefinido
43 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros

Para utilizar a memória do computador com mais eficiência, números


inteiros sem sinal e com sinal são armazenados de modo diferente!

◦ Um número inteiro sem sinal nunca pode ser negativo, e pode assumir
somente o valor 0 ou valores positivos, ou seja, [0, +∞]

No entanto, uma vez que nenhum computador pode representar todos os


números inteiros nesse intervalo, a maioria dos computadores define uma
constante chamada de máximo número inteiro sem sinal (Imax ),
que tem o valor de

Imax = 2n − 1
onde n é o número de bits alocado para representar um inteiro sem sinal

44 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros
Em sala de aula...

Exemplo 08: Represente o número 50 em uma localização de memória


de um computador hipotético de 8 bits utilizando a representação sem
sinal.

50 em base binária → 1 1 0 0 1 0
Acrescente 2 bits à es- → 0 0 1 1 0 0 1 0
querda
◦ Portanto: (50)10 = (00110010)2

45 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros

Na prova...

Represente o número 20 em uma localização de memória de um


computador hipotético de 4 bits utilizando a representação sem sinal.
Primeiro, transforme o número 20 em base binária: (20)10 = (10100)2
5 (!!!!) é o número de bits para representar o decimal 20

46 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros

Relembrando....

Como nenhum computador pode representar todos os números inteiros


no intervalo [0, +∞], a maioria dos computadores define uma constante
chamada de máximo número inteiro sem sinal (Imax ), que tem o
valor de

Imax = 2n − 1
onde n é o número de bits alocado para representar um inteiro sem sinal

• Devido a limitações de tamanho - o número alocado de bits -, o intervalo de


números inteiros que pode ser representado é limitado
• Por exemplo, em um computador de 4 bits, se uma operação resultar em
um valor maior que 24 − 1 = 15 ocorre um erro conhecido como overflow

47 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.1. Representação de números inteiros
• A abaixo mostra o que ocorre se tentarmos armazenar um número
inteiro sem sinal que seja maior do que 15 em uma localização de
memória que pode manter somente 4 bits.

1 0000 0001 • Se armazenarmos o número inteiro 11 em uma


111
localização da memória e, então, tentarmos
10

00

0 1
15
11

10

somar 9, esperamos que o resultado seja 20,


14

9 un
01

001

mas a resposta do computador é 4


2

ma .
1100 11

12 13
so

1
3

0100 01

• Como 5 é o número mı́nimo de bits que


4

utilizamos para representar o inteiro 20


11

5
1

(20 = 10100), o computador elimina o bit


101

01
10

7 mais à esquerda e mantém os quatro bits


10

9 8
11

mais à direita, ou seja:


10

011
1 1000 1001
(0100)2 = (4)10

48 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.2. Representação sinal-magnitude
• Naturalmente é necessário representar também o sinal dos números inteiros

• Existem diversas maneiras de se lidar com a questão do sinal. A


abordagem mais direta é o formato sinal-magnitude conhecido como
método dos valores com sinal, que foi amplamente utilizado nas
Unidades Lógica e Aritmética dos primeiros computadores digitais binários
• Atualmente, quase todos os computadores utilizam a chamada
representação complemento de 2 para armazenar um número inteiro
com sinal. Contudo, por questão de tempo, essa representação não será
abordada neste curso.
• Embora o formato sinal-magnitude não seja comumente empregado para
armazenar números inteiros, ele o é para parte de um número real no
computador. Por essa razão, analisamos aqui, brevemente, esse formato.

No método dos valores com sinal, o bit mais significativo (i.e. o primeiro bit)
define o sinal do número. Se for 0, o número é positivo. Se 1, o número
é negativo. Os bits restantes são usados para armazenar o número.

49 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.2. Representação sinal-magnitude
• Isso significa que em um computador de 32 bits, podemos utilizar somente
31 para representar o valor absoluto de um número (número sem sinal).

• Neste método, o intervalo disponı́vel para números inteiros sem sinal (de 0
até 2n − 1) é dividido em dois subintervalos iguais.

• Por exemplo, para um computador hipotético de 4 bits o intervalo é de


0000 a 1111. Esse intervalo é dividido em duas metades: de 0000 a
0111 e de 1000 a 1111, conforme pode ser visto na figura abaixo

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 −0 −1 −2 −3 −4 −5 −6 −7

Observe que os números negativos aparecem à direita dos positivos, que é


o contrário do conceito convencional sobre positivos e negativos. Observe
também que temos dois 0s: o zero positivo (0000) e o zero negativo
(1000)

50 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.2. Representação sinal-magnitude

Portanto, o intervalo de números que pode ser armazenado em uma


computador com n bits é de −(2n−1 − 1) até +(2n−1 − 1), uma vez que
o número zero possui duas representações possı́veis: o zero negativo e o
zero positivo

• Implicações:

• Um computador de 32 bits é capaz de representar todos os inteiros


entre −231 + 1 até 231 − 1, ou seja, entre −2.147.483.647 e
+2.147.483.647

(−1)s (20 + 21 + . . . + 230 ) = (−1)s (231 − 1) = (−1)s × 2.147.483.647

• Se uma operação aritmética resultar em um número que não pode ser


armazenado nos registros ocorre um erro conhecido como overflow
51 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.2. Representação sinal-magnitude
• A figura abaixo mostra o que acontece se tentarmos armazenar um número
inteiro que seja maior que 7 em uma máquina de 4 bits.
• Se armazenarmos o número inteiro −5 na
memória e tentarmos subtrair 7 desse número,
1 0000 0001 esperamos que o resultado seja −12, mas a
111
resposta do computador é +6!
10

00

+0 1
-7
11

10

• A razão disso é que, se começarmos de −5 em


1 1100 1101

001
6

2
-

uma representação circular, e prosseguirmos


-4 -5

1 0100
3

sete unidades no sentido anti-horário,


terminamos em +6
4
subt
-3

ai
5

010
r

7 un.
101

Normalmente, erros de overflow fazem o cál-


-2

7 culo parar ou retornar um número truncado


10

-0 -1
11

que não corresponde ao resultado correto da


10

011
1 1000 1001 operação, a menos que o programa tenha
sido projetado para detectar essa ocorrên-
cia.

52 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• O primeiro ponto a ser discutido, é o motivo da criação da notação em
ponto flutuante para representar números reais
• Normalmente, um computador aloca uma quantidade fixa de bits
para representar a parte inteira e a parte fracionária
• Por exemplo:
• No sistema decimal, para um total de 16 dı́gitos, considere o uso de
uma representação em ponto fixo, com 14 posições para armazenar a
parte inteira e 2 posições para armazenar a parte fracionária. A
precisão de um número real é perdida se tentarmos representar um
número decimal como 1,00234; o sistema armazena o número como
1,00.
• No sistema decimal, considere o uso de uma representação em ponto
fixo, com 10 posições para armazenar a parte inteira e 6 posições para
armazenar a parte fracionária, formando um total de 16 dı́gitos. A
precisão de um número real nesse sistema é perdida se tentarmos
representar um número decimal como 236154302345,00. O sistema
armazena o número como 6154302345,00; a parte inteira é muito
menor do que deveria ser.
53 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

Portanto, em virtude das limitações de memória, números reais com


W partes inteiras muito grandes ou partes fracionárias muito pequenas
não devem ser armazenados na representação em ponto fixo.

Representação em ponto flutuante

A solução para manter a exatidão ou a precisão é utilizar a represen-


tação em ponto flutuante. Essa representação permite que o ponto
decimal flutue: podemos ter diferentes quantidade de dı́gitos à direita
ou à esquerda do ponto decimal

• Esta representação é mais flexı́vel que a representação em ponto fixo e


aumenta o intervalo de números reais que pode ser armazenado
54 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Na representação em ponto flutuante, um número, seja real ou binário, é
composto de três partes, conforme mostrado na figura abaixo

sinal deslocador número com ponto fixo

J 1. A primeira parte é o sinal, positivo ou negativo. A


segunda mostra quantas posições o ponto decimal deve
mudar para a direita ou esquerda, para formar o número
propriamente dita. A terceira é uma representação em
ponto fixo, em que a posição do ponto decimal é fixa
2. Nas ciências, a representação em ponto flutuante, também
chamada de notação cientı́fica, é utilizada para
representar números decimais muito pequenos ou muito
grandes.

55 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

J 2. Nas ciências, a representação em ponto flutuante, também


chamada de notação cientı́fica, é utilizada para representar
números decimais muito pequenos ou muito grandes.

• Exemplo 09: Representar o número decimal 6154302345.14 em notação


cientı́fica.
Resposta:
6154302345.14 × 100 = 61543023.4514 × 102 = . . . = 0.615430234514 × 1010

Observe que um número pode ser representado de várias formas


W equivalentes em notação cientı́fica. Portanto, para uniformizar a
representação da parte fixa, os métodos cientı́ficos e de ponto flu-
tuante utilizam uma representação normalizada
56 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

Observe que um número pode ser representado de várias formas


W equivalentes em notação cientı́fica. Portanto, para uniformizar a
representação da parte fixa, os métodos cientı́ficos e de ponto flu-
tuante utilizam uma representação normalizada

Os métodos cientı́ficos (sistema decimal) e de ponto flutuante em


ª computação (sistema binário) utilizam somente um dı́gito à es-
querda do ponto decimal. Isso é chamado de normalização

• No métodos cientı́ficos (i.e. no sistema decimal), o dı́gito à esquerda do


ponto decimal pode ser um número entre 1 e 9, ou seja, o expoente
(deslocamento) é escolhido de tal forma que 1 ≤ |x | ≤ 9. Por exemplo: em
notação cientı́fica, a constante de Avogadro é representada como 6.02 × 1023
57 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Na representação em ponto flutuante, um número x , seja real ou binário, é
representado da seguinte forma normalizada:

x = sinal(m)β × β e
onde m é a mantissa, β ≥ 2 é a base e e é o expoente.

• Sinal: O sinal do número pode ser armazenado utilizando 1 bit (0


ou 1)

• Mantissa: é o número inteiro binário à direita do ponto decimal.


Ela define a precisão do número e é armazenada em notação em
ponto fixo.

• Expoente: O expoente define o deslocamento do ponto decimal.


Observe que o expoente pode ser positivo ou negativo

58 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Na representação em ponto flutuante, um número x , seja real ou binário, é
representado da seguinte forma normalizada:

x = sinal(m)β × β e
onde m é a mantissa, β ≥ 2 é a base e e é o expoente.
• Neste sistema de ponto flutuante, as seguintes condições devem ser
verificadas:

1. m = 0.d1 d2 . . . dn onde n ∈ N é o número máximo de dı́gitos


da mantissa. O valor de n é determinado pelo padrão binário
da máquina.
2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . , n.
3. emin ≤ e ≤ emax onde emin , emax ∈ Z são números cujos
valores dependem da máquina utilizada. O sistema de
Excesso (ou bias) é o método utilizado para armazenar o
expoente.
59 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

1. m = 0.d1 d2 . . . dn onde n ∈ N.
2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . , n.
3. emin ≤ e ≤ emax onde emin , emax ∈ Z são números cujos valores
dependem da máquina utilizada. O sistema de Excesso (ou
bias) é o método utilizado para armazenar o expoente.

Sistema de Excesso
J • Neste sistema, os números inteiros positivos e negativos são armazenados
como números inteiros sem sinal.
• Para representar um número inteiro negativo ou positivo, um número in-
teiro positivo (chamado de bias) é adicionado a cada número para deslocá-
los uniformemente para o lado positivo
• O valor desse bias é 2m−1 −1, onde m é o tamanho de memória destinada
para armazenar o expoente.
60 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Por exemplo: para um sistema de 4 bits podemos expressar 16 números
inteiros, utilizando uma posição para o 0 e dividindo os outros 15
(24 − 1 = 15) para expressar os números inteiros de -7 a 8, conforme figura
abaixo.

-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Adicionando 7 unidades a cada número inteiro nesse intervalo, podemos


W transladar uniformemente todos os números inteiros à direita e tornar todos
eles positivos, sem modificar a posição relativa dos números inteiros, um
em relação ao outro, como mostra a figura acima. O sistema é chamado
Excesso 7, ou representação com bias igual a 7.
Para a alocação de quatro bits, o bias é 24−1 − 1 = 7, como era de se
esperar.
61 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

1. m = 0.d1 d2 . . . dn onde n ∈ N é o número máximo de dı́gitos


determinado pelo tamanho da mantissa.
2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . , n.
3. emin ≤ e ≤ emax onde emin , emax ∈ Z são números cujos
valores dependem da máquina utilizada.

• Até meados da década de 80, cada fabricante de computador adotava seu


próprio formato para representar números em ponto flutuante
• Em 1985 o Instituto de Engenheiros Elétricos e Eletrônicos (IEEE)
definiu diversos padrões para o armazenamento de números em ponto
flutuante (relatório Binary Floating Point Arithmetic Standard 754)
• O padrão IEEE-754 define três formatos:
• Precisão simples (float - 32 bits)
• Precisão dupla (double - 64 bits)
• Precisão estendida (80 bits)
62 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• As especificações para precisão simples e dupla são apresentadas na Tabela
abaixo

Parâmetro Precisão Simples Precisão dupla


número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

• Por exemplo, o formato com precisão simples utiliza um total de 32


bits para armazenar um número real na representação em ponto flutuante.

• O sinal ocupa 1 bit (0 para positivo e 1 para negativo)


• O expoente ocupa 8 bits (utilizando um bias de 127)
• A mantissa ocupa 23 bits (número sem sinal).
63 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

1. m = 0.d1 d2 . . . dn onde n ∈ N
2. 1 ≤ d1 ≤ β − 1 e 0 ≤ di ≤ β − 1 para i = 2, . . . , n.
...

Obs.1: O Padrão IEEE-754 faz uma exceção à regra de normalização.


J Como em base binária o primeiro dı́gito é sempre 1, a mantissa assume
um 1 implı́cito a esquerda do ponto decimal e, portanto, o primeiro bit da
mantissa pode de fato ser zero.
Esse 1 implı́cito é referido como bit oculto e permite um ganho de preci-
são, pois pode-se considerar que a mantissa é armazenada em 24 bits.
Por exemplo: na representação normalizada, o número 5.5 = 101.1 =
0.1011 × 23 . Como a IEEE-754 assume um 1 implı́cito à esquerda do ponto
decimal, então o número 5.5 é representado como 1.011 × 22 , ou seja, a
mantissa é 011 e não inicia com um 1.
64 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• As especificações para precisão simples e dupla são apresentadas na Tabela
abaixo

Parâmetro Precisão Simples Precisão dupla


número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Obs.2: A sequência de bits para o expoente 00000000 e 11111111 (para


J um formato de 32 bits) é reservado para representar o número 0 e ∞ (ou
a ocorrência de erro, NaN - Not a Number), respectivamente

65 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• As especificações para precisão simples e dupla são apresentadas na Tabela
abaixo
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

• Número 0: mantissa e expoente nulos;


J • Valor infinito (∞): mantissa nula e expoente (11111111)2
• Not-a-Number (Nan): mantissa não nula e expoente (11111111)2 .
Representa um valor irrepresentável. Os elementos da mantissa não podem
ser todos nulos, pois mantissa nula é usada para representar o ∞. Exemplo
0/0
66 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• As especificações para precisão simples e dupla são apresentadas na Tabela
abaixo

Parâmetro Precisão Simples Precisão dupla


número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Portanto, em uma arquitetura de 32 bits:


• O maior expoente é representado pelo número: (11111110)2 = (254)10 , ou
seja, 127 + emax = 254 =⇒ emax = 127
• O menor expoente é representado pelo número: (00000001)2 = (1)10 , ou
seja, 127 + emin = 1 =⇒ emin = −126

67 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• As especificações para precisão simples e dupla são apresentadas na Tabela
abaixo
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Obs.3: Um sistema de ponto flutuante é definido pela quádrupla


J F (β, n, emin , emax ), onde β é base, n é a precisão, emin e emax são os
valores mı́nimos e máximos do expoente. A união de todos os números
em ponto flutuante, juntamente com a representação do zero, constitui o
sistema de ponto flutuante normalizado

68 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

Parâmetro Precisão Simples Precisão dupla


número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Obs.4: Os valores da tabela acima representam o alcance e a precisão da


J representação.
• Alcance: está relacionado ao número de bits do expoente. Quanto maior
for o número de bits, maior o espectro de alcance do número.
• Precisão: está relacionada ao número de bits da mantissa. Quanto
maior for o número de bits, maior o número de dı́gitos significativos que
podem ser armazenados.

69 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Portanto, não é possı́vel representar números arbitrariamente gran-


des ou arbitrariamente pequenos, uma vez que emin e emax são fini-
tos.

1. O menor positivo representável, é o real formado pela menor mantissa


multiplicada pela base elevada ao menor expoente, isto é:

menor+ = (0.1 |00 {z


. . . 0} ) × 2emin
n−1 vezes

70 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Portanto, não é possı́vel representar números arbitrariamente gran-


des ou arbitrariamente pequenos, uma vez que emin e emax são fini-
tos.

2. O menor negativo representável, é o real formado pela menor mantissa


multiplicada pela base elevada ao menor expoente, isto é:

menor− = −(0. 11 . . . 1}) × 2emin


| {z
n vezes

71 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Portanto, não é possı́vel representar números arbitrariamente gran-


des ou arbitrariamente pequenos, uma vez que emin e emax são fini-
tos.

2. O maior positivo representável, é o real formado pela menor mantissa


multiplicada pela base elevada ao maior expoente, isto é:

maior+ = +(0. 11 . . . 1}) × 2emax


| {z
n vezes

72 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

Portanto, não é possı́vel representar números arbitrariamente gran-


des ou arbitrariamente pequenos, uma vez que emin e emax são fini-
tos.

2. O maior negativo representável, é o real formado pela menor mantissa


multiplicada pela base elevada ao maior expoente, isto é:

maior+ = −(0.1 |00 {z


. . . 0} ) × 2emax
n−1 vezes

73 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

Parâmetro Precisão Simples Precisão dupla


número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

• Na precisão simples (32 bits) o número de dı́gitos significativos


(precisão p) é de aproximadamente 7 dı́gitos decimais, pois:
2−24 = 10−p =⇒ log10 (2−24 ) = log10 (10−p ) ∴ p = 24log10 (2) ≈ 7.22

• Na precisão dupla (64 bits) o número de dı́gitos significativos (precisão


p) é de aproximadamente 16 dı́gitos decimais, pois:
2−53 = 10−p =⇒ log10 (2−53 ) = log10 (10−p ) ∴ p = 53log10 (2) ≈ 15.95

74 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

ª • No Scilab, o menor número positivo e o maior número positivo podem


ser obtidos através da função number_properties

◦ number_properties(’tiny’): retorna o menor número positivo


normalizado
◦ number_properties(’huge’): retorna o maior número positivo
normalizado
◦ number_properties(’digits’): retorna o tamanho da mantissa
75 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
Parâmetro Precisão Simples Precisão dupla
número total de bits 32 64
sinal - número de bits 1 1
expoente - número de bits 8 11
mantissa - número de bits 23 52
bias - número inteiro 127 1023

ª • No Scilab, o épsilon da máquina é obtido pela constante %eps.


• épsilon da máquina (ou precisão da máquina): denotada por ,
é a metade da distância entre 1 e o menor ponto flutuante
estritamente maior que 1, ou seja:
 = (1/2)β 1−n
ou, em outras, palavras é o menor número positivo em ponto
flutuante, tal que 1 +  > 1
• Para precisão dupla  = 2−52 ≈ 2.2 × 10−16
76 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Exemplo 10: Considere o sistema F (10, 3, −2, 2), represente os números
x1 = 0.35, x2 = −5.175; x3 = 0.0123, x4 = 5391.3 e x5 = 0.0003 em ponto
flutuante na forma normalizada
• Solução:

x1 = 0.35 = 0.350 × 100 Obs.1: Observe que o número x2 =

x2 = −5.175 = −0.51? × 10 1 W −5.175 = 0.5175 × 101 possui 4 dı́gi-


tos na mantissa. Se for usado trun-
x3 = 0.0123 = 0.123 × 10−1 camento, x2 será representado por
0.517 × 101 ; se for usado o arredon-
x4 = 5391.3 = 0.539 × 104 damento, x2 será representado por
0.518 × 101 , conforme será visto mais
x5 = 0.0003 = 0.300 × 10−3 adiante.

77 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
• Exemplo 10: Considere o sistema F (10, 3, −2, 2), represente os números
x1 = 0.35, x2 = −5.175; x3 = 0.0123, x4 = 5391.3 e x5 = 0.0003 em ponto
flutuante na forma normalizada
• Solução:

x1 = 0.35 = 0.350 × 100 Obs.2: Observe que os números 5391.3

x2 = −5.175 = −0.51? × 10 1 W e 0.0003 não podem ser respresenta-


dos nesse sistema. De fato, o número
x3 = 0.0123 = 0.123 × 10−1 5391.3 = 0.539 × 104 e portanto o expo-
ente é maior que 2, causando overflow.
x4 = 5391.3 = 0.539 × 104 Por outro lado, 0.0003 = 0.300 × 10−3 e
assim o expoente é menor que −2 cau-
x5 = 0.0003 = 0.300 × 10−3 sando underflow

78 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante

Existe um intervalo limitado de números que podem ser re-


presentados: no caso de números em ponto flutuante, um número não
poderá ser representado se o expoente e estiver fora dos limites emin e
emax . Ocorrerá erro de underflow se e < emin e de overflow se e > emax

overflow underflow overflow

menor− maior− 0 menor+ maior+

Representável (−) Representável (+)

79 / 80
Computação Numérica
• 5. Representação de números em máquina
◦ 5.3. Representação em ponto flutuante
overflow underflow overflow

menor− maior− 0 menor+ maior+

Representável (−) Representável (+)

J • Normalmente, erros e underflow ou overflow fazem o cálculo parar, ou


retornam um número infinito (overflow), ou nulo (underflow), ou um
número que não corresponde ao resultado correto da operação
• Note que imprecisão é diferente de underflow, pois imprecisão está
relacionada a uma limitação do número de bits da mantissa o que
acarreta em uma perda de precisão do valor efetivo
80 / 80
(arredondamento)

Você também pode gostar