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 pelos algarismos 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