Topico2 Representacao de numeros

Livre

0
0
139
1 year ago
Preview
Full text

  DCC008 - C´alculo Num´erico

Representa¸c˜ao de N´ umeros

  Iury Igreja

  

Departamento de Ciˆ encia da Computa¸c˜ ao

Universidade Federal de Juiz de Fora

iuryigreja@ice.ufjf.br

  ◮

  Representa¸c˜ao de N´ umeros Inteiros Representa¸c˜ao de N´ umeros Reais

  Ponto Fixo Ponto Flutuante

  Padr˜ao de Ponto Flutuante IEEE 754 Opera¸c˜oes aritm´eticas com ponto flutuante No¸c˜oes b´asicas de erro Erro no arredondamento e truncamento Efeitos num´ericos Como estamos estudando m´etodos num´ericos para resolver problemas de ciˆencias e engenharias, ´e de extrema importˆancia estudar e entender como os n´ umeros s˜ao representados no computador e como as opera¸c˜oes aritm´eticas s˜ao feitas.

  Vamos ent˜ao estudar como representar n´ umeros no computador e os erros cometidos por conta da representa¸c˜ao e durante as opera¸c˜oes aritm´eticas. Vamos come¸car revisando sistemas de numera¸c˜ao, convers˜ao de bases, e depois estudamos como s˜ao representados os n´ umeros inteiros e reais no computador. Em seguida vamos estudar as opera¸c˜oes aritm´eticas em ponto flutuante e alguns efeitos num´ericos como propaga¸c˜ao do erro, cancelamento, etc.

  No dia a dia usamos n´ umeros baseados no sistema decimal. O n´ umero 257, por exemplo, pode ser escrito como 257 = 2 · 100 + 5 · 10 + 7 · 1 2 1

  = 2 · 10 + 5 · 10 + 7 · 10 No dia a dia usamos n´ umeros baseados no sistema decimal. O n´ umero 257, por exemplo, pode ser escrito como 257 = 2 · 100 + 5 · 10 + 7 · 1 2 1

  = 2 · 10 + 5 · 10 + 7 · 10 Chamamos de 10 de base deste sistema (decimal). Qualquer n´ umero inteiro pode ser expresso por um polinˆ omio na base 10 com coeficientes entre 0 e 9. No dia a dia usamos n´ umeros baseados no sistema decimal. O n´ umero 257, por exemplo, pode ser escrito como 257 = 2 · 100 + 5 · 10 + 7 · 1 2 1

  = 2 · 10 + 5 · 10 + 7 · 10 Chamamos de 10 de base deste sistema (decimal). Qualquer n´ umero inteiro pode ser expresso por um polinˆ omio na base 10 com coeficientes entre 0 e 9. Usaremos a nota¸c˜ao 10 N = (a n a . . . a )

  n−1 n n−1

  = a + a + . . . + a

  n

  · 10 · 10 · 10

  n−1

  para representar qualquer inteiro no sistema decimal, onde os

  i coeficientes s˜ao tais que 0 ≤ a ≤ 9. No passado outras civiliza¸c˜oes usaram sistemas de numera¸c˜ao com bases diferentes como 12, 20 e 60.

  Nos computadores modernos, os componentes el´etricos possuem apenas dois estados ”on”e ”off ”. Portanto ´e mais conveniente representar n´ umeros no computador usando o sistema bin´ario, cuja base ´e 2.

  No passado outras civiliza¸c˜oes usaram sistemas de numera¸c˜ao com bases diferentes como 12, 20 e 60.

  Nos computadores modernos, os componentes el´etricos possuem apenas dois estados ”on”e ”off ”. Portanto ´e mais conveniente representar n´ umeros no computador usando o sistema bin´ario, cuja base ´e 2.

  Neste sistema um n´ umero n˜ao-negativo ´e representado por 2 N = (a n a . . . a )

  n−1 n n−1

  = a + a + . . . + a (1)

  n

  · 2 · 2 · 2

  n−1 com a k assumindo os valores 0 ou 1. O sistema hexadecimal usa base 16 e portanto temos 16 d´ıgitos diferentes. As vezes programadores usam o sistema hexadecimal pois o sistema bin´ario pode ser cansativo e longo para representar algum valor. Exemplo: 16 3 2 1

  (1234) = 1 × 16 + 2 × 16 + 3 × 16 + 4 × 16 = 4096 + 512 + 48 + 4

  A representa¸c˜ao hexadecimal usa as letras de A at´e F para os seis d´ıgitos adicionais (10, 11, 12, 13, 14, 15). Outros exemplos: (234) 16 (BEEF ) 16 (DEAD) 16 (0AF B) 16 A convers˜ao entre os sistemas bin´ario e hexadecimal ´e simples, uma vez que trabalhamos com grupos de 4 bits para cada d´ıgito do sistema hexadecimal.

  Bin´ario Hexadecimal Bin´ario Hexadecimal 0000 1000

  8 0001 1 1001

  9 0010 2 1010 A 0011 3 1011 B 0100 4 1100 C 0101 5 1101 D 0110 6 1110 E 0111 7 1111 F

  Podemos trabalhar no sistema octal, cuja base ´e 8, de forma an´aloga ao sistema hexadecimal. Quando queremos converter entre bin´ario e octal, basta lembrar que cada grupo de 3 bits ´e um d´ıgito do sistema octal.

  Pode ser obtida diretamente pelo uso da Equa¸c˜ao

  .

  Exemplos

  (11) 2 = 1 · 2 1 + 1 · 2

  = 2 + 1 = 3 Pode ser obtida diretamente pelo uso da Equa¸c˜ao

  .

  Exemplos

  (11) 2 = 1 · 2 1 + 1 · 2

  = 2 + 1 = 3 (1101) 2

  = 1 · 2 3 + 1 · 2 2 + 0 · 2 1 + 1 · 2 = 8 + 4 + 0 + 1 = 13 O procedimento ´e dividir o n´ umero por 2, a seguir continuar dividindo o quociente por 2, at´e que o quociente seja igual a 0. O n´ umero na base 2 ´e obtido tomando-se o resto das divis˜oees anteriores.

  O procedimento ´e dividir o n´ umero por 2, a seguir continuar dividindo o quociente por 2, at´e que o quociente seja igual a 0. O n´ umero na base 2 ´e obtido tomando-se o resto das divis˜oees anteriores.

  Exemplo

  Converter (13) 10 para bin´ario. resto=1 13 ÷ 2 = 6, resto=0 6 ÷ 2 = 3, resto=1 3 ÷ 2 = 1, resto=1 1 ÷ 2 = 0, ↑

  O procedimento ´e dividir o n´ umero por 2, a seguir continuar dividindo o quociente por 2, at´e que o quociente seja igual a 0. O n´ umero na base 2 ´e obtido tomando-se o resto das divis˜oees anteriores.

  Exemplo

  Converter (13) 10 para bin´ario. resto=1 13 ÷ 2 = 6, resto=0 6 ÷ 2 = 3, resto=1 3 ÷ 2 = 1, resto=1 1 ÷ 2 = 0, ↑

  Portanto (13) 10 = (1101) 2 entrada: numero inteiro decimal d sa´ıda: numero bin´ario b i = 0; q = d; fa¸ca b[i] = q mod 2 ; q = q / 2 ; i = i + 1 ; enquanto (q 6= 0); inverteVetor(b);

  Inteiros s˜ao armazenados usando uma palavra de 32 bits no computador.

  Se estamos interessados em n´ umeros n˜ ao negativos, a representa¸c˜ao ´e simples: 10 (71)

  ⇒ 00000000 00000000 00000000 01000111 32 Podemos representar valores de 0 a 2 − 1 (= 4.294.967.295). Inteiros s˜ao armazenados usando uma palavra de 32 bits no computador.

  Se estamos interessados em n´ umeros n˜ ao negativos, a representa¸c˜ao ´e simples: 10 (71)

  ⇒ 00000000 00000000 00000000 01000111 32 Podemos representar valores de 0 a 2 − 1 (= 4.294.967.295).

  Para n´ umeros inteiros com sinal, uma possibilidade, ´e reservar 1 bit para indicar qual o sinal do n´ umero. Exemplo com palavra de 8 bits para simplificar. 10

  (13) ⇒ 0 0 0 0 1 1 0 1 bits

  7

  6

  5

  4

  3

  2

  1 Bit de sinal: 0 ⇒ positivo 1 ⇒ negativo Complemento a dois

  Existe uma forma de representa¸c˜ao mais esperta para n´ umeros inteiros com sinal chamada de complemento a dois. O bit mais significativo ainda ´e usado para o sinal. 31 Um n´ umero x positivo, tal que 0 ≤ x ≤ 2 − 1 ´e representado normalmente pela representa¸c˜ao bin´aria deste n´ umero, com bit de sinal 0. 31 Entretanto, um n´ ´e umero negativo −y, onde 1 ≤ y ≤ 2 armazenado como a representa¸c˜ao bin´aria do inteiro positivo: 32

  2 − y Complemento a dois

  Para ilustrar considere uma palavra de 4 bits. Podemos representar os seguintes n´ umeros de 0 a 7 e de -8 a -1. Veja a tabela. bits n´ umero bits n´ umero

  0101 5 1101 -3

  1. Inverta todos os bits do n´ umeoro (0 → 1 e 1 → 0).

  Para negar um n´ umero em complemento a dois, use o seguinte algoritmo:

  2 4 − 1 = 15

  0111 7 1111 -1

  2 4 − 2 = 14

  0110 6 1110 -2

  2 4 − 3 = 13

  2 4 − 4 = 12

  2 B − y 0000 1000 -8

  0100 4 1100 -4

  2 4 − 5 = 11

  0011 3 1011 -5

  2 4 − 6 = 10

  0010 2 1010 -6

  2 4 − 7 = 9

  0001 1 1001 -7

  2 4 − 8 = 8

  2. Some 1 ao resultado invertido. Complemento a dois Exemplo

  Para simplificar, considere uma palavra de 4 bits. Seja x = 2 e y = 2. Qual a representa¸c˜ao em complemento a dois de −y? Complemento a dois Exemplo

  Para simplificar, considere uma palavra de 4 bits. Seja x = 2 e y = 2. Qual a representa¸c˜ao em complemento a dois de −y?

  Solu¸c˜ao do exemplo

  Temos que (2) 10 = (0010) 2 . Pelos passos do algoritmo temos: 1.

  Invertendo os bits 0010 → 1101

  1101

  • 0001

  1110 Complemento a dois Exemplo

  Para simplificar, considere uma palavra de 4 bits. Seja x = 2 e y = 2. Qual a representa¸c˜ao em complemento a dois de −y?

  Solu¸c˜ao do exemplo

  Temos que (2) 10 = (0010) 2 . Pelos passos do algoritmo temos: 1.

  Invertendo os bits 0010 → 1101

  1101

  • 0001

  1110 4 Ou seja, −y = −2 ´e representado por 2 − 2 = 16 − 2 = 14, cuja representa¸c˜ao bin´aria ´e (14) 10 = (1110) 2 . Complemento a dois

  A grande motiva¸c˜ao para esse sistema ´e que n˜ao precisamos de hardware espec´ıfico para a opera¸c˜ao de subtra¸c˜ao. O hardware de adi¸c˜ao pode ser usado uma vez que −y tenha sido representado com complemento a dois.

  Este sistema ´e usado em muitos dos computadores atuais. Complemento a dois

  A grande motiva¸c˜ao para esse sistema ´e que n˜ao precisamos de hardware espec´ıfico para a opera¸c˜ao de subtra¸c˜ao. O hardware de adi¸c˜ao pode ser usado uma vez que −y tenha sido representado com complemento a dois.

  Este sistema ´e usado em muitos dos computadores atuais.

  Subtra¸c˜ao: x − y = 2 + (−2)

  0010

  • 1110

  

