Untitled
#include <stdio.h> #include <math.h> long int formula_numeros_normais (char sinal, double mantissa, long int expoente, int nr_bits_expoente){ double valor; long int bias = pow(2, (nr_bits_expoente - 1)) - 1; if (sinal == '0'){ valor = 1.0 * (1.0 + mantissa) * pow(2, expoente - bias); } else{ valor = (-1.0) * (1.0 + mantissa) * pow(2, expoente - bias); } return valor; } long int formula_numeros_subnormais (char sinal, double mantissa, int nr_bits_expoente){ double valor; long int bias = pow(2, (nr_bits_expoente - 1)) - 1; if (sinal == '0'){ valor = 1 * mantissa * pow(2, (1 - bias)); } else{ valor = (-1) * mantissa * pow(2, (1 - bias)); } return valor; } int main(){ int N; // nr. de linhas do input int E = 3; // nr. de bits do expoente E int M = 4; // nr. de bits da mantissa M double valor; long int expoente = 0; // expoente correspondente na base decimal double f = 0; // parte fracionária da mantissa int expoente_aux_1 = 0; int mantissa_aux_1 = 0; int posicao_mantissa = -1; int posicao_expoente = E - 1; char bits[BUFSIZ] = "11101011"; for (int i = 1; i <= E; i++){ if(bits[i] == '1'){ expoente_aux_1++; expoente = expoente + pow(2, posicao_expoente); } posicao_expoente--; } for (int j = E + 1; j <= E + M; j++){ if(bits[j] == '1'){ mantissa_aux_1++; f = f + pow(2,posicao_mantissa); } posicao_mantissa--; } if (expoente_aux_1 == 0 && mantissa_aux_1 == 0){ printf("\n%d\n", 0); } else if (expoente_aux_1 == E && mantissa_aux_1 == 0){ if (bits[0] == '0'){ printf("\n%s\n", "+Infinity"); } else{ printf("\n%s\n", "-Infinity"); } } else if (expoente_aux_1 == E && mantissa_aux_1 > 0){ printf("\n%s\n", "NaN"); } else if (expoente_aux_1 == 0 && mantissa_aux_1 >= 1){ valor = formula_numeros_subnormais(bits[0], f, E); } else if (expoente_aux_1 < E && expoente_aux_1 > 0){ valor = formula_numeros_normais(bits[0], f, expoente, E); } printf("\n\nValor pretendido: %lg\nNr. de bits do expoente: %d\nNr. de bits da mantissa: %d\nExpoente: %ld\nMantissa (parte fracionaria): %lg\nNr. de bits do expoente a 1: %d\nNr. de bits da mantissa a 1: %d\n", valor, E, M, expoente, f, expoente_aux_1, mantissa_aux_1); return 0; }
Leave a Comment