From 43b2db69974242c57220b180d1d19a6d916df491 Mon Sep 17 00:00:00 2001 From: Rushil Umaretiya Date: Wed, 21 Feb 2024 16:07:50 -0500 Subject: [PATCH] finished f32 --- f32.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/f32.c b/f32.c index 2e74dff..527d0f3 100644 --- a/f32.c +++ b/f32.c @@ -2,8 +2,36 @@ // I pledge the COMP 211 honor code. #include +#include #include +#include -int main() { - return EXIT_SUCCESS; +int main(int argc, char* argv[]) { + // convert a IEEE 754 single precision floating point number to a 32-bit + // integer + char input[33]; + char exponent[9]; + char mantissa[24]; + + strncpy(input, argv[1], 32); + input[32] = '\0'; + + strncpy(exponent, input + 1, 8); + strncpy(mantissa, input + 9, 23); + + int sign = (input[0] == '1') ? -1 : 1; + + long int exp = strtol(exponent, NULL, 2) - 127; + + float frac = 1.0; + + for (int i = 0; i < 23; i++) { + if (mantissa[i] == '1') { + frac += pow(2, -i - 1); + } + } + + float result = sign * frac * pow(2, exp); + + printf("%.4f\n", result); }