Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução aos Sistemas Computacionais Disciplina: 113468 Prof. Marcus Vinicius Lamar Aritmética Computacional 2 Dispomos de apenas N bits! UnB/CIC 113468– Introdução aos Sistemas Computacionais Todos os tipos de dados são armazenados nos dispositivos de memória do computador (Registradores, RAM, HD, etc.) e operados no processador (ULA) na forma de bits. Portanto o Não temos precisão infinita o Não temos os símbolos ‘+‘ ou ‘-’ para representar o sinal o Nem os símbolos ‘,’ ou ‘.’ para representar o ponto fracionário Veremos aqui apenas os conjuntos numéricos mais comuns: • Números Naturais (ℕ) • Números Inteiros (ℤ) • Números Reais (ℝ) Aritmética Computacional 3 UnB/CIC 113468– Introdução aos Sistemas Computacionais •Números Naturais (ℕ) Os números naturais são representados naturalmente utilizando o sistema de numeração binário. As operações aritméticas de +, -, × e ÷ já foram estudadas. O computador consegue processar apenas dados representados com um número finito de bits. Ex.: Tipo em C tamanho faixa dinâmica (unsigned char) 8 bits 0 a 255 (unsigned short) 16 bits 0 a 65.535 (unsigned int) 32 bits 0 a 4.294.967.295 (unsigned long long int) 64 bits 0 a 18.446.744.073.709.551.615 Aritmética Computacional 4 UnB/CIC 113468– Introdução aos Sistemas Computacionais Adição e Subtração: 0011 0111 1100 0111 0110 + 0010 +1010 +1111 - 0110 - 0101 0101 10001 11011 0001 0001 Overflow (resultado muito grande para a word finita do computador): Somar dois números de n bits pode produzir um número de n+1 bits. Multiplicação e Divisão: 0011 0111 10001001 |_110_ x 0010 x 1110 - 110 10110 0000 0000 001010 0011 0111 - 110 0000 0111 1000 +0000___ + 0111___ - 110 00000110 01100010 0101 Número de bits do resultado 2n - 0 101 • Realização das operações matemáticas usando o sistema binário. Aritmética Computacional Natural 5 UnB/CIC 113468– Introdução aos Sistemas Computacionais •Números Inteiros (ℤ) Existem várias formas de representação de números inteiros com sinal em binário. As convenções mais comuns são: Sinal e magnitude : Usa-se um símbolo específico para representar o sinal (-) ou O dígito mais significativo indica apenas o sinal (1 negativo, 0 positivo) Complemento de 1 : A representação do número negativo é o inverso do positivo, isto é, troca-se 0 ⇒ 1 e 1 ⇒ 0 Complemento de 2 : A representação do número negativo pode ser obtida de maneira simples pelo inverso do positivo + 1 Interpretação alternativa: O MSB possui ponderação negativa na soma ponderada. Aritmética Computacional 6 UnB/CIC 113468– Introdução aos Sistemas Computacionais Sinal e magnitude Complemento de um Complemento de dois 0000 = +0 0000 = +0 0000 = +0 0001 = +1 0001 = +1 0001 = +1 0010 = +2 0010 = +2 0010 = +2 0011 = +3 0011 = +3 0011 = +3 0100 = +4 0100 = +4 0100 = +4 0101 = +5 0101 = +5 0101 = +5 0110 = +6 0110 = +6 0110 = +6 0111 = +7 0111 = +7 0111 = +7 1000 = -0 1000 = -7 1000 = -8 1001 = -1 1001 = -6 1001 = -7 1010 = -2 1010 = -5 1010 = -6 1011 = -3 1011 = -4 1011 = -5 1100 = -4 1100 = -3 1100 = -4 1101 = -5 1101 = -2 1101 = -3 1110 =-6 1110 = -1 1110 = -2 1111 =-7 1111 = -0 1111 = -1 Exemplos para números com 4 bits: Aritmética Computacional 7 UnB/CIC 113468– Introdução aos Sistemas Computacionais Ex.: Em complemento de 2 Tipo em C tamanho faixa dinâmica (char) 8 bits -128 a 127 (short) 16 bits -32.768 a 32.767 (int) 32 bits -2.147.483.648 a 2.147.483.647 (long long int) 64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Aritmética Computacional Ex.: Em binário sem sinal de 8 bits: 10011011 = 1x27+0x26+0x25+1x24+1x23+0x22+1x21+1x20 = = 128 + 0 + 0 + 16 + 8 + 0 + 2 + 1 = 155 Em complemento de 2 de 8 bits 10011011 = - 1x27+0x26+0x25+1x24+1x23+0x22+1x21+1x20 = = -128 + 0 + 0 + 16 + 8 + 0 + 2 + 1 = -101 8 UnB/CIC 113468– Introdução aos Sistemas Computacionais Realização das operações usando o sistema binário complemento de 2 Exatamente como base decimal (emprestar/vai 1s) descartando o transbordo 0011 0111 1100 0111 0110 0010 + 0010 +1010 +1111 - 0110 - 0101 -0100 0101 10001 11011 0001 0001 1110 Obs.: Overflow 0101 = +5 1001 = -7 0110 = 6 + 0100 = +4 + 1010 = -6 - 1000 = -8 1001 ≠ 9 10011 ≠ -13 1110 ≠ 14 O termo overflow em complemento de 2 não significa que houve um transbordo. Mas sim que o resultado não “cabe” na faixa dinâmica de n bits!!! Aritmética Computacional Inteira 9 UnB/CIC 113468– Introdução aos Sistemas Computacionais Multiplicação e Divisão inteira em complemento de 2 Os algoritmos clássicos apenas funcionam com números sinal e magnitude. Devemos operar com os módulos dos operandos e ajustar o sinal do(s) resultado(s). Ajuste do sinal do resultado da multiplicação: Basta verificar se os sinais do multiplicando e do multiplicador são iguais ou diferentes, definindo assim o sinal do produto. Ajuste dos resultados da divisão: Precisamos definir o sinal do quociente e do resto. Dividendo = Quociente x Divisor + Resto 7÷2 → 7 = 3 x 2 + 1 (-7) ÷ 2 → -7 = (-3) x 2 + (-1) 7 ÷ (-2) → 7 = (-3) x (-2) + 1 (-7) ÷ (-2) → -7 = 3 x (-2) + (-1) Regra: Quociente: Mesma regra da multiplicação . Resto: Mesmo sinal do Dividendo. Aritmética Computacional Inteira 10 UnB/CIC 113468– Introdução aos Sistemas Computacionais •Números Reais (ℝ) Já estudamos a forma de representar números reais utilizando o símbolo ‘,’ para indicar a parte fracionária. Ex.: 0101,102 = 5,510 No entanto no computador não temos como representar a ‘,’ como um bit Assim, temos duas formas básicas de representar um número real em bits no computador: o Ponto Fixo o Ponto Flutuante Aritmética Computacional Fracionária 11 UnB/CIC 113468– Introdução aos Sistemas Computacionais Na representação em Ponto Fixo, a posição da virgula binária deve ser previamente definida, assim como o número de bits. Ex.: Dado um número de 8 bits, define-se Q número de casas fracionárias Q3 : -24 23 22 21 20 , 2-1 2-2 2-3 Menor valor: 10000000 = -24 = -16 Maior valor: 01111111 = 23+22 +21 +20+2-1 +2-2 +2-3 = 15,875 Q1: -26 25 24 23 22 21 20, 2-1 Menor valor: 10000000 = -26 = -64 Maior valor: 01111111 = 25+24 +23 +22+21 +20 +2-1 = 63,5 Q7: -20 , 2-1 2-2 2-3 2-4 2-5 2-6 2-7 Menor valor: 10000000 = -20 = -1 Maior valor: 01111111 = 2-1+2-2 +2-3 +2-4+2-5 +2-6 +2-7 = 0,9921875 Aritmética Computacional Fracionária Ponto Fixo 12 UnB/CIC 113468– Introdução aos Sistemas Computacionais 13 Exemplo:Considere 8 bits, calcule a representação em Q7 0.75 = -0.75 = 0.3 = Truncamento? Arredondamento? Considerando 16 bits, calcule a representação em Q15 0.75 = -0.75 = 0.3 = Aritmética Computacional Fracionária Ponto Fixo UnB/CIC 113468– Introdução aos Sistemas Computacionais 14 Operações Matemáticas: da mesma forma que inteiros usando mesmo Q. Soma: Subtração Multiplicação: Divisão Fracionária (ex.: 5/8) <= sem resto! Seguir dividindo até o número de bits necessário ser atingido. Ex.: 8 bits Q0 Q2 Q7 01010001 81 20.25 0.6328125 + 10111001 -71 -17.75 -0.5546875 00001010 10 2.50 0.0781250 00000110 6 1.5 0.046875 x 00001010 x 10 x 2.5 x 0.078125 00000000 00111100 60 3.75 0.003662109375 Aritmética Computacional Fracionária Ponto Fixo UnB/CIC 113468– Introdução aos Sistemas Computacionais 15 Vantagens: Aritmética é simples e rápida (Processador menor, mais rápido e mais barato) Problemas: Pequena faixa dinâmica Precisão depende da faixa dinâmica Aritmética Computacional Fracionária Ponto Fixo UnB/CIC 113468– Introdução aos Sistemas Computacionais 16 Precisamos de uma maneira de representar grande faixa dinâmica - números muito pequenos: 0,000000000000001182721226716 - números muito grandes: 167283876351200000000000000000 Notação Científica (base 10): Mantissa ou Significando Característica ou Expoente Ex.: 1.182721226716x10-15 e 1.672838763512x1029 Sempre normalizado, isto é, apenas 1 dígito não decimal (diferente de zero). Notação Científica (base 2) Ex.: 1.010x2-2 = 0.010102 = 0.312510 = (1+0.25)x2-2 Sempre normalizado, isto é, apenas 1 dígito não binário (diferente de zero). Aritmética Computacional Fracionária Ponto Flutuante UnB/CIC 113468– Introdução aos Sistemas Computacionais Representação: - sinal(S), mantissa(M), expoente(E): (–1)S × M× 2E - mais bits para a mantissa fornece mais precisão - mais bits para o expoente aumenta a faixa dinâmica Padrão de representação em ponto flutuante IEEE 754: - precisão simples: (1+8+23) 32 bits Tipo em C (float) - precisão dupla: (1+11+52) 64 bits Tipo em C (double) 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 s expoente Fração 1 bit 8 bits 23 bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 s expoente Fração 1 bit 11 bits 20 bits Fração (continuação) 32 bits Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 17 UnB/CIC 113468– Introdução aos Sistemas Computacionais 18 O bit “1” inicial do significando está implícito (aumenta a precisão) O expoente possui um off-set para facilitar a ordenação - Off-set de 127 para precisão simples e de 1023 para precisão dupla - Formato: (–1)sinal × (1 + fração) × 2(expoente – offset) Exemplo: Converter o número decimal N = -5,0 para IEE754 precisão simples Colocar no formato: N = (-1)S x M x 2E onde 1 ≤ M < 2 S = 1 E = floor(log2(N)) = floor(log2(5,0)) = floor(2,3219) = 2 => expoente=129 M = N / 2E = 5,0 / 22 = 5,0/4 = 1,25 => 1,012 Assim: -5,0 = (-1)1 (1,012) x 2 (129-127) precisão simples IEEE: 1100 0000 1010 0000 0000 0000 0000 00002 0xC0A00000 Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 UnB/CIC 113468– Introdução aos Sistemas Computacionais Dado o número em Ponto Flutuante IEEE754: 0xC1100000 qual o número decimal representado? 1100 0001 0001 0000 0000 0000 0000 0000 1 10000010 00100000000000000000000 Expoente = 130 - 127 = 3 Mantissa: 1,001 Logo: (-1)1 x 1,001 x 23 = - (1001,0) = -9,0 Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 19 UnB/CIC 113468– Introdução aos Sistemas Computacionais Como representar 0? Precisão Simples Precisão Dupla Objeto Expoente Fração Expoente Fração 0 0 0 0 0 0 ≠0 0 ≠0 ±Número desnormalizado 1-254 ∀ 1-2046 ∀ ±Número Ponto Flutuante 255 0 2047 0 ±∞ 255 ≠0 2047 ≠0 NaN Qual a faixa dinâmica dos números representáveis em precisão simples e dupla? MAX_single: MIN_single: MAX_double: MIN_double: Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 20 UnB/CIC 113468– Introdução aos Sistemas Computacionais Soma e subtração: Procedimento idêntico às operações em Notação Científica base 10. - Converte-se o número com menor expoente para igualar ao expoente do maior e soma-se (subtrai-se) as mantissas Ex.: Decimal 5,25x102 + 1,5x10-1 = 5,25x102 + 0,0015x102 = 5,2515x102 (4 dígitos) = 5,251x102 Ex.: Binário 1,01x22 + 1,1x2-1 = 1,01x22 + 0,0011x22 = 1,0111x22 (4 bits) = 1,011x22 Note 5 + 0,75 resulta em 5,5 devido à precisão limitada em 4 bits Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 21 UnB/CIC 113468– Introdução aos Sistemas Computacionais Multiplicação e Divisão: Procedimento idêntico às operações em Notação Científica base 10: - Multiplica-se as mantissas e soma-se os expoentes ou - Divide-se as mantissas e subtrai-se os expoentes Ex.: Decimal 3,23x102 x 3,415x10-1 = 11,03045 x 101 (4 dígitos) = 1,103x102 Ex.: Binário 1,000x2-1 x (-1,110x2-2) =- 1,110000x2-3 (4 bits) = -1,110x2-3 Overflow: |resultado| > MAX : |resultado|=infinito Underflow: |resultado| < MIN : |resultado|=0,0 Aritmética Computacional Fracionária Ponto Flutuante IEEE 754 22 Introdução aos Sistemas Computacionais�Disciplina: 113468� Aritmética Computacional Número do slide 3 Número do slide 4 Número do slide 5 Número do slide 6 Número do slide 7 Número do slide 8 Número do slide 9 Número do slide 10 Número do slide 11 Número do slide 12 Número do slide 13 Número do slide 14 Número do slide 15 Número do slide 16 Número do slide 17 Número do slide 18 Número do slide 19 Número do slide 20 Número do slide 21 Número do slide 22
Compartilhar