Neste laboratório, veremos como a representação em ponto flutuante, por ser inexata, pode fornecer resultados inesperados a um usuário. Para isso, utilizaremos alguns programas em C. A seguir, serão descritos os passos a serem seguidos para realização deste laboratório:
cd diretório
gcc -o nome_do_executavel nome_do_arquivo_fonte
#includePERGUNTA 1: O que você espera que seja impresso?int main () { float x=0.01; if ((x*100.0) != 1.0) printf ("Não iguais \n"); else printf ("Iguais \n"); return(0); }
PERGUNTA 2: Execute o programa e verifique o que acontece. Era o que você esperava ?
Compile e execute o programa f02.c abaixo:
#includeint main () { float x=0.01; x=x*100.0; if (x != 1.0) printf ("Não iguais \n"); else printf ("Iguais \n"); return(0); }
PERGUNTA 3: Execute o programa e verifique o que acontece. Apresentou o mesmo comportamento de f01.c ? Explique o comportamento destes programas.
DICA: No processador Pentium, quando uma operação aritmética é executada em ponto flutuante, os operandos são colocados em registradores de 80 bits,
com 64 bits para a mantissa, 15 bits para o expoente e 1 bit para sinal. Lembre-se que para armazenar uma variável do tipo float, utilizam-se 32 bits, 23 bits para mantissa, 8 bits para expoente e 1 bit para sinal.
#include "stdio.h" int main () { float X,Y,Y1,Z,Z1; X=77777; Y=7; Y1=1/Y; Z=X/Y; Z1=X*Y1; printf ("Z %f Z1 %f \n", Z, Z1); if (Z==Z1) printf ("Z %f Z1 %f iguais \n",Z,Z1); else printf ("Z %f Z1 %f diferentes \n",Z,Z1); return(0); }
PERGUNTA 4:
O que você acha que deve ser impresso na execução deste programa ?
PERGUNTA 5:
Compile e execute o programa. O resultado é o que você esperava? Porque ?
#include "stdio.h" int main () { float X,Y; X=1000.2; Y=X-1000.0; printf ("Y =%f \n",Y); return(0); }
PERGUNTA 6: Explique se era o que você esperava.
Insira a linha printf("Float Y = %f \n",Y), após o comando printf no arquivo conv1.c. Execute novamente o programa.
PERGUNTA 7:
Agora você consegue entender o que aconteceu ? Explique porque.