Escolar Documentos
Profissional Documentos
Cultura Documentos
Apesar de o cálculo numérico ter suas raı́zes anteriores à era cristã, envolvendo
cálculos manuais ou com o auxı́lio de ferramentas como varas de contagem, foi so-
mente no século XX, com a concepção e difusão dos computadores eletrônicos, que a
humanidade começou a desfrutar dos métodos numéricos em grande escala. Hoje, por-
tanto, quem realiza os cálculos são os computadores - não mais “a pessoa que computa”
mas “a coisa que computa”.
Logo, o humano passa a operar o computador, e, para tal, precisa lidar com as
peculiaridades da matemática realizada pela máquina - a aritmética de máquina.
Motivação: na maioria das calculadoras, o resultado do cálculo 254 − 25−4 é igual
a 390625, que é igual a simplesmente 254 . O que ocorreu com a parcela 25−4 ?
1 Representação de números
Para nós, realizar contagens baseadas nos dedos das mãos (i.e., nas bases 5 ou 10) pode
parecer absolutamente intuitivo1 , mas a fabricação de hardware que permite apenas a
comutação entre dois estados é extremamente barata - um transistor, unidade básica da
lógica digital, é, hoje, milhares de vezes mais barato do que um grão de arroz! Logo, a
representação binária (i.e., na base dois) tornou-se pervasiva nos computadores digitais.
Mas qual é a diferença, na prática, entre representações em diferentes bases?
A nossa representação decimal implica que há 10 sı́mbolos diferentes para represen-
tar os números. Valores maiores do que 10 são representados por meio de combinações
dos sı́mbolos permitidos. Cada posição nessa composição carrega diferentes pesos:
quanto mais à esquerda, maior o peso do sı́mbolo, i.e., em 2210 (“22” na base 10),
o “2” à esquerda tem maior valor do que o da direita. A representação binária tem
exatamente a mesma filosofia, mas permite apenas 2 sı́mbolos: 0 e 1.
1
Muitos povos primitivos aparentemente não tinham motivação para contar além de dois! Uma
tribo da Tasmânia, por exemplo, contava “um, dois, vários”. O costume de considerar o número
“três” como um número além de todos os outros, entretanto, deveria nos ser muito mais familiar do
que parece. É provável que “três”, em várias lı́nguas, tenha origem em algum radical similar a “trans”
(“além”), que tem uma forte conexão com “vários”. Por exemplo, no francês, très bien significa “muito
bem”; no latim, ter felix significa “muito feliz”; no grego, trismegistos significa “o melhor”.
1
29 de março de 2020
Note que, na base 2, para representar 4 números, são necessários 2 bits; para
representar 8, são necessários 3 bits; para representar n, são necessários log2 n bits (ou
seja, k bits permitem 2k representações).
É interessante que a regra de formação dos números nas diferentes bases também
se estende aos números fracionários:
2
29 de março de 2020
• pequena faixa dinâmica (i.e., distância entre o maior e o menor valores repre-
sentáveis);
3
29 de março de 2020
0|{z} 0 0 0} = 0 · 20 = 0
0 0 0| 0{z (11)
expoente mantissa
1|{z} 1 1 1} = 31 · 27 = 3968.
1 1 1| 1{z (12)
expoente mantissa
x = ± m be , (13)
onde 1 ≤ m < b é a mantissa (que é um número em ponto fixo!) e e ∈ Z, é o
expoente. O número zero é um caso à parte: ele sempre pertence a todas as máquinas,
e é representado com mantissa zero. Comumente, as máquinas especificam a faixa de
variação do expoente, sendo e1 o menor, e e2 , o maior. Ademais, também se especifica
a quantidade t ∈ N de dı́gitos significativos da mantissa. Ou seja, se t = 3 e b = 10,
a mantissa m pode variar entre 1,00 e 9,99. Uma máquina F de ponto flutuante na
base b, com t dı́gitos significativos, menor expoente e1 e maior, e2 , é normalmente
representada como
F (b, t, e1 , e2 ). (14)
Logo, se temos a máquina F (10, 3, −5, 5), sabemos que o número x = 3,142·102 não
pertence a F porque esta só suporta 3 dı́gitos significativos, enquanto o número tem
4. Também os números y = 0,000000314 e z = 31400000 não pertencem a F devido
a valores não permitidos nos expoentes. Para verificar, podemos representar cada um
dos números no formato da Eq. (13): y = 3,14 · 10−7 e z = 3,14 · 106 , evidenciando
valores proibidos dos expoentes.
Conclui-se, portanto, que, apesar de tratarmos de números reais, apenas um subcon-
junto finito dos números reais pertence a máquinas de ponto flutuante, mesmo dentro
da sua faixa dinâmica - isso também ocorre com números representados em ponto fixo.
O que será, então, que ocorre se, na máquina F acima, uma operação matemática
resultar no número 3,142, que não pertence a F ? Veremos em breve.
Distância entre dois números consecutivos. A ampliação da faixa dinâmica
em máquinas de ponto flutuante não vem sem certos efeitos colaterais. O primeiro se
4
29 de março de 2020
5
29 de março de 2020
−5 a 5
00 a 99
z}|{
z}|{
, ·10 .
± |{z} (17)
1a9
Note que entre −5 e 5 há 11 valores possı́veis, pois o expoente zero deve ser incluı́do.
Generalizando3 a Eq. (18), temos, para F (b, t, e1 , e2 ) e e1 < 0:
6
29 de março de 2020
7
29 de março de 2020
Seguindo esses passos, temos que y seria arredondado para y = 3,142 · 103 .
Adição & subtração. Agora estamos prontos para aprender as 4 operações
básicas. Vamos calcular x + y na máquina F descrita acima. O procedimento a seguir
pode ser utilizado para realizar adições (subtrações) em máquinas de ponto flutuante.
• y = 0,03142 · 105 .
• z = x + y = 2,74942 · 105 .
8
29 de março de 2020
• z = 2,74942 · 105 .
• z = 2,749 · 105 .
• z = x · y = 8,539956 · 108 .
• z = 8,539956 · 108 .
9
29 de março de 2020
10
29 de março de 2020
estado de alerta por vários dias, sem parar. Acontece que o marcador de tempo, usado
para calcular a trajetória do mı́ssil de defesa, era em ponto flutuante. Após vários dias
em execução, o relógio não era mais incrementado pelo mesmo problema da expressão
254 − 24−4 : uma parcela tornou-se irrelevante em relação à outra. Logo, o sistema não
conseguia mais calcular corretamente o momento e a trajetória dos mı́sseis de defesa.
O objetivo desta seção é fortalecer o senso crı́tico do engenheiro ao trabalhar com
aritmética de ponto flutuante.
Cancelamento subtrativo. Considere que, na máquina F (10, 4, −5,5), desejemos
calcular a derivada de f (x) = x2 em x = 3,253. Pela teoria, sabemos que f ′ (3,253) =
6,506. Numericamente, vamos tentar chegar a esse resultado por meio da expressão da
derivada obtida pelo limite:
f (x0 + h) − f (x0 )
f ′ (x0 ) = lim . (30)
h→0 h
Intuitivamente, podemos presumir que, quanto mais próximo de 0 estiver h, mais
preciso será nosso cálculo. A Tabela (2.1) mostra os resultados obtidos para h variando
de 0,032a0,001.
Note que a melhora não foi monotônica com a redução de h. De forma mais
especı́fica, para os dois menores valores de h, houve significante piora no valor de
f ′ (3,253). Por que isso ocorre?
Esse é o fenômeno do cancelamento subtrativo, bastante conhecido na análise numérica.
O resultado do cancelamento é a perda - muitas vezes catastrófica - da precisão quando
um número é subtraı́do de outro muito próximo. No exemplo acima, isso ocorre de
forma mais pronunciada quando h se aproxima de zero, fazendo f (x0 +h) muito próximo
de f (x0 ). Para entender melhor como ocorre essa perda de precisão, vamos a um exem-
plo mais simples.
Consdere que, na mesma máquina, seja realizada a operação x − y = z, onde
x = 8,000 · 102 , y = 6,000 · 102 e, portanto, z = 2,000 · 102 . Note que, na verdade,
x pode representar qualquer valor no intervalo [7,9995 · 102 ; 8,0005 · 102 [, enquanto
y ∈ [5,9995 · 102 ; 6,0005 · 102 [. Logo, z pode representar valores no intervalo [1,999 ·
102 ; 2,001 · 102 ]. Essa faixa de variação de z normalmente não acarreta problemas, já
que o comprimento do intervalo é uma fração muito pequena do valor obtido para z,
que pode representar valores entre 0,9995z e 1,0005z.
Considere, agora, que x = 6,002 · 102. Temos, portanto, z = 2,000 · 10−1 = 0,2. Mas,
agora, z pode representar valores no intervalo [0,1; 0,3]. Ou seja, z pode representar
valores que vão desde 0,5z até 1,5z! A subtração resultou numa desastrosa perda de
precisão: esse é o efeito numérico do cancelamento subtrativo.
Como lidar com esse efeito? Na verdade, não existe uma fórmula pronta para lidar
com cada caso. No caso da derivada, comumente tomam-se outras expressões mais
11
29 de março de 2020
f (x + h) − f (x − h)
f ′ (x) ≃ (31)
2h
f (x − 2h) − 8f (x − h) + 8f (x + h) − f (x + 2h)
f ′ (x) ≃ . (32)
12h
a+b+c (34)
a=1 (35)
b=ǫ (36)
c = ǫ. (37)
(a + b) + c = (1 + ǫ) +ǫ = 1 + ǫ = 1. (38)
| {z }
=1
a + (b + c) = 1 + (ǫ + ǫ) = 1 + 2ǫ 6= 1. (39)
Ou seja, a existência do ǫ implica que, em aritmética de ponto flutuante, a lei da
associatividade das operações não existe. Uma forma de lidar com esse efeito é sempre
começar as subtrações e adições pelos menores valores.
12