Defines interface of iFloat.c functions (do not modify) More...
Go to the source code of this file.
Macros | |
#define | BITS 32 |
#define | BITS_EXP 8 |
#define | BITS_MANT 23 |
#define | EXP_BIAS 127 |
Typedefs | |
typedef unsigned int | iFloat_t |
Functions | |
iFloat_t | floatGetSign (iFloat_t x) |
iFloat_t | floatGetExp (iFloat_t x) |
iFloat_t | floatGetVal (iFloat_t x) |
void | floatGetAll (iFloat_t x, iFloat_t *sign, iFloat_t *exp, iFloat_t *val) |
iFloat_t | floatLeftMost1 (iFloat_t bits) |
iFloat_t | floatAbs (iFloat_t x) |
iFloat_t | floatNegate (iFloat_t x) |
iFloat_t | floatAdd (iFloat_t x, iFloat_t y) |
iFloat_t | floatSub (iFloat_t x, iFloat_t y) |
This file defines the interface to a C file iFloat.c that you will complete. You will learn how to do floating point arithmatic without using any float
variables. Rather you will perform the operations by using the sign, exponent, and digit fields as defined in the IEEE floating Point Standard.
Everything in a computer is stored as a series of 0/1's. When you use an int
to type a value, you are telling the compiler (and ultimately the CPU) to treat the 0/1's as a two's complement number. When you use float
, the 0/1's represent a floating point number. When an addition is performed, the computer knows whether to use the integer or floating point add instruction. The two instruction do different things to the 0/1's.
In this assignment, you are doing floating point operations without using floating point instructions. You are directly doing the bit manipulations necessary to to complete the add. Since iFloat_t
is an integer type (short/int
), the compiler will generate integer instructions. The iFloat_t
is to remind you (the programmer), that although the computer is going to treat all values as integers, you know it is really 3 values (sign, exponent, mantissa) packed into 16/32 bits. Your responsibility is to unpack the three pieces, do the operations necessary to complete the operation, then put the three pieces back together.
iFloat_t floatAbs | ( | iFloat_t | x | ) |
iFloat_t floatAdd | ( | iFloat_t | x, |
iFloat_t | y | ||
) |
Add two floating point values
x | an integer containing a IEEE floating point value |
y | an integer containing a IEEE floating point value |
void floatGetAll | ( | iFloat_t | x, |
iFloat_t * | sign, | ||
iFloat_t * | exp, | ||
iFloat_t * | val | ||
) |
Get the sign, exponent, and value in a single call. You will use the
x | the integer containing a IEEE floating point value |
sign | pointer to location where sign will be stored |
exp | pointer to location where exponent will be stored |
val | pointer to location where value will be stored C pointers to return values. |
iFloat_t floatGetExp | ( | iFloat_t | x | ) |
iFloat_t floatGetSign | ( | iFloat_t | x | ) |
iFloat_t floatGetVal | ( | iFloat_t | x | ) |
iFloat_t floatLeftMost1 | ( | iFloat_t | bits | ) |
iFloat_t floatNegate | ( | iFloat_t | x | ) |
iFloat_t floatSub | ( | iFloat_t | x, |
iFloat_t | y | ||
) |
Subtract to floating point values
x | an integer containing a IEEE floating point value |
y | an integer containing a IEEE floating point value |