Você está na página 1de 26

Prof.

Janier Arias Garcia


DELT – Escola de Engenharia
UFMG

Arquitetura e Organização de Computadores


Ponto Flutuante
Adaptado a partir dos Slides de Organização de Computadores 2006/02
do Prof. Leandro Galvão DCC/UFAM - galvao@dcc.ufam.edu.br pelo Prof.
Ricardo de Oliveira Duarte e pelo Prof. Frank Sill Torres

1
Ponto flutuante (Padrão IEEE 754)

• Um número real pode ser representado no seguinte formato:

(-1)s × m × Be

• s – sinal
• m – significando (mantissa)
• B – base
• e – expoente
2
Ponto flutuante (Padrão IEEE 754)
:: Sinal e Fração
• O bit mais à esquerda • O significando é representado
guarda o sinal do na forma normalizada (base
número: binária):
• Bit = 0 →número positivo 1.xxxxx
• Bit = 1 →número negativo E não na forma científica:
Não há mais notação de 0.1xxxx
complemento de 2 para o • Nessa forma, o significando é
número representado! composto por:
• Algarismo 1
• Ponto de separação
• Fração
3
Ponto flutuante (Padrão IEEE 754)
:: Fração e Base
• 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.
23 bits
fração = 1,110011 11001100000000000000000
fração

• A base B é implícita (binária) e não precisa ser guardada, pois é a mesma para
todos os números representados.
4
Ponto flutuante (Padrão IEEE 754)
:: Expoente e Notação deslocada
• O expoente é representado na notação Decimal
Complemento de Notação
deslocada, ou excesso de N, onde: dois deslocada

Maior expoente representável: 2n-1 +4 -- 111


• Representado por: 11...11 +3 011 110
• Menor expoente representável: -(2n-1 - 1) +2 010 101
• Representado por: 00...00 +1 001 100
0 000 011
-1 111 010
-2 110 001
• Representação do valor zero: 01...11
-3 101 000
• Representação do valor um: 10...00
-4 100 --
• Demais valores: somar ao zero (o deslocamento N)
• Vantagem: facilita a comparação de expoentes entre números de mesmo sinal
5
Ponto flutuante
• O formato IEEE 754 de precisão simples (float) ocupa 32 bits

1 bit 8 bits 23 bits

sinal expoente fração

• O formato IEEE 754 de precisão dupla (double) ocupa 64 bits

1 bit 11 bits 52 bits

sinal expoente fração

6
Ponto flutuante
• Exemplo:
(10)bin = +1.0 × 21

1 bit 8 bits 23 bits


0 1000 0000 0000 0000 0000 0000 0000 000
sinal expoente fração

7
Conversão número real (decimal) para
Notação IEEE 754 (precisão simples)
• Exemplo: Converter 23,5467
1) Divido o número pela maior potência de 2 imediatamente menor
que o número original
23,5467/24 = 23,5467/16 = 1,47166875
Dessa forma o número original fica reescrito dessa forma:
1,47166875 x 24
Agora convertemos o número 1,47166875 x 24 para a notação
IEEE754 (precisão simples)
Número positivo = bit mais significativo igual a 0 (bit31)
Expoente = +4 01111111  Expoente 0 (+127)
+00000100  Somo 4 ao Expoente 0
Expoente final na notação deslocada → 10000011 (+131) 8
Conversão número real (decimal) para
Notação IEEE 754 (precisão simples)
Resta agora converter a mantissa 0,47166875 para a notação IEEE754
(precisão simples)
Como temos 23 bits para a mantissa na notação IEEE754 (precisão
simples), podemos escrever a parte fracionária com 6 algarismos em
Hexadecimal (6 x 4 = 24) fazendo a correção necessária do último bit.

Fração ou Resto 0,47166875 0,5467 0,7472 0,9552 0,2832 0,5312

X 16 7,5467 8,7472 11,9552 15,2832 4,5312 8,4992

