Mat01099 - Seminário Integrador III - UFRGS
Prof. João Batista Carvalhorepresentação de números reais em máquinas digitais: o padrão IEEE 754
Nos computadores atuais, números reais são representados usando um sistema de representação chamado sistema ponto flutuante, seguindo o padrão IEEE 754 (criado em 1985, atualizado em 2008), considerado nas definições a seguir.
Um número ponto-flutuante não-nulo normalizado
em base 2 tem a forma:
ou seja, ele é representado pelosalgarismos binários
e por uma potência
, também em binário. De outra forma,
ondeé a mantissa,
é o expoente,
é o parâmetro de precisão. Pelo padrão IEEE, o expoente
pode ser qualquer número inteiro entre um mínimo
e um máximo
. Valores recomendados são
- precisão simples:
,
,
![]()
- precisão dupla:
,
,
.
Em ambiente computacionais como Matlab, Maple e Scilab, precisão dupla é adotada por padrão. Uma vez que a base decimal é a que compreendemos e vivenciamos, é importante conhecermos a quantos algarismos decimais (dígitos) corresponde o padrão
(precisão dupla) em binário, bem como para o caso
(precisão simples).
Tarefas:
- Usando format, em Scilab, podemos estabelecer quantos dígitos são mostrados na tela do computador. Descubra como format funciona, e também o número máximo de casas significativas corretas que a mantissa de um número real precisão dupla pode ter, imprimindo dízimas periódicas
e
na tela do Scilab.
- Descubra, em Scilab, qual a menor potência de
que pode ser adicionada ao número
e ainda resultar em um número diferente deste.
- Descubra, em Scilab, qual a menor potência de
que não é convertida (arredondada) para zero.
- Descubra, em Scilab, qual a maior potência de
possível.
- Repita as tarefas anteriores usando a linguagem FORTRAN 90 em ambiente de precisão simples, a partir do protótipo abaixo (template):
program teste1 integer :: i real :: u ! ! definimos u variavel real de precisao simples ! alternativamente, usariamos double precision u ! write(*,*) 'Mat01099 - Seminario Integrador III' i = 1 u = 1.0/3 write(*,'(a,i2,a,x,f20.18)') 'i=',i,', u=',u end program