1 0000

  Como o bit mais `a esquerda n˜ao pode ser representado neste sistema fict´ıcio cuja palavra tem 4 bits, ele ´e descartado e o resultado ´e 0, como esperado.

  Se x ´e um n´ umero real positivo, sua parte integral x i ´e o maior inteiro menor ou igual a x, enquanto x f i

  = x − x ´e a sua parte fracion´aria. Se x ´e um n´ umero real positivo, sua parte integral x i ´e o maior inteiro menor ou igual a x, enquanto x f i

  = x − x ´e a sua parte fracion´aria. A parte fracion´aria sempre pode ser escrita como uma fra¸c˜ao decimal

  ∞

  X

  −k

  x f = b k 10 (2)

  k=1 onde cada b k ´e um inteiro n˜ao-negativo menor que 10. Se x ´e um n´ umero real positivo, sua parte integral x i ´e o maior inteiro menor ou igual a x, enquanto x f i

  = x − x ´e a sua parte fracion´aria. A parte fracion´aria sempre pode ser escrita como uma fra¸c˜ao decimal

  ∞

  X

  −k

  x f = b k 10 (2)

  k=1 onde cada b k ´e um inteiro n˜ao-negativo menor que 10.

  Se b k = 0 para todo k maior do que algum inteiro, dizemos ent˜ao que a fra¸c˜ao termina. Caso contr´ario, dizemos que a fra¸c˜ao n˜ ao termina.

  Exemplos

  1

  −1 −2

  (termina) = 0.25 = 2 · 10 + 5 · 10

  4

  1

  −1 −2 −3

  (n˜ao termina) = 0.333 . . . = 3 · 10 + 3 · 10 + 3 · 10

  3 Exemplos

  1

  −1 −2

  (termina) = 0.25 = 2 · 10 + 5 · 10

  4

  1

  −1 −2 −3

  (n˜ao termina) = 0.333 . . . = 3 · 10 + 3 · 10 + 3 · 10

  3 Se a parte integral de x ´e um inteiro no sistema decimal da forma 10 x i = (a n a . . . a )

  n−1

  enquanto a parte fracion´aria ´e dada por 1 2 , ´e comum escrever 3 10 x = (a n a . . . a b b . . .)

  n−1 · b Algoritmo de convers˜ ao para bin´ ario

  De forma an´aloga para o sistema bin´ario podemos escrever

  ∞

  X

  −k

  x = b 2 , x i = (a n a . . . a ) 2

  f k n−1 k=1 1 2 2 2 ent˜ao x = (a n a . . . a b b . . .) . n−1 · b 1 b 2 b 3 . . .) 2 para um dado x f entre 0 e 1 pode

  A fra¸c˜ao bin´aria (·b 1 2 3 ser calculada da seguinte forma: dado x entre 0 e 1, gere b , b , b fazendo: c = x 1 1 b ) i , c ) f

  = (2 · c = (2 · c b 2 1 ) i , c 2 1 )

  f 3 = (2 · c = (2 · c 2 3 2 b ) i , c ) f , . . .

  = (2 · c = (2 · c onde (.) representa a parte integral e (.) a parte fracion´aria do

  i f n´ umero. Algoritmo de convers˜ ao para bin´ ario Exemplo 1

  Qual a representa¸c˜ao bin´aria de (0.625) 10 ?

  Solu¸c˜ao do Exemplo

  2 · 0.625 = 1.25 ⇒ b 1 = 1 2 · 0.25 = 0.50 ⇒ b 2 = 0 2 · 0.5 = 1.00 ⇒ b 3 = 1 2 · 0.0 = 0.00 ⇒ b 4 = b 5 = . . . = 0

  Portanto (0.625) 10 = (0.101) 2 . Algoritmo de convers˜ ao para bin´ ario Exemplo 2

  Qual a representa¸c˜ao bin´aria de (0.1) 10 ?

  Solu¸c˜ao do Exemplo 2 Temos x = 0.1.

  2 · 0.1 = 0.2 ⇒ b 1 = 0 2 · 0.2 = 0.4 ⇒ b 2 = 0 2 · 0.4 = 0.8 ⇒ b 3 = 0 2 · 0.8 = 1.6 ⇒ b 4 = 1 2 · 0.6 = 1.2 ⇒ b 5 = 1 2 · 0.2 = 0.4 ⇒ b 6 = 0 2 · 0.4 = 0.8

  . . . Portanto (0.1) 10 = (0.000110011 . . .) 2 = (0.00011) 2 . Algoritmo de convers˜ ao para bin´ ario

  entrada: x menor do que 1 sa´ıda: n´ umero bin´ario b k = 1; fa¸ca se 2 ∗ x >= 1 ent˜ao b[k] = 1 ; sen˜ ao b[k] = 0 ; fim-se x = 2 ∗ x − b[k] ; k = k + 1 ; enquanto (x 6= 0); retorne b ;

  Para transformar um n´ umero real que est´a representado na base 10 para a base 2, o procedimento ´e transformar a parte inteira e a parte fracion´aria usando os respectivos algoritmos j´a vistos.

Exemplos Converter da base 10 para a base 2

  10 (5.75) =

  (3.8) 10 10 = (33.023) =

  Exemplo Converter da base 2 para a base 10.

  (11.0101) 2 = Para transformar um n´ umero real que est´a representado na base 10 para a base 2, o procedimento ´e transformar a parte inteira e a parte fracion´aria usando os respectivos algoritmos j´a vistos.

Exemplos Converter da base 10 para a base 2

  10 2 (5.75) = (101.110)

  (3.8) 10 = (11.11001100 . . .) 10 2 2 (33.023) = (100001.00000101 . . .)

Exemplo Converter da base 2 para a base 10

  (11.0101) 2 = (3.3125) 10 No computador n´ umeros reais s˜ao armazenados usando o sistema bin´ario e a representa¸c˜ao destes n´ umeros ´e finita.

  Por exemplo, os n´ umeros π = 3.1415 . . . e = 2.71828 . . . n˜ao podem ser representados perfeitamente no computador. O que ´e armazenado ent˜ao ´e uma vers˜ao aproximada destes n´ umeros. De forma geral, existem duas possibilidades para essa representa¸c˜ao: Representa¸c˜ao em Ponto Fixo

  Representa¸c˜ao em Ponto Flutuante (*) Neste esquema de representa¸c˜ao, a palavra do computador de usualmente 32 bits ´e dividida em 3 campos: 1 bit para o sinal campo de bits para a parte integral campo de bits para a parte fracion´aria

Exemplo

  Sistema com 1 bit para sinal, 15 bits para parte integral e 16 bits 10 10 para a parte fracion´aria. Neste sistema (11/2) = (5.5) ´e representado da seguinte forma: 000000000000101 1000000000000000

  O sistema de ponto fixo ´e severamente limitado pelo tamanho dos n´ umeros que este pode armazenar. No exemplo anterior, apenas 15

  −16

  n´ umeros de magnitude entre 2 (exatamente) e 2 (um pouco menos) podem ser armazenados no sistema.

  O sistema de ponto fixo ´e severamente limitado pelo tamanho dos n´ umeros que este pode armazenar. No exemplo anterior, apenas 15

  −16

  n´ umeros de magnitude entre 2 (exatamente) e 2 (um pouco menos) podem ser armazenados no sistema. Em algumas aplica¸c˜oes essa limita¸c˜ao pode n˜ao ser aceit´avel, e portanto este formato de representa¸c˜ao ´e raramente utilizado.

  O sistema de ponto fixo ´e severamente limitado pelo tamanho dos n´ umeros que este pode armazenar. No exemplo anterior, apenas 15

  −16

  n´ umeros de magnitude entre 2 (exatamente) e 2 (um pouco menos) podem ser armazenados no sistema. Em algumas aplica¸c˜oes essa limita¸c˜ao pode n˜ao ser aceit´avel, e portanto este formato de representa¸c˜ao ´e raramente utilizado. O formato de representa¸c˜ao mais usado para n´ umeros reais ´e a representa¸c˜ao de ponto flutuante, que descrevemos a seguir.

  A representa¸c˜ao de ponto flutuante ´e baseada na nota¸c˜ao cient´ıfica. Nessa nota¸c˜ao um n´ umero real n˜ao-zero ´e expresso por

  e

  x = ±d × β onde β ´e a base do sistema de numera¸c˜ao, d ´e a mantissa e e ´e o expoente. A representa¸c˜ao de ponto flutuante ´e baseada na nota¸c˜ao cient´ıfica. Nessa nota¸c˜ao um n´ umero real n˜ao-zero ´e expresso por

  e

  x = ±d × β onde β ´e a base do sistema de numera¸c˜ao, d ´e a mantissa e e ´e o expoente. A mantissa ´e um n´ umero da forma 1 2 3 d d . . . d t ) β

  (0 · d

  i

  representada por t d´ıgitos, onde 0 ≤ d ≤ (β − 1), para i = 1, . . . , t 1 com d 6= 0. O expoente e est´a no intervalo [L, U]. 1 Ao exigir que d 6= 0, dizemos que o n´umero est´a normalizado.

  Iremos denotar um sistema de ponto flutuante por F (β, t, L, U ) onde β ´e a base do sistema t n´ umero de d´ıgitos da mantissa L menor valor para o expoente

  U maior valor para o expoente Em qualquer m´aquina apenas um subconjunto dos n´ umeros reais ´e representado exatamente, e portanto nesse processo a representa¸c˜ao de um n´ umero real ser´a feita com arredondamento ou truncamento. Arredondamento em ponto flutuante

  Imagine que s´o dispomos de quatro d´ıgitos para representar os n´ umeros em uma m´aquina. Como seria a melhor forma de 15 representar = 2.142857 = x? Usando 2.142 ou talvez 2.143? 7 Arredondamento em ponto flutuante

  Imagine que s´o dispomos de quatro d´ıgitos para representar os n´ umeros em uma m´aquina. Como seria a melhor forma de 15 representar = 2.142857 = x? Usando 2.142 ou talvez 2.143? Se 7 calcularmos o erro vemos que |2.142 − x| = 0.000857 |2.143 − x| = 0.000143

  Como o erro ´e menor para 2.143 concluimos que essa ´e a melhor forma de representar esse n´ umero. Este n´ umero foi arredondado. O que significa arredondar um n´ umero? Arredondamento em ponto flutuante

  Imagine que s´o dispomos de quatro d´ıgitos para representar os n´ umeros em uma m´aquina. Como seria a melhor forma de 15 representar = 2.142857 = x? Usando 2.142 ou talvez 2.143? Se 7 calcularmos o erro vemos que |2.142 − x| = 0.000857 |2.143 − x| = 0.000143

  Como o erro ´e menor para 2.143 concluimos que essa ´e a melhor forma de representar esse n´ umero. Este n´ umero foi arredondado. O que significa arredondar um n´ umero? Para arredondar um n´ umero na base 10, devemos apenas observar o primeiro d´ıgito a ser descartado. Se este d´ıgito ´e menor que 5 deixamos os d´ıgitos inalterados; e se ´e maior ou igual a 5 devemos somar 1 ao ´ ultimo d´ıgito remanescente.

  Exemplo Considere o seguinte sistema: F (10, 3, −3, 3).

  Neste sistema o n´ umero 12.5 ´e representado por 10 2

  • (0.125)

  × 10 O n´ umero de Euler e = 2.718281 . . .

  ´e representado por

  Exemplo Considere o seguinte sistema: F (10, 3, −3, 3).

  Neste sistema o n´ umero 12.5 ´e representado por 10 2

  • (0.125)

  × 10 O n´ umero de Euler e = 2.718281 . . .

  ´e representado por 1

  • (0.271) 10 (com truncamento)

  × 10 Exemplo Considere o seguinte sistema: F (10, 3, −3, 3).

  Neste sistema o n´ umero 12.5 ´e representado por 10 2

  • (0.125)

  × 10 O n´ umero de Euler e = 2.718281 . . .

  ´e representado por 1

  • (0.271) 10 (com truncamento)
  • 10 × 10 1<
  • (0.272) (com arredondamento)

  × 10 Exemplo

  Considere o seguinte sistema: F (10, 3, −5, 5). Os n´umeros representados neste sistema ter˜ao a forma 1 2 3 e 1 d d , i d

  ±(0.d ) × 10 0 ≤ d ≤ 9, 6= 0, e ∈ [−5, 5] Exemplo

  Considere o seguinte sistema: F (10, 3, −5, 5). Os n´umeros representados neste sistema ter˜ao a forma 1 2 3 e 1 d d , i d

  ±(0.d ) × 10 0 ≤ d ≤ 9, 6= 0, e ∈ [−5, 5] O menor n´ umero em valor absoluto representado nessa m´aquina ´e

  −5 −1 −5 −6

  = 10 = 10 m = 0.100 × 10 × 10 Exemplo

  Considere o seguinte sistema: F (10, 3, −5, 5). Os n´umeros representados neste sistema ter˜ao a forma 1 2 3 e 1 d d , i d

  ±(0.d ) × 10 0 ≤ d ≤ 9, 6= 0, e ∈ [−5, 5] O menor n´ umero em valor absoluto representado nessa m´aquina ´e

  −5 −1 −5 −6

  = 10 = 10 m = 0.100 × 10 × 10 O maior n´ umero em valor absoluto ´e 5

  = 99900 M = 0.999 × 10 Exemplo

  Considere o seguinte sistema: F (10, 3, −5, 5). Os n´umeros representados neste sistema ter˜ao a forma 1 2 3 e 1 d d , i d

  ±(0.d ) × 10 0 ≤ d ≤ 9, 6= 0, e ∈ [−5, 5] O menor n´ umero em valor absoluto representado nessa m´aquina ´e

  −5 −1 −5 −6

  = 10 = 10 m = 0.100 × 10 × 10 O maior n´ umero em valor absoluto ´e 5

  = 99900 M = 0.999 × 10

  De forma geral, o menor e o maior n´ umero s˜ao dados por

  U

L−1 −t

  m = β , M = β ) (1 − β Seja um sistema F (β, t, L, U ) onde o menor e maior n´ umero s˜ao denotados por m e M , respectivamente. Dado um n´ umero real x, ent˜ao temos as seguintes situa¸c˜oes:

  Seja um sistema F (β, t, L, U ) onde o menor e maior n´ umero s˜ao denotados por m e M , respectivamente. Dado um n´ umero real x, ent˜ao temos as seguintes situa¸c˜oes:

  1.

  m ≤ |x| ≤ M O n´ umero pode ser representado no sistema. 3 Exemplo: 235.89 = 0.23589 × 10 . No sistema F (10, 3, −3, 3) temos 3 (0.235) 10 com truncamento 10 × 10 3

  (0.236) com arredondamento × 10 Seja um sistema F (β, t, L, U ) onde o menor e maior n´ umero s˜ao denotados por m e M , respectivamente. Dado um n´ umero real x, ent˜ao temos as seguintes situa¸c˜oes:

  1.

  m ≤ |x| ≤ M O n´ umero pode ser representado no sistema. 3 Exemplo: 235.89 = 0.23589 × 10 . No sistema F (10, 3, −3, 3) temos 3 (0.235) 10 com truncamento 10 × 10 3

  (0.236) com arredondamento × 10 2.

  |x| ≤ m O n´ umero n˜ ao pode ser representado no sistema. Neste caso

  −8 .

  dizemos que ocorreu underflow. Ex: 0.517 × 10 Seja um sistema F (β, t, L, U ) onde o menor e maior n´ umero s˜ao denotados por m e M , respectivamente. Dado um n´ umero real x, ent˜ao temos as seguintes situa¸c˜oes:

  1.

  m ≤ |x| ≤ M O n´ umero pode ser representado no sistema. 3 Exemplo: 235.89 = 0.23589 × 10 . No sistema F (10, 3, −3, 3) temos 3 (0.235) 10 com truncamento 10 × 10 3

  (0.236) com arredondamento × 10 2.

  |x| ≤ m O n´ umero n˜ ao pode ser representado no sistema. Neste caso

  −8 .

  dizemos que ocorreu underflow. Ex: 0.517 × 10 3. |x| ≥ M O n´ umero n˜ ao pode ser representado no sistema. Neste caso 9 . dizemos que ocorreu overflow. Ex: 0.725 × 10 Exemplo

  Considere o sistema F (2, 3, −3, 3). Para simplificar, considere uma palavra com 7 bits, onde temos 1 bit para o sinal do n´ umero, 3 bits para o expoente (incluindo seu sinal) e 3 bits para a mantissa.

  −3

  Vamos representar x min = (0.100) 2 .

  × 2 Exemplo

  Considere o sistema F (2, 3, −3, 3). Para simplificar, considere uma palavra com 7 bits, onde temos 1 bit para o sinal do n´ umero, 3 bits para o expoente (incluindo seu sinal) e 3 bits para a mantissa.

  −3

  Vamos representar x min = (0.100) 2 .

  × 2 sinal do n´ umero sinal do expoente

  1 expoente (3) 10 = (11) 2 mantissa (0.100) 2 10 Sendo assim temos a seguinte representa¸c˜ao para (0.0625) neste sistema 111 100 Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Solu¸c˜ao do Exemplo

  Neste sistema os n´ umeros s˜ao da forma 1 d 2 d

3

e ±0.d × 2

  Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Solu¸c˜ao do Exemplo

  Neste sistema os n´ umeros s˜ao da forma 1 d 2 d

3

e ±0.d × 2 temos 2 possibilidades para o sinal

  Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Solu¸c˜ao do Exemplo

  Neste sistema os n´ umeros s˜ao da forma 1 d 2 d

3

e ±0.d × 2 temos 2 possibilidades para o sinal

  (1 · 2 · 2) = 4 possibilidades para a mantissa Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Solu¸c˜ao do Exemplo

  Neste sistema os n´ umeros s˜ao da forma 1 d 2 d

3

e ±0.d × 2 temos 2 possibilidades para o sinal (1 · 2 · 2) = 4 possibilidades para a mantissa 4 possibilidades para o expoente (−1, 0, 1, 2)

  Exemplo

  Considere o sistema F (2, 3, −1, 2). Quantos e quais n´umeros podem ser representados neste sistema?

  Solu¸c˜ao do Exemplo

  Neste sistema os n´ umeros s˜ao da forma 1 d 2 d

3

e ±0.d × 2 temos 2 possibilidades para o sinal (1 · 2 · 2) = 4 possibilidades para a mantissa 4 possibilidades para o expoente (−1, 0, 1, 2) portanto temos 2 · 4 · 4 = 32, e considerando que o zero tamb´em faz parte do sistema, concluimos que podemos representar 33 n´ umeros distintos.

  Solu¸c˜ao Exemplo

  Para responder quais s˜ao os n´ umeros, notemos que as poss´ıveis formas da mantissa s˜ao 0.100, 0.101, 0.110 e 0.111 e as formas do 1 2

  −1 expoente s˜ao 2 , 2 , 2 e 2 . Solu¸c˜ao Exemplo

  Para responder quais s˜ao os n´ umeros, notemos que as poss´ıveis formas da mantissa s˜ao 0.100, 0.101, 0.110 e 0.111 e as formas do expoente s˜ao 2

  × 2 2 = (2.5) 10

  × 2 2 = (3.0) 10 (0.111) 2

  = (1.75) 10 (0.110) 2

  = (1.5) 10 (0.111) 2 × 2 1

  (0.110) 2 × 2 1

  × 2 = (0.875) 10

  × 2 = (0.75) 10 (0.111) 2

  = (0.4375) 10 (0.110) 2

  −1

  = (0.375) 10 (0.111) 2 × 2

  −1

  (0.110) 2 × 2

  × 2 2 = (2.0) 10 (0.101) 2

  −1

  = (1.25) 10 (0.100) 2

  = (1.0) 10 (0.101) 2 × 2 1

  (0.100) 2 × 2 1

  × 2 = (0.625) 10

  × 2 = (0.5) 10 (0.101) 2

  = (0.3125) 10 (0.100) 2

  −1

  = (0.25) 10 (0.101) 2 × 2

  −1

  × 2

  , 2 , 2 1 e 2 2 . Assim obtemos: (0.100) 2

  × 2 2 = (3.5) 10 O zero ´e representado de uma forma especial: todos os d´ıgitos d i da mantissa e do expoente s˜ao nulos. Solu¸c˜ao Exemplo

  ´ E extremamente importante observar com rela¸c˜ao aos n´ umeros de ponto flutante, que eles s˜ao discretos e n˜ao cont´ınuos como um n´ umero real x ∈ R, como definido usualmente na matem´atica.

  A figura abaixo ilustra essa caracter´ıstica para o sistema do exemplo (por simplicidade, omitimos a exibi¸c˜ao dos n´ umeros negativos).

  Exemplo

  Considerando o mesmo sistema do exemplo anterior, 1 2 = 0.38, x = 5.3 e

  F (2, 3, −1, 2), represente os n´umeros: x 3 x = 0.15 dados na base 10.

  Exemplo

  Considerando o mesmo sistema do exemplo anterior, 1 2 = 0.38, x = 5.3 e

  F (2, 3, −1, 2), represente os n´umeros: x 3 x = 0.15 dados na base 10.

Solu¸c˜ao Exemplo 4

  Convertendo os n´ umeros para bin´ario temos (0.38) 10 10 =

  (5.3) = 10 (0.15) = Exemplo

  Considerando o mesmo sistema do exemplo anterior, 1 2 = 0.38, x = 5.3 e

  F (2, 3, −1, 2), represente os n´umeros: x 3 x = 0.15 dados na base 10.

  Solu¸c˜ao Exemplo 4

  Convertendo os n´ umeros para bin´ario temos

  −1

  (0.38) 10 10 = 0.110 · 2 3 (5.3)

  = 0.101 · 2 10 −2 (0.15)

  = 0.100 · 2 Exemplo

  Considerando o mesmo sistema do exemplo anterior, 1 2 = 0.38, x = 5.3 e

  F (2, 3, −1, 2), represente os n´umeros: x 3 x = 0.15 dados na base 10.

  Solu¸c˜ao Exemplo 4

  Convertendo os n´ umeros para bin´ario temos

  −1

  (0.38) 10 OK 10 = 0.110 · 2 ⇒ 3 (5.3) overflow

  = 0.101 · 2 ⇒ 10 −2 (0.15) underflow

  = 0.100 · 2 ⇒ Por volta dos anos 50 a computa¸c˜ao usando ponto flutuante estava em alta. Cada fabricante de computador desenvolvia o seu sistema de ponto flutuante, que acarretava muita inconsistˆencia quando programas eram executados em diferentes m´aquinas.

  Apesar da maioria das m´aquinas usarem o sistema bin´ario, algumas, como as da s´erie IBM 360/370, usavam o sistema hexadecimal.

  Por volta dos anos 50 a computa¸c˜ao usando ponto flutuante estava em alta. Cada fabricante de computador desenvolvia o seu sistema de ponto flutuante, que acarretava muita inconsistˆencia quando programas eram executados em diferentes m´aquinas.

  Apesar da maioria das m´aquinas usarem o sistema bin´ario, algumas, como as da s´erie IBM 360/370, usavam o sistema hexadecimal. Em resumo, era muito dif´ıcil escrever um software port´ avel que pudesse funcionar corretamente em todas as m´aquinas.

  Em uma coopera¸c˜ao extraordin´aria entre cientistas e desenvolvedores de microprocessadores, um padr˜ao para representa¸c˜ao de n´ umeros bin´arios usando ponto flutuante foi desenvolvida por volta do final dos anos 70 e in´ıcio dos anos 80. 1 Instituto de Engenheiros Eletricistas e Eletrˆ onicos

  O padr˜ao usa o sistema bin´ario e dois formatos para representa¸c˜ao de n´ umeros podem ser adotados: precis˜ao simples e precis˜ao dupla.

  Neste formato um n´ umero ´e representado de forma normalizada por 1 2 e d . . . d n

  ±1.d × 2 O padr˜ao usa o sistema bin´ario e dois formatos para representa¸c˜ao de n´ umeros podem ser adotados: precis˜ao simples e precis˜ao dupla.

  Neste formato um n´ umero ´e representado de forma normalizada por 1 2 e d . . . d n

  ±1.d × 2 Em precis˜ao simples um n´ umero real ´e representado por 32 bits, sendo que: 1 bit para o sinal 8 bits para o expoente 23 bits para a mantissa O padr˜ao usa o sistema bin´ario e dois formatos para representa¸c˜ao de n´ umeros podem ser adotados: precis˜ao simples e precis˜ao dupla.

  Neste formato um n´ umero ´e representado de forma normalizada por 1 2 e d . . . d n

  ±1.d × 2 Em precis˜ao simples um n´ umero real ´e representado por 32 bits, sendo que: 1 bit para o sinal 8 bits para o expoente 23 bits para a mantissa ou seja, tem o seguinte formato bin´ario 1 2 8 1 2 23 e . . . e d d . . . d

  ± e O padr˜ao usa o sistema bin´ario e dois formatos para representa¸c˜ao de n´ umeros podem ser adotados: precis˜ao simples e precis˜ao dupla.

  Neste formato um n´ umero ´e representado de forma normalizada por 1 2 e d . . . d n

  ±1.d × 2 Em precis˜ao simples um n´ umero real ´e representado por 32 bits, sendo que: 1 bit para o sinal 8 bits para o expoente 23 bits para a mantissa ou seja, tem o seguinte formato bin´ario 1 2 8 1 2 23 e . . . e d d . . . d

  ± e O primeiro bit `a esquerda do ponto bin´ario, isto ´e d = 1, ´e chamado de bit escondido (hidden bit). Expoente

  Nesse formato, o expoente n˜ao ´e representado como um inteiro via complemento a dois. Os oito bits do expoente armazenam o n´ umero s = e + 127. Expoente

  Nesse formato, o expoente n˜ao ´e representado como um inteiro via complemento a dois. Os oito bits do expoente armazenam o n´ umero s = e + 127. Exemplos: e = 1 s = 1 + 127 = (128) 10 = (10000000) 2

  ⇒ 10 2 = (01111100) e = −3 ⇒ s = −3 + 127 = (124) 10 2 e = 52 s = 52 + 127 = (179) = (10110011)

  ⇒ Expoente

  Nesse formato, o expoente n˜ao ´e representado como um inteiro via complemento a dois. Os oito bits do expoente armazenam o n´ umero s = e + 127. Exemplos: e = 1 s = 1 + 127 = (128) 10 = (10000000) 2

  ⇒ 10 2 = (01111100) e = −3 ⇒ s = −3 + 127 = (124) 10 2 e = 52 s = 52 + 127 = (179) = (10110011)

  ⇒ Em particular as sequˆencias de bits (00000000) e (11111111) para o expoente, s˜ao usadas para representar, respectivamente, o zero e infinito ou ocorrˆencia de erro, que ´e denotado por NaN (Not a Number). Mantissa

  Vamos considerar agora a representa¸c˜ao da mantissa. Como o sistema ´e normalizado temos d 6= 0. Dado que a base ´e dois, a

  ´ unica possibilidade para o primeiro d´ıgito ser´a sempre igual a 1, e portanto este bit n˜ao precisa ser armazenado, por isso ´e chamado de bit escondido. Mantissa

  Vamos considerar agora a representa¸c˜ao da mantissa. Como o sistema ´e normalizado temos d 6= 0. Dado que a base ´e dois, a

  ´ unica possibilidade para o primeiro d´ıgito ser´a sempre igual a 1, e portanto este bit n˜ao precisa ser armazenado, por isso ´e chamado de bit escondido. Com o uso desta normaliza¸c˜ao temos um ganho na precis˜ao, pois a mantissa passa a ser representada com 24 bits (23 + 1 bit escondido). Mantissa

  Vamos considerar agora a representa¸c˜ao da mantissa. Como o sistema ´e normalizado temos d 6= 0. Dado que a base ´e dois, a

  ´ unica possibilidade para o primeiro d´ıgito ser´a sempre igual a 1, e portanto este bit n˜ao precisa ser armazenado, por isso ´e chamado de bit escondido. Com o uso desta normaliza¸c˜ao temos um ganho na precis˜ao, pois a mantissa passa a ser representada com 24 bits (23 + 1 bit escondido).

  −3

  Exemplo: (0.125) 10 = (0.001) 2 ´e armazenado como: = 1.0 × 2 01111100 0000000 00000000 00000000

  A mantissa s´o possui um d´ıgito significativo, que ´e justamente o bit escondido, e portanto os demais 23 bits s˜ao representados com 0.

  O menor n´ umero normalizado positivo represent´avel nesse padr˜ao ´e 00000001 0000000 00000000 00000000 nesse caso, como s = (00000001) 2 = (1) 10 , o expoente ´e s = e + 127

  1 = e + 127 ⇒ e = −126 assim, o n´ umero ´e

  −126 −126 −38

  (1.0000000 . . .) 2 = 2 × 2 ≈ 1.2 × 10 O maior n´ umero normalizado positivo, ter´a como mantissa um n´ umero com 24 bits iguais a 1 e como expoente (11111110) 2 , isto ´e 11111110 1111111 11111111 11111111 nesse caso, como s = (11111110) 2 = (254) 10 , temos s = e + 127 254 = e + 127 e = 127

  ⇒ ⇒ e ainda 23 22 2

  1

  1 2 + 2 + . . . + 1 (1.1111 . . . 1) = 1 + + . . . + = 23 23 23

  2

  2

  2 P 24

  i

  2

  2

  1

  i=0

  − 1 = = 23 23 = 2 − 23

  2

  2

  2 assim 127 127 38 2 −23 (1.111111 . . .)

  × 2 = (2 − 2 ) × 2 ≈ 3.4 × 10 O zero ´e representado com zeros para expoente e mantissa 00000000 0000000 00000000 00000000

  O zero ´e representado com zeros para expoente e mantissa 00000000 0000000 00000000 00000000

  Os valores +∞ e −∞ s˜ao representados por 11111111 0000000 00000000 00000000 1 11111111 0000000 00000000 00000000

  O zero ´e representado com zeros para expoente e mantissa 00000000 0000000 00000000 00000000

  Os valores +∞ e −∞ s˜ao representados por 11111111 0000000 00000000 00000000 1 11111111 0000000 00000000 00000000

  Se a sequˆencia de bits para o expoente for composta por todos d´ıgitos iguais a um e a da mantissa for n˜ao nula, isto ´e: 1 11111111 xxxxxxx xxxxxxxx xxxxxxxx temos a ocorrˆencia de NaN: not a number, que representam express˜oes inv´alidas como:

  0/0, 0 ∗ ∞, ∞/∞, ∞ − ∞ Por outro lado certas express˜oes que envolvam ∞ e zero possuem um resultado plaus´ıvel: z ∗ 0 = 0 z/0 = +∞ se z &gt; 0 z/0 = −∞ se z &lt; 0 z ∗ ∞ = ∞

  ∞ + ∞ = ∞

  #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { float x, y;

  Sa´ıda x = 23.0/0.0; x = inf printf("x = %f\n", x); y = -nan a = -nan y = sqrt(-5.0);

  0/0 = -nan printf("y = %f\n", y); inf/inf = -nan inf-inf = -nan printf("a = %f\n", x*0); printf("0/0 = %f\n", 0./0.); printf("inf/inf = %f\n", x/x); printf("inf-inf = %f\n", x-x);

  }

  ± expoente mantissa valor 00000000 00000000000000000000000 1 00000000 00000000000000000000000 -0 11111111 00010000000000000000000 NaN 1 11111111 00010100100100100100000 NaN 11111111 00000000000000000000000 ∞

  1 11111111 00000000000000000000000 −∞ 10000001 10100000000000000000000 1.101 · 2 129 127 = 6.5

  1 10000001 10100000000000000000000 −1.101 · 2 129 127 = −6.5 10000000 00000000000000000000000 1.0 · 2 128 127 = 2

  10000010 10100000000000000000000 1.0 · 2 130 127 = 8 A precis˜ao p de um sistema de ponto flutuante ´e definida como o n´ umero de bits da mantissa (incluindo bits escondidos). Sendo assim a precis˜ao simples do formato IEEE 754 ´e p = 24, o que corresponde aproximadamente a 7 d´ıgitos decimais significantes, j´a que

  −24 −7

  2 ≈ 10 A precis˜ao p de um sistema de ponto flutuante ´e definida como o n´ umero de bits da mantissa (incluindo bits escondidos). Sendo assim a precis˜ao simples do formato IEEE 754 ´e p = 24, o que corresponde aproximadamente a 7 d´ıgitos decimais significantes, j´a que

  −24 −7

  2 ≈ 10

  De forma an´aloga, na precis˜ao dupla com p = 53 temos aproximadamente 16 d´ıgitos significantes. Por exemplo, a representa¸c˜ao em precis˜ao simples de π = 3.141592653 . . .

  A precis˜ao p de um sistema de ponto flutuante ´e definida como o n´ umero de bits da mantissa (incluindo bits escondidos). Sendo assim a precis˜ao simples do formato IEEE 754 ´e p = 24, o que corresponde aproximadamente a 7 d´ıgitos decimais significantes, j´a que

  −24 −7

  2 ≈ 10

  De forma an´aloga, na precis˜ao dupla com p = 53 temos aproximadamente 16 d´ıgitos significantes. Por exemplo, a representa¸c˜ao em precis˜ao simples de π = 3.141592653 . . .

  ´e 3.141592741 . . .

  Propriedade Simples Dupla Estendida comprimento total

  15 base

  16

  7

  ≈ 3.4 × 10 38 ≈ 1.8 × 10 308 ≈ 1.2 × 10 4932 menor n´ umero ≈ 1.2 × 10 38 ≈ 2.2 × 10 308 ≈ 3.4 × 10 4932 d´ıgitos decimais

  2 expoente m´aximo 127 1023 16383 expoente m´ınimo -126 -1022 -16382 maior n´ umero

  2

  2

  11

  32

  8

  64 bits no expoente

  52

  23

  80 bits na mantissa

  64

  19

  