Inteiro(Hexa) 7 (7) 8 (8) 11 (B) 15 (F) 4 (4) 8 (8)

Mantissa em Hexadecimal → 7 8 B F 4 8

X
Mantissa em Binário → 0111 1000 1011 1111 0100 1000

Mantissa agora com os 23 bits da Notação IEEE 754 9


Conversão número real (decimal) para
Notação IEEE 754 (precisão simples)

Número final na notação IEEE 754 (precisão simples)

0 10000011 01111000101111110100100
01000001101111000101111110100100
Separando de 4 em 4 bits para escrevê-lo em Hexadecimal fica:
0100 0001 1011 1100 0101 1111 1010 0100

4 1 B C 5 F A 4

10
Conversão de número em Notação
IEEE 754 (precisão simples) para real
• Exemplo: Converter: 41BC5FA4
1) Converto o número para binário:
0100 0001 1011 1100 0101 1111 1010 0100
2) Reagrupo o número binário na notação:
sinal + expoente deslocado + mantissa
0 10000011 01111000101111110100100
3) Incluo mais um bit igual a zero ao fim da mantissa para
completar 24 bits (6 algarismos hexa) e reorganizo a mantissa
grupando-a de 4 em 4 bits.
0 10000011 0111 1000 1011 1111 0100 1000
sinal expoente mantissa 23,54669952392578125
131 -127=4 78BF48
+ 24 * (1,0 + 7*16-1 + 8*16-2 + 11*16-3 + 15*16-4 + 4*16-5 + 8*16-6)
11
Ponto flutuante × Ponto fixo
Underflow: ocorre quando
o expoente é muito
pequeno (= pequena fração)
Inteiros representados
para ser representado no
campo expoente.
Overflow: ocorre quando o
expoente é muito grande
-231 0 231 - 1
para ser representado no
campo expoente.
overflow underflow underflow overflow
negativo negativo positivo positivo
números números
representados representados

- (2 - 2-23) × 2127 - 2-126 0 2-126 (2 - 2-23) × 2127


12
Densidade de números de ponto flutuante
• Números representados em ponto flutuante não são igualmente
espaçados

• Alguns cálculos podem produzir resultados que não são exatos e


tenham de ser arredondados para a notação mais próxima.

13
Ponto flutuante
:: Zero
• Como o zero é representado em ponto flutuante?

0 00000000 0000000000000000000000
sinal expoente fração

“+ 0”

1 00000000 0000000000000000000000
sinal expoente fração

“- 0”
14
Ponto flutuante
:: Infinito
• Notação especial para representar eventos incomuns:
• permite que os programas possam manipulá-los sem que sejam
interrompidos.

0 11111111 0000000000000000000000
sinal expoente fração +∞

1 11111111 0000000000000000000000
sinal expoente fração
-∞
15
Ponto flutuante
:: NaN – Not a Number
• É uma representação do resultado de operações inválidas, tais como:
• 0/0
Se a = 1 quiet NaN
• ∞-∞
Se a = 0 Signaling NaN
• ∞/∞
• 0×∞
quiet NaN: propaga o resultado
• √x, x < 0
signaling NaN: provoca uma exceção

x 11111111 axx...xx ≠ 0
sinal expoente fração

16
Ponto flutuante
:: Números desnormalizados
• Servem para lidar com casos de underflow.
• Quando o expoente é muito pequeno para ser representado em 8
bits (menor que -126), o número é deslocado à direita até que o
expoente seja igual a -126.

x 00000000 xxx...xx ≠ 0
sinal expoente fração

17
Ponto flutuante
:: Números desnormalizados

18
Floating-Point Addition
• Consider a 4-digit decimal example
• 9.999 × 101 + 1.610 × 10–1
• 1. Align decimal points
• Shift number with smaller exponent
• 9.999 × 101 + 0.016 × 101
• 2. Add significands
• 9.999 × 101 + 0.016 × 101 = 10.015 × 101
• 3. Normalize result & check for over/underflow
• 1.0015 × 102
• 4. Round and renormalize if necessary
• 1.002 × 102

