260 likes | 369 Views
Sistemas de Computação. Aritmética Computacional Ponto Flutuante –. Material originalmente elaborados pelo Prof . Dr. David Fernandes david@dcc.ufam.edu.br. Compilado a partir de slides preparados por. Prof. MSc. Leandro Galvão galvao@dcc.ufam.edu.br www.dcc.ufam.edu.br/~dcc_oc.html.
E N D
Sistemas de Computação • Aritmética Computacional • Ponto Flutuante – Material originalmente elaborados pelo Prof. Dr. David Fernandes david@dcc.ufam.edu.br Compilado a partir de slides preparadospor Prof. MSc. Leandro Galvão galvao@dcc.ufam.edu.br www.dcc.ufam.edu.br/~dcc_oc.html
Frações binárias • A parte fracionária (entre 0 e 1) de um número real em notação binária é representada por: • Portanto, seu valor em decimal (F) é dado por: • A expressão anterior pode ser reescrita como:
Frações binárias • A expressão anterior sugere uma técnica de conversão. se multiplicarmos F por 2, teremos: • Da expressão acima, percebe-se que b-1 é a parte inteira do número (2 × F). • Portanto, podemos afirmar que (2 × F) = b-1 + F1, onde 0 < F1 < 1, e: • Para encontrar b-2, basta repetir o processo.
Frações binárias • Assim, o processo de conversão da fração F de decimal para binário envolve repetidas multiplicações por 2. A cada passo, a parte fracionária do resultado do passo anterior é multiplicada por 2. • Os dígitos da parte inteira serão 0 ou 1 (da definição de bi), contribuindo para a formação da representação binária.
Frações binárias • O processo anterior não é necessariamente exato: • Uma fração decimal com número finito de dígitos pode corresponder a uma fração binária com um número infinito de dígitos. • Nesses casos, o algoritmo de conversão é suspenso após um número pré-estabelecido de passos, dependendo da precisão desejada.
Escolha da notação • Com a notação de complemento de 2, podemos representar a parte inteira de números reais. • Com a notação fracionária, podemos representar a parte fracionária do mesmo número real. • Limitações: • números muito grandes não podem ser representados • números muito pequenos não podem ser representados • dificuldades para manter precisão durante realização de operações aritméticas
Ponto flutuante (Padrão IEEE 754) • Um número real pode ser representado no seguinte formato: (-1)s×m×Be • s – sinal • m – mantissa • B – base (implícita, não representada) • e – expoente
Ponto flutuante (Padrão IEEE 754) 1 bit 8 bits 23 bits sinal expoente fração 1 bit 11 bits 52 bits sinal expoente fração • O formato de precisão simples (float) ocupa 32 bits. • O formato de precisão dupla (double) ocupa 64 bits.
Ponto flutuante (Padrão IEEE 754):: Sinal • O bit mais à esquerda guarda o sinal do número: • bit = 0 número positivo • bit = 1número negativo
Ponto flutuante (Padrão IEEE 754) :: Fração • A mantissa é representada na forma normalizada (base binária): • A mantissa é composta por: • Algarismo 1 • Ponto de separação • Fração
Ponto flutuante (Padrão IEEE 754):: Fração 23 bits 11001100000000000000000 fração = 1,110011 fração • O algarismo 1 e o ponto de numeração não precisam ser armazenados, pois são os mesmos para todos os números reais representados. • Caso a fração possua menos bits que o esperado, zeros devem ser colocados à direita, pois não têm significância.
Ponto flutuante (Padrão IEEE 754):: Fração 1 bit 15 bits 64 bits sinal expoente mantissa • Por razões históricas, o co-processador de ponto flutuante Intel não utiliza parte inteira implícita, ou seja, a parte inteira também é representada juntamente com a fração. • O formato de precisão estendida ocupa 80 bits.
Ponto flutuante (Padrão IEEE 754):: Expoente • O expoente é representado na notação deslocada, ou excesso de N • Maior expoente representável: 2n-1 • Representado por: 11...11 • Menor expoente representável: -(2n-1 - 1) • Representado por: 00...00
Ponto flutuante (Padrão IEEE 754):: Notação deslocada • Representação do valor zero: 01...11. • Representação do valor um: 10...00. • Demais valores: somar ao zero (deslocamento).
Ponto flutuante (Padrão IEEE 754) 1 bit 8 bits 23 bits 0 1000 0000 0000 0000 0000 0000 0000 000 sinal expoente fração • Exemplo: (10)bin = +1.0 × 21
Ponto flutuante (Padrão IEEE 754) • Mais exemplos: fração em binário fração em decimal float expoente não sinalizado expoente decimal
Ponto flutuante × Ponto fixo:: Faixa de números representados Inteiros representados -231 231 - 1 0 overflow negativo underflow negativo underflow positivo overflow positivo números representados números representados - 2-127 2-127 (1 - 2-24) × 2128 - (1 - 2-24) × 2128 0
Ponto flutuante:: Zero 0 1 00000000 00000000 0000000000000000000000 0000000000000000000000 sinal sinal expoente expoente fração fração • Como representar o zero em ponto flutuante? • Adota-se uma convenção. + 0 – 0
Ponto flutuante:: Infinito 0 1 11111111 11111111 0000000000000000000000 0000000000000000000000 sinal sinal expoente expoente fração fração • Notação especial para representar eventos incomuns: • permite que os programas possam manipulá-los sem que sejam interrompidos. +∞ -∞
Ponto flutuante:: NaN – Not a Number x 11111111 xxx...xx ≠ 0 sinal expoente fração • É uma representação do resultado de operações inválidas, tais como: • 0/0 • ∞ - ∞ • ∞/∞ • 0 × ∞ • √x, x < 0
Código ASCII (texto) • ASCII • American Standard Code for Information Interchange • A primeira versão foi criada em 1963 para normalizar a transmissão e armazenamento de texto. • Em 1967 foram incluídas as letras minúsculas no código, que essencialmente permaneceu inalterado até nossos dias.
Código ASCII Código ASCII
UNICODE • O código ASCII possui a grande desvantagem de apenas permitir a representação de 28=256 símbolos diferentes. • O código UNICODE pretende normalizar a codificação dos caracteres utilizados em todas as escritas do mundo. • Utiliza 16 bits para codificar cada caracter e encontra-se disponível nos sistemas informáticos mais recentes. • Mais informações em http://www.unicode.org
Para saber mais... • William Stallings. Computer Organization and Architecture: Designing for Performance. 7th Ed. Prentice Hall, 2005. Cap. 09. • Patterson & Hennessy. Organização e Projeto de Computadores (Interface HW/SW). Cap. 3. • Sivarama P. Dandamudi. Guide to Assembly Language Programming in Linux. Springer, 2005. Cap. 22. • Kip R. Irvine. Assembly Language For Intel-Based Computers. 5th Edition. Prentice Hall, 2006. Cap. 17.