Propriedade Simples Dupla Estendida

comprimento total

  32

  64

  80 bits na mantissa

  23

  52

  64 bits no expoente

  8

  11

  15 base

  2

  2

  2 expoente m´aximo 127 1023 16383 expoente m´ınimo -126 -1022 -16382 38 308 4932 maior n´ umero

  ≈ 3.4 × 10 ≈ 1.8 × 10 ≈ 1.2 × 10 − − − 38 308 4932 menor n´ umero ≈ 1.2 × 10 ≈ 2.2 × 10 ≈ 3.4 × 10 d´ıgitos decimais

  7

  16

  19 Na linguagem C float : precis˜ao simples double : precis˜ao dupla long double

  : precis˜ao estendida Exerc´ıcios

  Considere os seguintes n´ umeros representados no sistema decimal:

  a)

  2

  b)

  30

  c)

  5.75

  d)

  0.1 Escreva a representa¸c˜ao de cada um dos n´ umeros no formato de ponto flutuante IEEE 754 usando precis˜ao simples.

Gabarito

  a) 10000000 0000000 00000000 00000000

  b) 10000011 1110000 00000000 00000000

  c) 10000001 0111000 00000000 00000000

  d) 01111011 1001100 11001100 11001100

  ◮

  Adi¸c˜ ao/subtra¸c˜ ao: quando dois n´ umeros em ponto flutuante s˜ao somados (ou subtra´ıdos), ´e preciso alinhar as casas decimais do n´ umero de menor expoente para a direita at´e que os expoentes fiquem iguais.

  Multiplica¸c˜ ao/divis˜ ao: nessa opera¸c˜ao realizamos o produto (ou divis˜ao) das mantissas e o expoente final da base ´e obtido, somando (subtraindo) os expoentes de cada parcela. Os resultados devem ser truncados ou arredondados.

  Truncamento ou arredondamento depende da m´aquina. Exemplo

  Adicionar 4.32 e 0.064 em uma m´aquina com mantissa t = 2 e base 10.

  Exemplo

  Adicionar 4.32 e 0.064 em uma m´aquina com mantissa t = 2 e base 10.

  Solu¸c˜ao do Exemplo 1 1 −1

  = 4.32 + 0.064 = 0.43 × 10 + 0.64 × 10 0.4300 × 10 1

  • 0.0064 × 10
  • 1 = 0.4364 × 10 Exemplo

      Adicionar 4.32 e 0.064 em uma m´aquina com mantissa t = 2 e base 10.

      Solu¸c˜ao do Exemplo 1 1 −1

      = 4.32 + 0.064 = 0.43 × 10 + 0.64 × 10 0.4300 × 10 1

    • 0.0064 × 10
    • 1 1 = 0.4364 × 10 Truncamento

        → 0.43 × 10 1 Arredondamento → 0.44 × 10 Exemplo

        Subtrair 371 de 372 em uma m´aquina com mantissa t = 2 e base 10.

        Exemplo

        Subtrair 371 de 372 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 3 3 3

        = 372 − 371 = 0.37 × 10 + 0.37 × 10 0.37 × 10 3 − 0.37 × 10 3

        = 0.00 × 10 Exemplo

        Subtrair 371 de 372 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 3 3 3

        = 372 − 371 = 0.37 × 10 + 0.37 × 10 0.37 × 10 3 − 0.37 × 10 3

        = 0.00 × 10 A subtra¸c˜ao deu 0 em vez de 1. Problema na subtra¸c˜ao de dois n´ umeros aproximadamente iguais. Exemplo

        Multiplicar 1234 por 0.016 em uma m´aquina com mantissa t = 2 e base 10.

        Exemplo

        Multiplicar 1234 por 0.016 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 4 4 −1

        = 1234 ∗ 0.016 = 0.12 × 10 ∗ 0.16 × 10 0.12 × 10

        −1

        ∗ 0.16 × 10 3 = 0.0192 × 10 2

        = 0.19 × 10 Exemplo

        Multiplicar 1234 por 0.016 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 4 4 −1

        = 1234 ∗ 0.016 = 0.12 × 10 ∗ 0.16 × 10 0.12 × 10

        −1

        ∗ 0.16 × 10 3 = 0.0192 × 10 2

        = 0.19 × 10 Neste caso usando arredondamento ou truncamento, o resultado ´e 19, em vez de 19.744 que ´e o resultado exato. Exemplo

        Dividir 0.00183 por 492 em uma m´aquina com mantissa t = 2 e base 10.

        Exemplo

        Dividir 0.00183 por 492 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 3 −2 −2

        = 0.00183 ÷ 492 = 0.18 × 10 ÷ 0.49 × 10 0.18 × 10 3

        ÷ 0.49 × 10

        −5

        = 0.3673 × 10 Exemplo

        Dividir 0.00183 por 492 em uma m´aquina com mantissa t = 2 e base 10.

        Solu¸c˜ao do Exemplo 3 −2 −2

        = 0.00183 ÷ 492 = 0.18 × 10 ÷ 0.49 × 10 0.18 × 10 3

        ÷ 0.49 × 10

        −5

        = 0.3673 × 10

        −5

        Arredondamento → 0.37 × 10

        −5

        Truncamento → 0.36 × 10

        ´ E importante observar que algumas propriedades aritm´eticas como associatividade: (a + b) + c = a + (b + c) distributividade: a(b + c) = ab + ac n˜ao s˜ao v´alidas em sistemas de ponto flutuante.

        Para os exemplos a seguir, considere um sistema com base β e trˆes d´ıgitos na mantissa, ou seja, F (10, 3, L, U ). Considere ainda que o sistema trabalha com arredondamento ap´os cada uma das opera¸c˜oes efetuadas.

        Exemplo

        a) (11.4 + 3.18) + 5.05 e 11.4 + (3.18 + 5.05)

        Solu¸c˜ao do Exemplo

        a) (11.4 + 3.18) + 5.05 0.1140 × 10 2

      • 0.0318 × 10
      • 2 = 0.1458 × 10 2<
      • 0.505 × 10
      • 1 = 0.823 × 10 1

          = 0.146 × 10 2 (arr.)

          0.1460 × 10 2

        • 0.1140 × 10
        • 2 = 0.1963 × 10 2<
        • 0.0505 × 10
        • 2 = 0.1965 × 10 2

            =

            0.197 × 10 2

            (arr.)

            a) 11.4 + (3.18 + 5.05) 0.318 × 10 1

            0.0823 × 10 2

            =

            0.196 × 10 2

            (arr.)

          Solu¸c˜ao do Exemplo (cont.)

            0.445 × 10 1 − 0.435 × 10 1

            = 0.010 × 10 1 0.555 × 10 1

            ∗ 0.100 × 10 = 0.055500 × 10 1

            = 0.555

            b) 5.55 ∗ 4.45 − 5.55 ∗ 4.35

            .555 × 10 1 ∗ 0.445 × 10 1 = 0 .246975 × 10 2 = 0 .247 × 10 2 .555 × 10 1 ∗ 0.435 × 10 1 = 0 .241425 × 10 2 = 0 .241 × 10 2 .247 × 10 2 − 0.241 × 10 2 = 0 .006 × 10 2 J´a vimos que introduzimos erros ao representar um n´ umero no computador.

            Como vamos representar aproximadamente um n´ umero real x por sua vers˜ao ponto flutuante no computador, precisamos definir medidas apropriadas para calcular o erro cometido nessa aproxima¸c˜ao.

            Vamos usar as seguintes medidas de erro: erro absoluto erro relativo

            Erro absoluto

            Se ˜ x ´e uma aproxima¸c˜ao de x, o erro absoluto ´e definido por EA(˜ x) = x − ˜x

            Erro absoluto

            Se ˜ x ´e uma aproxima¸c˜ao de x, o erro absoluto ´e definido por EA(˜ x) = x − ˜x

            Exemplo

            Seja x = 1428.756. Em uma m´aquina com mantissa t = 4, usando arredondamento e truncamento, respectivamente, temos 4 x ˜ t EA( ˜ x t = 0.1428 × 10 ⇒ ) = 0.756 × 10 4 x ˜ a EA( ˜ x a

            = 0.1429 × 10 ⇒ ) = 0.244 × 10 Erro relativo

            O erro relativo ´e definido por EA(˜ x) x − ˜x

            ER(˜ x) = = x ˜ x ˜ dado que ˜ x 6= 0. Erro relativo

            O erro relativo ´e definido por EA(˜ x) x − ˜x

            ER(˜ x) = = x ˜ x ˜ dado que ˜ x 6= 0.

            Exemplo

            x 1 = 1000.5, x ˜ 2 2 1 = 1000.6 x = 10.5, x ˜ = 10.6 EA( ˜ x i ) = 0.1, i = 1, 2 ⇒ Erro relativo

            O erro relativo ´e definido por ER(˜ x) = x − ˜x

            ˜ x =

            EA(˜ x) ˜ x dado que ˜ x 6= 0.

            Exemplo

            x 1 = 1000.5, ˜ x 1 = 1000.6 x 2 = 10.5, ˜ x 2 = 10.6 ⇒

            EA( ˜ x i ) = 0.1, i = 1, 2 ER( ˜ x 1 ) =

            0.1 1000.6

            ≈ 0.00009994 = 0.9994 × 10

            −4

            ER( ˜ x 2 ) =

            0.1 ≈ 0.009433 = 0.9433 × 10

            −2 Apesar de termos definido erro absoluto e erro relativo para valores reais x e ˜ x, a mesma defini¸c˜ao serve para vetores ou matrizes.

            Nesse caso, se denotarmos a norma de um vetor por || · ||, ent˜ao ter´ıamos: erro absoluto ||x − ˜x|| erro relativo ||x − ˜x||

            ||˜x|| E de forma similar para matrizes. Iremos usar estes conceitos mais adiante no curso.

            ´ E claro que em geral n˜ao conhecemos o valor real que estamos interessados em aproximar, se soubessemos, n˜ao seria necess´ario se preocupar em aproxim´a-lo. O que se faz na pr´atica ´e usar uma medida de erro aproximado, dada por x new old

            − x ER = x new

            A seguir iremos obter estimativas para o erro quando um n´ umero ´e aproximado em ponto flutuante em uma m´aquina que opera com truncamento ou arredondamento.

            Al´em dos erros causados pela representa¸c˜ao no computador e pelas opera¸c˜oes aritm´eticas, existem certos efeitos num´ericos que contribuem para aumentar os erros introduzidos.

            A seguir iremos estudar alguns casos importantes como a adi¸c˜ao ou subtra¸c˜ao entre um n´ umero grande e um pequeno, subtra¸c˜ao de dois n´ umeros quase iguais, propaga¸c˜ao do erro, etc. Somar ou subtrair um n´ umero pequeno e um grande

            Para exemplificar considere um sistema F (10, 4, L, U ).

            Exemplo Somar 0.1 e 5000. 4

            0.1 + 5000 = 0.1000 × 10 + 0.5000 × 10 4 = 0.00001 × 10 4

          • 0.50000 × 10
          • 4 = 0.50001 × 10 4 .

              Usando arredondamento (ou truncamento), obtemos 0.5 × 10

              Exemplo

              Calcular S = 5000 + 0.1 + . . . 0.1 = 5000

              | {z }

              

            10×

              S = 0.1 + . . . 0.1 + 5000 = 5001 | {z }

              10×

              Observe que embora analiticamente o resultado das somas seja o mesmo, quando usamos uma m´aquina de ponto flutuante F (10, 4, L, U ), o resultado ´e diferente. No primeiro caso, ao somar um n´ umero grande 5000 e um pequeno 0.1 cometemos um erro que se propaga em toda a soma de S. No segundo caso, evitamos este problema. Cancelamento

              O cancelamento ocorre quando subtraimos dois n´ umeros quase iguais, ou quando somamos n´ umeros de sinais opostos mas de magnitudes semelhantes.

            Como vimos, quando calculamos a diferen¸ca x − y, o resultado ter´a o mesmo expoente e. Para normalizar o resultado obtido

              devemos mover os d´ıgitos para a esquerda de tal forma que o primeiro seja diferente de zero. Desta forma, uma quantidade de d´ıgitos iguais a zero aparece no final da mantissa do n´ umero normalizado. Estes zeros n˜ao possuem significado algum, e dizemos que ocorreu a perda de d´ıgitos significativos. Cancelamento Exerc´ıcio 1

              √ √ Calcular 36 em uma m´aquina F (10, 4, L, U ) com 37 − arredondamento. Calcule o valor exato e compare o que acontece.

              √ √ x−y √ Em seguida use para calcular o valor de 36.

              37 −

              √y x− Cancelamento Solu¸c˜ao do Exerc´ıcio 1

              Para efeitos de compara¸c˜ao, apresentamos a resposta exata aqui: √ √

              −1

              37 − 36 = 6.08276253 − 6 = 0.08276253 = 0.8277 × 10 Nessa m´aquina temos

              √ 1 37 = 6.08276253 → 0.6083 × 10 √ 1 36 = 6.0

              → 0.6000 × 10 Efetuando a subtra¸c˜ao tem-se 1

              0.6083 × 10 1 − 0.6000 × 10 1

              −1

              = 0.0083 × 10 = 0.8300 × 10 Cancelamento Solu¸c˜ao do Exerc´ıcio 1 - (cont.)

              ´ E poss´ıvel obter um resultado mais preciso? Sim, basta considerar que

              √ ( x + √y)

              √ √ √ √ x − y y = y = x − x − √ √ x + √y x + √y

              Portanto para √ √

              36 37 − temos

              1 x − y 37 − 36 = =

              √ √ √ 1 1 x + √y 37 +

              36 0.6083 × 10 + 0.6000 × 10

              1 = 2

              0.1208 × 10

              −1

              = 0.08278145 = 0.8278 × 10 Propaga¸c˜ ao do erro

              Tamb´em ocorrem problemas quando uma soma parcial ´e muito grande se comparada com o resultado final. Considere que:

              

            n

              X s = a k

              

            k=1

              seja a soma a ser computada e que os a k podem ser positivos ou negativos e de diferentes magnitudes. O c´alculo pode ser feito da seguinte forma: s 1 = a , s = s + a , k = 2, 3, . . . , n

              k k k k−1

              tal que s = s n . Propaga¸c˜ ao do erro Exemplo

              Considere uma m´aquina F (10, 4, L, U ) com truncamento. Vamos efetuar a seguinte opera¸c˜ao: 4 X S = (x i + y i ) com x i = 0.46709, e y i = 3.5678

              i=1 Propaga¸c˜ ao do erro Exemplo

              Considere uma m´aquina F (10, 4, L, U ) com truncamento. Vamos efetuar a seguinte opera¸c˜ao: 4 X S = (x i + y i ) com x i = 0.46709, e y i = 3.5678

              i=1

              Para i = 1, temos 1 (x 1 + y 1

              ) = 0.4034 × 10 E o erro absoluto ´e

              EA( ¯ S) = |4.03569 − 4.034| = 0.00169 Propaga¸c˜ ao do erro Exemplo (cont.)

              Para i = 2, temos 1 (x 1 + y 1 ) + (x 2 + y 2

              ) = 0.8068 × 10 EA( ¯

              S) = |8.07138 − 8.068| = 0.00338 Para i = 3, temos 2

              (x 1 + y 1 ) + (x 2 + y 2 ) + (x 3 + y 3 ) = 0.1210 × 10

              EA( ¯ S) = |12.10707 − 12.10| = 0.00707

              Para i = 4, temos 2 (x 1 + y 1 ) + (x 2 + y 2 ) + (x 3 + y 3 ) + (x 4 + y 4

              ) = 0.1613 × 10 EA( ¯

              S) = |16.14267 − 16.13| = 0.01276 De onde pode-se observar que o erro absoluto aumenta `a medida em que as opera¸c˜oes aritm´eticas s˜ao realizadas. A implementa¸c˜ao incorreta ou o uso incorreto de algoritmos e/ou softwares cient´ıficos j´a foi respons´avel por alguns desastres reais.

              

              O m´ıssil Scud acertou o acampamento americano, matou 28 soldados e feriu centenas.

              Relat´orio t´ecnico apontou uma falha no software. Palavra do computador 24 bits. Tempo era medido em d´ecimos de segundo (1/10). Uma bateria de m´ısseis ◮

              O valor (1/10) ao ser Patriot (”Phased Array representado em bin´ario n˜ao TRacking Intercept Of termina.

              Target”) americano, Ac´ umulo do erro no software falhou ao rastrear e ap´os longo tempo do sistema interceptar um m´ıssil rodando levou a falha. Scud do Iraque.

              ◮

              Foguete da European Space Agency explode 40s ap´os o lan¸camento.

              Milh˜ oes de dolares foram investidos no seu desenvolvimento e equipamento.

              Relat´orio acusou um erro do software no sistema de referˆencia inercial.

              Problema: n´ umero de 64 bits de ponto flutuante era convertido em um inteiro de 16 bits com sinal. Falha na convers˜ao para n´ umeros maiores que 32767, que ´e o maior inteiro represent´avel com 16 bits.

              ◮

              Plataforma de petr´ oleo Sleipnir A afunda.

              Ap´ os o acidente a empresa da plataforma, Statoil, uma empresa norueguesa solicita a empresa SINTEF um relat´orio t´ecnico.

              Falha em uma parede, resultando em uma rachadura e vazamento. A falha aconteceu como resultado de uma combina¸c˜ao de erros no programa de an´alise de elementos finitos, que subestimou a tens˜ao na

Novo documento

Tags

Documento similar

Aplicação de técnicas de mineração de dados em problemas de classificação de padrões
0
7
95
Desenvolvimento, aplicação e avaliação de sistema de indicadores de desempenho de estações de tratamento de água
0
2
156
Otimização de leis de manobras de comportas de eclusas de navegação com uso de algoritmo genético
0
2
178
Comparação de desempenho hidrológico de sistemas de infiltração de água de chuva: poço de infiltração e jardim de chuva.
0
3
12
Qualidade de vida de egressos de curso de Cuidadores de Idosos.
0
5
5
Métodos de superação de dormência de sementes de barbatimão.
0
4
5
Estabilidade de pasta de amêndoa de castanha de caju.
0
2
7
Avaliação de parâmetros de ultrafiltração de suco de banana.
0
4
4
Desempenho de híbridos de tomate de crescimento indeterminado em função de sistemas de condução de plantas.
0
3
6
Avaliação de desempenho de lagoa de polimento para pós-tratamento de reator anaeróbio de manta de lodo (UASB) no tratamento de águas residuárias de suinocultura.
0
2
6
SBF 50 anos Fisisca em numeros
0
0
10
Mineração de Repositórios de Software Modelos de Previsão de Pedidos de Evolução de Software
0
0
135
Estudo de Melhoria de um Sistema de Ensaio de Reguladores de Oxigénio de Aeronaves
0
0
101
Estudo de Melhoria do Processo de Fabrico de Unidades de Tratamento de Ar
0
0
128
Proposta de Melhoria de Processo de Implementação de Software: Estudo de Caso de um Sistema de Dados de Operações do Mercado Monetário
0
0
181
Show more