Chapter 3 — Arithmetic for


Computers — 19
Floating-Point Addition
• Now consider a 4-digit binary example
• 1.0002 × 2–1 + –1.1102 × 2–2 (0.5 + –0.4375)
• 1. Align binary points
• Shift number with smaller exponent
• 1.0002 × 2–1 + –0.1112 × 2–1
• 2. Add significands
• 1.0002 × 2–1 + –0.1112 × 2–1 = 0.0012 × 2–1
• 3. Normalize result & check for over/underflow
• 1.0002 × 2–4, with no over/underflow
• 4. Round and renormalize if necessary
• 1.0002 × 2–4 (no change) = 0.0625

Chapter 3 — Arithmetic for


Computers — 20
Floating-Point Instructions
• Floating-point coprocessor (Coprocessor 1)
• 32 32-bit floating-point registers ($f0-$f31)
• Double-precision values held in two floating
point registers
– e.g., $f0 and $f1, $f2 and $f3, etc.
– Double-precision floating point registers: $f0, $f2,
$f4, etc.

Chapter 6 <21>
Floating-Point Instructions

Name Register Number Usage


$fv0 - $fv1 0, 2 return values
$ft0 - $ft3 4, 6, 8, 10 temporary variables
$fa0 - $fa1 12, 14 Function arguments
$ft4 - $ft8 16, 18 temporary variables
$fs0 - $fs5 20, 22, 24, 26, 28, 30 saved variables

Chapter 6 <22>
F-Type Instruction Format
• Opcode = 17 (0100012)
• Single-precision:
– cop = 16 (100002)
– add.s, sub.s, div.s, neg.s, abs.s, etc.
• Double-precision:
– cop = 17 (100012)
– add.d, sub.d, div.d, neg.d, abs.d, etc.
• 3 register operands:
– fs, ft: source operands
– fd: destination operands F-Type
op cop ft fs fd funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

Chapter 6 <23>
Floating-Point Branches
• Set/clear condition flag: fpcond
– Equality: c.seq.s, c.seq.d
– Less than: c.lt.s, c.lt.d
– Less than or equal: c.le.s, c.le.d
• Conditional branch
– bclf: branches if fpcond is FALSE
– bclt: branches if fpcond is TRUE
• Loads and stores
– lwc1: lwc1 $ft1, 42($s1)
– swc1: swc1 $fs2, 17($sp)
Chapter 6 <24>
O que vocês aprenderam hoje?
⚫ Ponto Flutuante
 Representação de números em Ponto Flutuante IEEE-754.
 Somador em Ponto Flutuante.
 Multiplicador em Ponto Flutuante.
 Instruções de Ponto Flutuante no MIPS
Converta os seguintes números de
decimal a ponto flutuante 32 bits
Exercício 1. 8,739
2. 3,141592653589793
3. 0xFF800000 25
Referecias Bibliograficas
[1] David Money Harris & Sarah L. Harris. Digital Design and Computer
Architecture - Morgan Kaufman 2nd Ed. 2012 - Versão em Português no Moodle:
Projeto Digital e Arquitetura de Computadores by David Money Harris & Sarah L.
Harris 2016.
• Capítulo 5. Página 362 a 367
• Capítulo 6. Página 494 a 496
[2] David A. Patterson, John L. Hennessy. Organização e Projeto de
Computadores - A Interface Hardware/ Software. 3ª. Edição. Editora Campus,
2012.
[3] William Stallings – Arquitetura e Organização de Computadores 10ª Edição –
Pearson – Prentice Hall – 2017.
[4] http://steve.hollasch.net/cgindex/coding/ieeefloat.html

26

Você também pode gostar