#include <stdio.h> #include <math.h> int main() { int i = 16777216; /* 2^24 */ float f = 16777216.0; double d = 16777216.0; printf("[2^24]:\ti = %d f = %f d = %f\n",i,f,d); i++; f++; d++; printf("[+1]:\ti = %d f = %f d = %f\n",i,f,d); i = 536870912; /* 2^29 */ f = 536870912.0; d = 536870912.0; printf("\n[2^29]:\ti = %d f = %f d = %f\n",i,f,d); i+=32; f+=32.0; d+=32.0; printf("[+32]:\ti = %d f = %f d = %f\n",i,f,d); i = 536870912; f = 536870912.0; d = 536870912.0; i += 64; f += 64.0; d += 64.0; printf("[+64]:\ti = %d f = %f d = %f\n",i,f,d); return 0; }O que aconteceu? Conhecendo a representação de valores de ponto flutuante no padrão IEEE-754, como você explica esse resultado? (Escreva no papel a representação dos valores dados em float e double para dar sua resposta.)
compara
que recebe dois valores
de ponto flutuante do tipo float
e retorne um inteiro:
Sua função deve fazer a comparação manipulando as representações dos valores! Para extrair as partes da representação de um valor de ponto flutuante você pode usar, novamente, as macros fornecidas aqui.
O protótipo da função é:
int compara(float f1, float f2);
Uma sugestão de main
para testar suas funções de conversão
está aqui.