Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Representação em Ponto Flutuante Belo Horizonte, março de 2011 Introdução • Muitas aplicações científicas utilizadas na engenharia, física, astronomia, cálculo e etc. • Os dados são números muito grandes: – Massa da terra. – A distância entre a terra e a lua. • Os dados são muito pequenos: – A massa de um elétron. – A massa de um átomo. – A massa de uma molécula. Introdução • Valores muito grandes e valores muito pequenos seriam difíceis de representar em um sistema computacional (máquina (hardware) e programa (software)) computador que possui uma arquitetura binária. Exemplo de Número • Sejam os números: – N1 = 0,00000000000000000000435 – N2 = 145700000000000000000000 • Realizando uma operação de adição tem-se: • S = N1 + N2 • S = 145700000000000000000000,00000000000000000000435 Exemplo de Número • Tem-se em S um valor com 47 algarismos (dígitos) decimais. • Imagine a representação deste número em binário. • Quantos bits seriam necessários? • Como representar a vírgula no computador? • Percebe-se que isto se torna impraticável (inviável). Notação Científica • Para resolver o problema a solução vem da matemática. • Trata-se da notação científica. • Na computação utiliza-se o termo ponto flutuante (float point). Notação Científica • Um número em notação científica é o produto de dois fatores: • Onde: – N é o número que se deseja representar. – M é a parte fracionária ou mantissa (algarismos significativos do número). – B é a base de exponenciação. – E é o expoente o seu sinal. EBMN Notação Científica • A representação do expoente, da base e da normalização são definidas pelos fabricantes. • A representação de um número por meio de um produto permite a separar a precisão desejada para o valor (algarismos expresso na fração ou mantissa) e a grandeza do número (expressa pelo expoente). Notação Científica • Portanto: – N1 = 0,435x10-20 – N2 = 0,1457x10+24 • Neste tipo de notação ocorre apenas a utilização dos números significativos (435 e 1457). • Os zeros foram substituídos por poucos algarismos representados pelo valor do expoente. Notação Científica • O conceito é o mesmo para qualquer que seja a base de numeração. O que tem significado diferente da base de representação. • Seja o número N3 = 1110011,0112 • Representando N3 na forma de notação científica tem-se: 0,11100110112x102 +01112(+710) Notação Científica • Seja N4 = 1000110010012 • Representando N4 na forma de notação científica tem-se: 0,8C916 x1016 +316 • Em sistemas da empresa IBM 370, 434x, 438x e outras famílias semelhantes empregam a base 16 como a base de exponenciação na representação de números em ponto flutuante. Ponto Flutuante • Em um sistema computacional o valor de um número representado em ponto flutuante é reconhecido por intermédio do SINAL, da MANTISSA e do EXPOENTE, não sendo necessário o armazenamento da base de exponenciação, visto que esta é igual para todos os números. • Em uma representação de números em ponto flutuante, dois fatores são considerados: – A precisão (exatidão) do número, expressa pela quantidade de algarismos (dígitos) da mantissa (ou fração); e – A grandeza do número expressa pelo valor do expoente. Ponto Flutuante • Cada representação mais a direita tem maior precisão que a esquerda adjacente. • O limite de representação (a grandeza) indica quão grande ou quão pequeno é o número que está sendo representado. • O valor do expoente de uma representação em ponto flutuante indica a faixa de grandeza do número na representação. Representação Normalizada • Para evitar outras interpretações costuma-se estabelecer nos sistemas computacionais, uma representação padrão normalizada. Onde a mantissa é definida sempre como sendo um valor que satisfaça a expressão: 1/B≤M≤0 (exceto se M=0). • A mantissa deve ser sempre fracionária (mantissa sempre menor que um). O primeiro algarismo após a vírgula tem que ser diferente de zero (por que é igual ou maior que 1/B). Representação Normalizada • Os seguintes valores estão normalizados: • 2,812510 1,11012 • 0,12510 0,1012 • Os seguintes valores NÃO estão normalizados: o primeiro algarismo (dígito) depois da vírgula é zero. • 0,0812510 0,0011012 • 0,0000812516 10110,012 Conversão para Ponto Flutuante • Para um sistema computacional a representação em ponto flutuante é especificada a partir da identificação de alguns elementos: – A quantidade de palavras de dados (total de bits/bytes da representação). – O modo de representação da mantissa (se normalizada, se complemento a 2, se sinal magnitude e etc). – O modo de representação do expoente (se normalizado, se complemento a 2, se sinal magnitude e etc). – A quantidade de bits definida para o expoente e para a mantissa. – A posição no formato do sinal do número, da mantissa e do expoente. IEEE 754 S EXPOENTE MANTISSA 1 8 23 S EXPOENTE MANTISSA 1 11 52 Ponto Flutuante de 32 bits IEEE 754 S EXPOENTE MANTISSA 1 8 23 • S – sinal do número, 1 bit. • EXPOENTE – 8 bits para a magnitude. • MANTISSA – 23 bits normalizada. • B – base de exponenciação igual a 2. EBMN Ponto Flutuante 32 bits – IEEE 754 • A seqüência de bits para representar o expoente é obtida por intermédio da soma do expoente + deslocamento, que para o formato de 32 bits é 7F16 (12710). • Assim, valores reais de expoente de -12710 a +12810 serão representados em valores armazenados entre 010 a +25510 Ponto Flutuante 32 bits – IEEE 754 • A normalização é conseguida por intermédio do deslocamento da vírgula decimal para a direita ou esquerda. • Como a base é 2, o bit mais à esquerda da vírgula sempre será 1 e pode ser omitido. Exemplo I – 32 bits • 10,510 = 01010,12 • A forma normalizada seria: 1,01012 x 2 3. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 01012 • Expoente: 310 + 12710 = 13010 = 100000102 • Sinal: 02 Exemplo I – 32 bits • 10,510 = 01010,12 • A forma normalizada seria: 1,01012 x 2 3. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 01012 • Expoente: 310 + 12710 = 13010 = 100000102 • Sinal: 02 • 010000010010100000000000000000002 • 4 1 2 8 0 0 0 0 • 41 28 00 00 Exemplo I – 32 bits • 10,510 = 01010,12 • A forma normalizada seria: 1,01012 x 2 3. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 01012 • Expoente: 310 + 12710 = 13010 = 100000102 • Sinal: 02 • 010000010010100000000000000000002 • 4 1 2 8 0 0 0 0 • 41 28 00 00 Exemplo I – 32 bits • 10,510 = 01010,12 • A forma normalizada seria: 1,01012 x 2 3. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 01012 • Expoente: 310 + 12710 = 13010 = 100000102 • Sinal: 02 • 010000010010100000000000000000002 • 4 1 2 8 0 0 0 0 • 41 28 00 00 Exemplo I – 32 bits • A representação de 10,510 em 32 bits ficaria: – s expoente mantissa – 010000010010100000000000000000002 – 4 1 2 8 0 0 0 016 – 41 28 00 0016 – 41 28 00 0016 Exemplo II – 32 bits • -0,7510 = -0,112 • A forma normalizada seria: 1,12 x 2 -1. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 12 • Expoente: -110 + 12710 = 12610 = 011111102 • Sinal: 12 Exemplo II – 32 bits • A representação de -0,7510 em 32 bits ficaria: – s expoente mantissa – 101111110100000000000000000000002 – B F 4 0 0 0 0 016 – BF 40 00 0016 – BF 40 00 0016 Ponto Flutuante de 64 bits – IEEE 754 S EXPOENTE MANTISSA 1 11 52 • S – sinal do número, 1 bit. • EXPOENTE – 11 bits para a magnitude. • MANTISSA – 52 bits normalizada. • B – base de exponenciação igual a 2. EBMN Ponto Flutuante – 64 bits – IEEE 754 • A seqüência de bits para representar o expoente é obtida por intermédio da soma do expoente + deslocamento, que para o formato de 64 bits é 3FF16 (102310). • Assim, valores reais de expoente de -102310 a +102410 serão representados em valores armazenados entre 010 a +204810 Ponto Flutuante – 64 bits – IEEE 754 • A normalização é conseguida por intermédio do deslocamento da vírgula decimal para a direita ou esquerda. • Como a base é 2, o bit mais à esquerda da vírgula sempre será 1 e pode ser omitido. Exempo III – 64 bits • 10,510 = 01010,12 • A forma normalizada seria: 1,01012 x 2 3. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 01012 • Expoente: 310 + 102310 = 102610 = 100000000102 • Sinal: 02 Exempo III – 64 bits • A representação de 10,510 em 64 bits ficaria: – s expoente mantissa – 01000000001001010000000000000000 . . . .000000002 – 4 0 2 5 0 0 0 016 0 0 – 40 25 00 00 . . . . 0016 – 40 25 00 00 00 00 00 0016 Exempo IV – 64 bits • -0,7510 = 0,112 • A forma normalizada seria: 1,12 x 2 -1. Sempre deixando 1 (um) antes da vírgula. • Mantissa: 12 • Expoente: -110 + 102310 = 102210 = 011111111102 • Sinal: 12 Exempo IV – 64 bits • A representação de -0,7510 em 64 bits ficaria: – s expoente mantissa – 10111111111010000000000000000000 . . . .000000002 – B F E 8 0 0 0 016 0 0 – BF E8 00 00 . . . . 0016 – BF E8 00 00 00 00 00 0016