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
Frações binárias
A parte fracionária (entre 0 e 1) de um número
real em notação binária é representada por:
bi  0 ou 1
0.b1b2b3 
Portanto, seu valor em decimal (F) é dado por:
1
2
3
F  (b1  2 )  (b2  2 )  (b3  2 )  
A expressão anterior pode ser reescrita como:
1
1
1
1
2
F  2  b1  2  (b2  2 )  2  (b3  2 )  
1
1
1
F  2  (b1  2  (b2  2  (b3  
Frações binárias
 A expressão anterior sugere uma técnica de conversão.
se multiplicarmos F por 2, teremos:
2  F  b1  21  (b2  21  (b3  
 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:
1
1
F1  2  (b2  2  (b3  
 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
m
B
e
–
–
–
–
sinal
mantissa
base (implícita, não representada)
expoente
Ponto flutuante (Padrão IEEE 754)
 O formato de precisão simples (float) ocupa 32 bits.
1 bit
8 bits
23 bits
sinal
expoente
fração
 O formato de precisão dupla (double) ocupa 64 bits.
1 bit
11 bits
52 bits
sinal
expoente
fração
Ponto flutuante (Padrão IEEE 754)
:: Sinal
O bit mais à esquerda guarda o sinal do
número:
 bit = 0  número positivo
 bit = 1  número negativo
Ponto flutuante (Padrão IEEE 754)
:: Fração
A mantissa é representada na forma
normalizada (base binária):
1.b1b2b3 
A mantissa é composta por:
 Algarismo 1
 Ponto de separação
 Fração
Ponto flutuante (Padrão IEEE 754)
:: 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.
23 bits
fração = 1,110011
11001100000000000000000
fração
Ponto flutuante (Padrão IEEE 754)
:: Fração
 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.
1 bit
15 bits
64 bits
sinal
expoente
mantissa
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 excesso de N
Decimal
Complemento
de dois
Notação
excesso de N
+4
--
111
+3
011
110
+2
010
101
+1
001
100
0
000
011
-1
111
010
-2
110
001
-3
101
000
-4
100
--
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)
Exemplo:
(10)bin = +1.0 × 21
1 bit
0
sinal
8 bits
1000 0000
expoente
23 bits
0000 0000 0000 0000 0000 000
fração
Ponto flutuante (Padrão IEEE 754)
Mais exemplos:
fração em
binário
float
expoente não
sinalizado
fração em
decimal
expoente
decimal
Ponto flutuante × Ponto fixo
:: Faixa de números representados
Inteiros representados
-231
overflow
negativo
underflow
negativo
underflow
positivo
números
representados
- (1 - 2-24) × 2128
231 - 1
0
- 2-127
números
representados
0
2-127
overflow
positivo
(1 - 2-24) × 2128
Ponto flutuante
:: Zero
Como representar o zero em ponto flutuante?
 Adota-se uma convenção.
0
sinal
00000000
expoente
0000000000000000000000
fração
1
sinal
00000000
expoente
0000000000000000000000
fração
+0
–0
Ponto flutuante
:: Infinito
Notação especial para representar eventos
incomuns:
 permite que os programas possam manipulá-los sem
que sejam interrompidos.
0
sinal
11111111
expoente
0000000000000000000000
fração
+∞
1
sinal
11111111
expoente
0000000000000000000000
fração
-∞
Ponto flutuante
:: NaN – Not a Number
É uma representação do resultado de operações
inválidas, tais como:





0/0
∞-∞
∞/∞
0×∞
√x, x < 0
x
sinal
11111111
expoente
xxx...xx ≠ 0
fração
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
!
“
#
$
%
&
‘
(
)
*
+
,
.
/
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
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.
Questões
Download

Ponto Flutuante